Modul "content_image" mehrfach einsetzen

Alles rund um Module und Plugins in CONTENIDO 4.9.
Antworten
thilo
Beiträge: 73
Registriert: Mo 22. Mär 2004, 13:41
Kontaktdaten:

Modul "content_image" mehrfach einsetzen

Beitrag 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
Oldperl
Beiträge: 4316
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Modul "content_image" mehrfach einsetzen

Beitrag 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
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
thilo
Beiträge: 73
Registriert: Mo 22. Mär 2004, 13:41
Kontaktdaten:

Re: Modul "content_image" mehrfach einsetzen

Beitrag 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
McHubi
Beiträge: 1223
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Modul "content_image" mehrfach einsetzen

Beitrag 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.
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)
Oldperl
Beiträge: 4316
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Modul "content_image" mehrfach einsetzen

Beitrag 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) 127-mal heruntergeladen
Gruß aus Franken

Ortwin
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
thilo
Beiträge: 73
Registriert: Mo 22. Mär 2004, 13:41
Kontaktdaten:

Re: Modul "content_image" mehrfach einsetzen

Beitrag 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
McHubi
Beiträge: 1223
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Modul "content_image" mehrfach einsetzen

Beitrag 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.
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)
thilo
Beiträge: 73
Registriert: Mo 22. Mär 2004, 13:41
Kontaktdaten:

Re: Modul "content_image" mehrfach einsetzen

Beitrag 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
rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Re: Modul "content_image" mehrfach einsetzen

Beitrag 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])
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
Antworten