Seite 1 von 1

Mehrere Bildeditoren in einem Modul?

Verfasst: Sa 9. Apr 2016, 08:59
von Horst1234
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

Re: Mehrere Bildeditoren in einem Modul?

Verfasst: Sa 9. Apr 2016, 11:53
von Faar
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.

Re: Mehrere Bildeditoren in einem Modul?

Verfasst: Sa 9. Apr 2016, 19:08
von homtata
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

Re: Mehrere Bildeditoren in einem Modul?

Verfasst: Mo 11. Apr 2016, 09:57
von McHubi
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

Re: Mehrere Bildeditoren in einem Modul?

Verfasst: Do 14. Apr 2016, 18:50
von Horst1234
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

Re: Mehrere Bildeditoren in einem Modul?

Verfasst: Do 14. Apr 2016, 21:35
von Faar
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.

Re: Mehrere Bildeditoren in einem Modul?

Verfasst: Fr 15. Apr 2016, 07:54
von Horst1234
Hallo Faar,
ich hab das so übertragen, aber leider wird das Bild nach der Auswahlbestätigung im Editor immer noch nicht angezreigt.
Gruß,
Horst

Re: Mehrere Bildeditoren in einem Modul?

Verfasst: Fr 15. Apr 2016, 17:42
von Faar
Was gibt print_r auf dem Monitor aus?

Re: Mehrere Bildeditoren in einem Modul?

Verfasst: Sa 16. Apr 2016, 09:05
von rethus
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 ☕

Re: Mehrere Bildeditoren in einem Modul?

Verfasst: Sa 16. Apr 2016, 09:22
von Horst1234
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