Seite 1 von 1

Modul "content_image" mehrfach einsetzen

Verfasst: Di 3. Mär 2015, 10:18
von thilo
Hallo zusammen,

ich versuche mich gerade zum ersten Mal an einer Webseite unter Contenido 4.9.6
Jetzt bin ich auf ein Problem gestossen: ich muss verschiedene Bilder dynamisch in die Webseite einbinden. Hierzu verwende ich das Modul "content_image".
Wie kann ich das Modul mehrfach auf einer Seite einbinden - also ich muss 3 unterschiedliche Bilder einbinden. Wenn ich das Modul 3x verwende, kann ich das erste Bild editieren und Bild 2 und 3 sind nicht editierbar - zeigen aber das selbe Bild.

Ach und bei der Gelegenheit sehe ich gerade noch ein weiteres Problem:
wenn ich in meinem TinyMCE einen Code einfüge, dann werden Teile des Codes beim Speichern wieder gelöscht.
Die entsprechenden Mandanteneinstellungen sind alle vorhanden: (tinymce | extended_valid_elements | *[*] und co.)
Sämtliche <a>-Tags werden beim Speichern ersatzlos gestrichen. Was mache ich falsch?
Hier ein Auszug des Codes den ich einfüge:

<div id="spalte_links">
<a href="#" class="icon">
<div id="icon_media">
HEADLINE
</div>
</a>
<p class="teasertext">
TEXT
</p>
.......
.......
</div>

Vielen Dank für eure Hilfe!
Gruß
Thilo

Re: Modul "content_image" mehrfach einsetzen

Verfasst: Di 3. Mär 2015, 10:35
von Oldperl
Hallo Thilo,

das Modul ist so wie es ist nicht mehrfach auf einer Seite einsetzbar (außer du willst das gleiche Bild mehrfach anzeigen). Du musst das Modul kopieren, und umbenennen, und im Output bei allen Vorkommen von CMS_xxx[1] die Zahl ändern. Diese Zahl ist die Nummerierung des Content-Types und vergibt für diesen in der Datenbank die Zugehörigkeit. Da du beim "einfachen" Mehrfacheinsetzen des Moduls in der Vorlage immer auf den gleichen Content-Type (Nr 1) zugreifst, kommt es zu dem von dir beschriebenen Verhalten.

Gruß aus Franken

Ortwin

Re: Modul "content_image" mehrfach einsetzen

Verfasst: Di 3. Mär 2015, 10:38
von thilo
Hallo Ortwin,

vielen Dank für den Tipp - das hatte ich bereits versucht. Kuck mal - es sollte doch nur diese 3 Werte im Modul betreffen?!?

// get image source from content type IMG with index 1
$imageSource = "CMS_IMG[2]";
// get description as content type IMGDESCR with index 1
$imageDescription = "CMS_IMGDESCR[2]";

// get editor as content type IMGEDITOR with index 1
// skip IMGEDITOR in frontend cause it displays the image too!
if (cRegistry::isBackendEditMode()) {
$imageEditor = "CMS_IMGEDITOR[2]";
}

Leider bricht der Quellcode mit dieser Änderung exakt an dieser Stelle ab wenn ich den Code dann im Firebug anzeigen lasse. Im Backend wird das Modul gar nicht mehr angezeigt.

Gruß zurück aus Franken ;-)
Thilo

Re: Modul "content_image" mehrfach einsetzen

Verfasst: Di 3. Mär 2015, 12:56
von McHubi
Hallo Thilo,

Du kannst auch folgendes machen (funktioniert beim Text-Modul wunderbar):

Trag im input des Moduls content_image ein:

Code: Alles auswählen

echo 'CMS_HTML[?]: <input size="1" type="int" name="CMS_VAR[100]" value="CMS_VALUE[100]"> (1-5)';
Und tausche den Output des Moduls komplett durch:

Code: Alles auswählen

<?php

/**
 * description: standard image
 *
 * @package Module
 * @subpackage ContentImage
 * @version SVN Revision $Rev:$
 *
 * @author marcus.gnass@4fb.de
 * @copyright four for business AG <www.4fb.de>
 * @license http://www.contenido.org/license/LIZENZ.txt
 * @link http://www.4fb.de
 * @link http://www.contenido.org
 */

// assert framework initialization
defined('CON_FRAMEWORK') || die('Illegal call: Missing framework initialization - request aborted.');

$number="CMS_VALUE[100]";
if($number==1 OR $number=="")
{
// get image source from content type IMG with index 1
$imageSource = "CMS_IMG[1]";
// get description as content type IMGDESCR with index 1
$imageDescription = "CMS_IMGDESCR[1]";

// get editor as content type IMGEDITOR with index 1
// skip IMGEDITOR in frontend cause it displays the image too!
if (cRegistry::isBackendEditMode()) {
    $imageEditor = "CMS_IMGEDITOR[1]";
}
}
if($number==2)
{
$imageSource = "CMS_IMG[2]";
$imageDescription = "CMS_IMGDESCR[2]";
if (cRegistry::isBackendEditMode()) $imageEditor = "CMS_IMGEDITOR[2]";
}
if($number==3)
{
$imageSource = "CMS_IMG[3]";
$imageDescription = "CMS_IMGDESCR[3]";
if (cRegistry::isBackendEditMode()) $imageEditor = "CMS_IMGEDITOR[3]";
}
if($number==4)
{
$imageSource = "CMS_IMG[4]";
$imageDescription = "CMS_IMGDESCR[4]";
if (cRegistry::isBackendEditMode()) $imageEditor = "CMS_IMGEDITOR[4]";
}
if($number==5)
{
$imageSource = "CMS_IMG[5]";
$imageDescription = "CMS_IMGDESCR[5]";
if (cRegistry::isBackendEditMode()) $imageEditor = "CMS_IMGEDITOR[5]";
}

// build class containing all data necessary to display image
// therefor the image dimensions have to be determined
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;
}

// When in backend edit mode add a label so the author
// knows what to type in the shown field.
if (cRegistry::isBackendEditMode()) {
    $label = mi18n("LABEL_IMAGE").' '.$number;
} else {
    $label = NULL;
}

// use smarty template to output header text
$tpl = cSmartyFrontend::getInstance();
$tpl->assign('label', $label);
$tpl->assign('editor', $imageEditor);
$tpl->assign('image', $image);
$tpl->display('get.tpl');

?>
Jetzt kannst Du das gleiche Modul bis zu 5 Mal einbinden und musst in der Konfiguration des Artikels lediglich eine Nummer vergeben.

Re: Modul "content_image" mehrfach einsetzen

Verfasst: Di 3. Mär 2015, 13:13
von Oldperl
Hallo Thilo,

es geht, ich habe in einer 4.9.4 folgende Schritte durchgeführt.
  • Kopieren des Moduls (cms/data/modules/)content_image unter dem Namen content_image2 in das selbe Verzeichnis
  • Umbenennen aller relevanten Bezeichner
    • Dateiname von In- und Output
    • Einträge in der info.xml
  • Ändern der Zählerzahl im Moduloutput (kann man direkt in der Datei oder nach dem Sync im Backend machen).
  • Sync der Module ("Module synchronisieren")
  • Einbinden des "neuen" Moduls in einem Template in dem bereits das Standard-Modul enthalten ist
  • Testen und fertig (ging problemlos)
Achtung :!:
Durch das Caching in der 4.9er Version kann es passieren, dass man noch Fragmente vor Änderungen am Modul-Code im Cache hat. Dann wirken sich Änderungen nicht direkt im Frontend aus. Daher sollte man das Caching soweit es geht während der Entwicklung abschalten, bzw. den Cache nach jeder Änderung leeren. Bei Modulen hilft in weiten Bereichen das Einschalten der $force-Variablen in der Frontend-conf (cms/data/config/production/config.php).

Edit: Ich hab mal das Modul als zip_Archiv angehängt :)
content_image2.zip
(6.8 KiB) 126-mal heruntergeladen
Gruß aus Franken

Ortwin

Re: Modul "content_image" mehrfach einsetzen

Verfasst: Di 3. Mär 2015, 13:27
von thilo
Danke für eure Antworten...
So hats funktioniert. Und beim ausprobieren eurer Lösungen bin ich auch auf meinen eignene Fehler gestoßen:

Beim Kopieren des Modules content_image habe ich nicht begriffen, dass es unter dem Reiter "HTML" jetzt ein Template gibt, das ebenfalls mitkopiert werden muss. Das war bis zur Version 4.8 nicht so - da waren die HTML-Templates übergeordnet und nicht im Modul enthalten....

Muss einem ja gesagt werden....

Habt ihr evtl. noch eine Idee zu meinem anderen Problem mit dem entfernten <a>-Tag im TinyMCE?

Ich danke euch ganz herzlich für eure Hilfe !!!
Viele Grüße
Thilo

Re: Modul "content_image" mehrfach einsetzen

Verfasst: Di 3. Mär 2015, 13:46
von McHubi
Habt ihr evtl. noch eine Idee zu meinem anderen Problem mit dem entfernten <a>-Tag im TinyMCE?
Lass mal das Umschließen des <div> mit dem <a>...

Code: Alles auswählen

<div id="spalte_links">
<a href="#" class="icon">
HEADLINE
</a>
<p class="teasertext">
TEXT
</p>
</div>
funktioniert. Vergib dem <a> doch direkt die ID des <div> und deklarier es als Blockelement.

Re: Modul "content_image" mehrfach einsetzen

Verfasst: Di 3. Mär 2015, 14:41
von thilo
Super - so hauts hin.... danke für den Tipp. Ich werd noch ganz Gaga mit dem neuen Contenido.... zu viel neues für so nen Gelegenheitsprogrammierer wie mich....

Warum löscht der TinyMCE die Tags raus, wenn ich das <div> mit einem Link umschließe?

Herzlichen Dank für die Hilfe !! Ihr habt mir den Tag gerettet !!!
Thilo

Re: Modul "content_image" mehrfach einsetzen

Verfasst: Mo 30. Mär 2015, 13:45
von rethus
Oder du machst es dir auch für die Zukunft einfach und nimmst mein Dynamic-Contenttype-Modul. http://forum.contenido.org/viewtopic.ph ... hilit=+xst_

Das kannst du beliebig oft zuweisen, weil du in der Template-Config angibst, wie dessen ID's lauten, die sonst im ContentType waren( z.B. CMS_HTML[1....99999])