Mehrere Bildeditoren in einem Modul?

Alles rund um Module und Plugins in CONTENIDO 4.9.
Antworten
Horst1234
Beiträge: 366
Registriert: Sa 25. Okt 2008, 12:45
Wohnort: Bremen
Kontaktdaten:

Mehrere Bildeditoren in einem Modul?

Beitrag von Horst1234 » Sa 9. Apr 2016, 08:59

Hallo,
ist es möglich, mehrere Bildeditoren in ein Modul zu integrieren, so dass ein Redakteur verschiedene Einzelbilder über mehrere Bildbuttons anwählen kann?
Den Anfang des Bildmoduls könnte ich ja recht schnell verdoppeln etc und mit weiteren Nummern versehen

Code: Alles auswählen

$imageSource = "CMS_IMG[1]";
$imageDescription = "CMS_IMGDESCR[1]";
if (cRegistry::isBackendEditMode()) {$imageEditor = "CMS_IMGEDITOR[1]";}
Aber was mache ich dann mit:

Code: Alles auswählen

if (0 < strlen($imageSource)) {
    $clientConfig = cRegistry::getClientConfig(cRegistry::getClientId());
    $filename = str_replace($clientConfig["upl"]["htmlpath"], $clientConfig["upl"]["path"], $imageSource);
    list($imageWidth, $imageHeight) = getimagesize($filename);
    $image = new stdClass();
    $image->src = $imageSource;
    $image->alt = $imageDescription;
    $image->width = $imageWidth;
    $image->height = $imageHeight;
} else {
    $image = NULL;
}
Das würde ja ein endlos-Code werden, wenn's überhaupt klappt :?:
Gibt's da ein Vereinfachung, oder so ...
Gruß aus Bremen,
Horst
Webdesign | Contenido: Templateprogrammierung, Einrichtung und Verwaltung | http://www.w2media.de

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Mehrere Bildeditoren in einem Modul?

Beitrag von Faar » Sa 9. Apr 2016, 11:53

Probier es mal so*, ohne Smarty:

Code: Alles auswählen

<span id="Bild1">
$src[1] = "CMS_IMG[1]";
$descr[1] = "CMS_IMGDESCR[1]";
if (cRegistry::isBackendEditMode()) {
    echo "CMS_IMGEDITOR[1]";
}
echo '<img src="'.$src[1].'" alt="'.$descr[1].'" >';
</span>
*ungetestet

Und vielleicht geht auch das danach:

Code: Alles auswählen

if (!empty($src)) {
    $clientConfig = cRegistry::getClientConfig(cRegistry::getClientId());
	$image = array();
	foreach($src as $imageSource){
	    $filename = str_replace($clientConfig["upl"]["htmlpath"], $clientConfig["upl"]["path"], $imageSource);
	    list($imageWidth, $imageHeight) = getimagesize($filename);
	    $image[] = new stdClass();
	    $image[]['src']->src = $imageSource;
	    $image[]['alt']->alt = $imageDescription;
	    $image[]['width']->width = $imageWidth;
	    $image[]['height']->height = $imageHeight;
	}
}
Und mit print_r() dann schauen, ob in $image alles drin ist.
Natürlich muss man die Smarty-Ausgabe dann auch anpassen.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

homtata
Beiträge: 1142
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Re: Mehrere Bildeditoren in einem Modul?

Beitrag von homtata » Sa 9. Apr 2016, 19:08

Ich hab mal ein ähnliches Modul gemacht, mehrere Bilder mit mehreren Bildunterschriften, die formatiert über CMS_HTML ausgebbar sein mussten.
Sieht ein bissel chaotisch aus und arbeitet mit festen Containernummern (die du anpassen kannst), aber tuts erstmal.
Die Bilder werden alle gemäß Voreinstellung oben im Modul noch durch eine Bildbearbeitungsfunktion gedreht, um gleiche Bildgrößen usw. zu erhalten.

LG
Dateianhänge
content_text_images_01.zip
(5.96 KiB) 119-mal heruntergeladen

McHubi
Beiträge: 1209
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Mehrere Bildeditoren in einem Modul?

Beitrag von McHubi » Mo 11. Apr 2016, 09:57

Hallo Homtata,

ist Dein Modul was für die "Übersicht vorhandener Module"? :arrow: http://forum.contenido.org/viewtopic.php?f=89&t=36453
Wenn ja, wäre es toll, wenn Du es in einem eigenen Thema veröffentlichen würdest. :D

VG,


Markus
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

Horst1234
Beiträge: 366
Registriert: Sa 25. Okt 2008, 12:45
Wohnort: Bremen
Kontaktdaten:

Re: Mehrere Bildeditoren in einem Modul?

Beitrag von Horst1234 » Do 14. Apr 2016, 18:50

Lieber Homtata,
ich habe dein Modul reingepackt, aber leider wird bei der Templateanwahl (label_template: please_choose) nichts anwählbar, schade.

lieber Faar,
Smarty brauch ich, ich hab deine Idee aufgegriffen, das siehtt bei mir dann so aus:

Code: Alles auswählen

 <?php
defined('CON_FRAMEWORK') || die('Illegal call: Missing framework initialization - request aborted.');
$imageSource10 = "CMS_IMG[10]";
$imageDescription10 = "CMS_IMGDESCR[10]";
if (cRegistry::isBackendEditMode()) {
    $imageEditor10 = "CMS_IMGEDITOR[10]";
}

$imageSource11 = "CMS_IMG[11]";
$imageDescription11 = "CMS_IMGDESCR[11]";
if (cRegistry::isBackendEditMode()) {
    $imageEditor11 = "CMS_IMGEDITOR[11]";
}

$imageSource12 = "CMS_IMG[12]";
$imageDescription12 = "CMS_IMGDESCR[12]";
if (cRegistry::isBackendEditMode()) {
    $imageEditor12 = "CMS_IMGEDITOR[12]";
}

$imageSource13 = "CMS_IMG[13]";
$imageDescription13 = "CMS_IMGDESCR[13]";
if (cRegistry::isBackendEditMode()) {
    $imageEditor13 = "CMS_IMGEDITOR[13]";
}




    if (!empty($src)) {
        $clientConfig = cRegistry::getClientConfig(cRegistry::getClientId());
       $image = array();
       foreach($src as $imageSource){
           $filename = str_replace($clientConfig["upl"]["htmlpath"], $clientConfig["upl"]["path"], $imageSource);
           list($imageWidth, $imageHeight) = getimagesize($filename);
           $image[] = new stdClass();
           $image[]['src']->src = $imageSource;
           $image[]['alt']->alt = $imageDescription;
           $image[]['width']->width = $imageWidth;
           $image[]['height']->height = $imageHeight;
       }
    } else {
    $image = NULL;
}

if (cRegistry::isBackendEditMode()) {
    $label = mi18n("LABEL_IMAGE");
} else {
    $label = NULL;
}

$tpl = cSmartyFrontend::getInstance();
$tpl->assign('label', $label);
$tpl->assign('editor1', $imageEditor10);
$tpl->assign('image1', $image10);
$tpl->assign('editor2', $imageEditor11);
$tpl->assign('image2', $image11);
$tpl->assign('editor3', $imageEditor12);
$tpl->assign('image3', $image12);
$tpl->assign('editor4', $imageEditor13);
$tpl->assign('image4', $image13);
$tpl->display('get.tpl');
?>
und im Template:

Code: Alles auswählen

{$editor1}
{if NULL neq $image1}
    <img src="{$image1->src|escape}" alt="{$image1->alt|escape}" width="{$image1->width|escape}" height="{$image1->height|escape}" />
{/if}

{$editor2}
{if NULL neq $image2}
    <img src="{$image2->src|escape}" alt="{$image2->alt|escape}" width="{$image2->width|escape}" height="{$image2->height|escape}" />
{/if}

{$editor3}
{if NULL neq $image3}
    <img src="{$image3->src|escape}" alt="{$image3->alt|escape}" width="{$image3->width|escape}" height="{$image3->height|escape}" />
{/if}

{$editor4}
{if NULL neq $image4}
    <img src="{$image4->src|escape}" alt="{$image4->alt|escape}" width="{$image4->width|escape}" height="{$image4->height|escape}" />
{/if}
Die Bildauswahlbuttons wrden gezeigt, der Editor geöffnet, aber das ausgewählte Bild läßt sich nicht über das grüne Häckchen bestätigen, es passiert nix ;-(
Dein ohne smarty code funtioniert ...

Lieben Dank,
Horst
Webdesign | Contenido: Templateprogrammierung, Einrichtung und Verwaltung | http://www.w2media.de

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Mehrere Bildeditoren in einem Modul?

Beitrag von Faar » Do 14. Apr 2016, 21:35

Hallo Horst,
da stimmt schon was im Code nicht, denn die ersten Variablen müssen auch Arrays sein, und sie müssen mit allem übereinstimmen.

Code: Alles auswählen

     <?php
    defined('CON_FRAMEWORK') || die('Illegal call: Missing framework initialization - request aborted.');
    $imageSource[10] = "CMS_IMG[10]";
    $imageDescription[10] = "CMS_IMGDESCR[10]";
    if (cRegistry::isBackendEditMode()) {
        $imageEditor[10] = "CMS_IMGEDITOR[10]";
    }

    $imageSource[11] = "CMS_IMG[11]";
    $imageDescription[11] = "CMS_IMGDESCR[11]";
    if (cRegistry::isBackendEditMode()) {
        $imageEditor[11] = "CMS_IMGEDITOR[11]";
    }

    $imageSource[12] = "CMS_IMG[12]";
    $imageDescription[12] = "CMS_IMGDESCR[12]";
    if (cRegistry::isBackendEditMode()) {
        $imageEditor[12] = "CMS_IMGEDITOR[12]";
    }

    $imageSource[13] = "CMS_IMG[13]";
    $imageDescription[13] = "CMS_IMGDESCR[13]";
    if (cRegistry::isBackendEditMode()) {
        $imageEditor[13] = "CMS_IMGEDITOR[13]";
    }
	//$imageSource,$imageDescription und $imageEditor sind Arrays mit vorgegebenen Index



        if (!empty($src)) {
            $clientConfig = cRegistry::getClientConfig(cRegistry::getClientId());
           $image = array();
           $i = 10; // Muss mit dem ersten index der Arrays uebereinstimmen
           foreach($imageSource as $src){
               // hier wird nun jeder Wert im Array $imageSource in die Variable $src ausgelesen und weiter verarbeitet
               $filename = str_replace($clientConfig["upl"]["htmlpath"], $clientConfig["upl"]["path"], $src);
               list($imageWidth, $imageHeight) = getimagesize($filename);
               $image[$i] = new stdClass(); // $image[10] ist jetzt ein Objekt, und die weiteren auch
               $image[$i]->src = $src; // vermutlich befindet sich in der Klasse bereits eine Variable "src", so dass ['src'] und folgende nicht angehängt werden müssen
               $image[$i]->alt = $imageDescription[$i];
               $image[$i]->width = $imageWidth;
               $image[$i]->height = $imageHeight;
			   $i++; // hochzaehlen
           }
        } else {
        $image = NULL;
    }

    if (cRegistry::isBackendEditMode()) {
        $label = mi18n("LABEL_IMAGE");
    } else {
        $label = NULL;
    }
// hier könnte zum Test mal ein print_r stehen, später wieder auskommentieren
echo "<pre>";
print_r($image);
echo "</pre>";

    $tpl = cSmartyFrontend::getInstance();
    $tpl->assign('label', $label);
    $tpl->assign('editor1', $imageEditor[10]);
    $tpl->assign('image1', $image[10]);
    $tpl->assign('editor2', $imageEditor[11]);
    $tpl->assign('image2', $image[11]);
    $tpl->assign('editor3', $imageEditor[12]);
    $tpl->assign('image3', $image[12]);
    $tpl->assign('editor4', $imageEditor[13]);
    $tpl->assign('image4', $image[13]);
    $tpl->display('get.tpl');
    ?>
Leider alles ungetestet und nur so dahin geschrieben.
Das Smarty könnte so funktionieren.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

Horst1234
Beiträge: 366
Registriert: Sa 25. Okt 2008, 12:45
Wohnort: Bremen
Kontaktdaten:

Re: Mehrere Bildeditoren in einem Modul?

Beitrag von Horst1234 » Fr 15. Apr 2016, 07:54

Hallo Faar,
ich hab das so übertragen, aber leider wird das Bild nach der Auswahlbestätigung im Editor immer noch nicht angezreigt.
Gruß,
Horst
Webdesign | Contenido: Templateprogrammierung, Einrichtung und Verwaltung | http://www.w2media.de

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Mehrere Bildeditoren in einem Modul?

Beitrag von Faar » Fr 15. Apr 2016, 17:42

Was gibt print_r auf dem Monitor aus?
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Re: Mehrere Bildeditoren in einem Modul?

Beitrag von rethus » Sa 16. Apr 2016, 09:05

Hi,

also das ist deine Ausgangslage?:

Code: Alles auswählen

$imageSource = "CMS_IMG[1]";
$imageDescription = "CMS_IMGDESCR[1]";
if (cRegistry::isBackendEditMode()) {$imageEditor = "CMS_IMGEDITOR[1]";}

if (0 < strlen($imageSource)) {
    $clientConfig = cRegistry::getClientConfig(cRegistry::getClientId());
    $filename = str_replace($clientConfig["upl"]["htmlpath"], $clientConfig["upl"]["path"], $imageSource);
    list($imageWidth, $imageHeight) = getimagesize($filename);
    $image = new stdClass();
    $image->src = $imageSource;
    $image->alt = $imageDescription;
    $image->width = $imageWidth;
    $image->height = $imageHeight;
} else {
    $image = NULL;
}

Hier wird CMS_IMG[1] als Pfad, und die Bildbeschreibung via CMS_IMGDESCR[1] erfasst.
Möchtest du mehrere Bilder haben, brauchst du mehrere davon:

Code: Alles auswählen

$imgArr = array();
$imgResult = array();
for($i=1; $i<$imgNum;$i++){
   $imgArr['imageSource'] = "CMS_IMG[$i]";
   $imgArr['imageDescription'] = "CMS_IMGDESCR[$i]";
   if (cRegistry::isBackendEditMode()) {
      $imgArr['imageEditor'] = "CMS_IMGEDITOR[$i]";
   }
   if(is_array($imgArr)) array_push($imgResult,$imgArr);
}
 
Nun soll das image-Objekt für Smarty gepackt werden:

Code: Alles auswählen

// Außerhalb der foreach-Schleife wegen Performance
$clientConfig = cRegistry::getClientConfig(cRegistry::getClientId());
$imgObjArr = array();
foreach($imgResult as $key => $val){
if (0 < strlen($imageSource)) {
    $filename = str_replace($clientConfig["upl"]["htmlpath"], $clientConfig["upl"]["path"], $imageSource);
    list($imageWidth, $imageHeight) = getimagesize($filename);
    $image = new stdClass();
    $image->src = $imageSource;
    $image->alt = $imageDescription;
    $image->width = $imageWidth;
    $image->height = $imageHeight;
} else {
    $image = NULL;
}
if($image!=NULL){
   array_push($imgObjArr,$image);
}
}
 
.... Weiter unten übergibst du das Array mit den Objekten an Smarty:

Code: Alles auswählen

$tpl = cSmartyFrontend::getInstance();
    $tpl->assign('label', $label);
    $tpl->assign('imgTags', $imgObjArr);
    $tpl->assign('isBackendEditMode', (int) cRegistry::isBackendEditMode());
    $tpl->display($tpl_file);
 
In Smarty musst du es dann halt entsprechend auspacken:

Code: Alles auswählen

{foreach from=$imgTags item=img}
<img src="{$img->src}"  alt="{$img->alt}" width="{$img->width}" height="{$img->height}">
 
Ein "sauber" programmiertes Beispiel dafür findest du auch in meinem Modul xst_dynamic_content.

Damit erzeugst du einen Array, der wiederrum die Image-Objekte beinhaltet.

PS: Der Code ist ungetestet... einfach so aus dem Kopf zusammengeschrieben. Sollten Flüchtigkeitsfehler drin sein, musst du die halt beheben...
aber ich denke das Prinzip wird deutlich.
Jetzt geh ich erstmal Frühstücken ☕
Could I help you... you can help me... buy me a coffee . (vielen ❤ Dank an: Seelauer, Peanut, fauxxami )

xstable.com: - HighSpeed Hosting, Domains, DomainReselling, Linux-Administration
suther.de: - App-Programierung, High-Performance-Webpages, MicroServices, API-Anbindungen & Erstellung

Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType

Horst1234
Beiträge: 366
Registriert: Sa 25. Okt 2008, 12:45
Wohnort: Bremen
Kontaktdaten:

Re: Mehrere Bildeditoren in einem Modul?

Beitrag von Horst1234 » Sa 16. Apr 2016, 09:22

hallo faar,
im Backend im Editormodus sehe ich vier Image-Editor-Buttons, im Frontend sehe ich gar nichts, im Quellcode steht dort nur <pre></pre>...

hallo rethus,
das werd ich probieren und melde mich

danke euch beiden,
schönes wochenende,
horst
Webdesign | Contenido: Templateprogrammierung, Einrichtung und Verwaltung | http://www.w2media.de

Antworten