Ich hatte das Problem, dass ich an einen Artikel mehrere Links anfügen wollte... e.g. CMS_LINK[1] ... CMS_LINK[n]. Also so eine art Linkliste.
Nun funktioniert das ja aufgrund des Cores (im wesentlichen der conGenerateCode funktion) nicht, CMS_LINK[$id] zu schreiben oder Schleifen zu benutzen. Die Funktion geht ja davon aus, dass der jeweilige Tag direkt mit id im Code steht. Aber das sollte ja eh den meisten bekannt sein...
Jedenfalls habe ich mich heute mal hingesetzt und eine Erweiterung geschrieben die dies ermöglicht.
Sie basiert auf einer Klasse "class.multitype.php", die im "includes" Ordner vom Frontend abgelegt werden kann. Das jeweilige Modul das die CMS Variable benutzt muss dann die Klasse verwenden.
Die Klasse kann hier heruntergeladen werden:
http://www.krellmedia.com/upload/conten ... titype.zip
Sie ist eigentlich schon recht gut Kommentiert. Einige Codezeilen hab ich aus vorhandenen Klassen und Funktionen kopiert - das steht dann aber auch dabei!
Die Einbindung im Modul demonstriere ich hier mal anhand einer Linkliste:
(Input Code existiert hier nicht)
Modul Linkliste, Output:
Code: Alles auswählen
<?php
cInclude("frontend", "includes/class.multitype.php");
$cms_multitype = new CmsMultitype($idart, $lang, $idartlang);
$content = $cms_multitype->getContent("link");
if ($contenido && ($view == "edit")) {
/* list editors for exisiting links */
echo '<div id="linklist">';
foreach ($content as $typeid => $val) {
echo "Link $typeid: ".$cms_multitype->getEditor('link', $typeid)."<br>";
}
/* output new link edit item */
echo "Neuer Link: ".$cms_multitype->getEditor('link')."<br>";
echo '</div>';
} else { /* output parsed content */
$tpl = new Template;
$tpl->set('s', 'HEADLINE', mi18n('Linkliste'));
if ($content) {
foreach ($content as $typeid => $val) {
$tpl->set('d', 'HREF', $val);
$tpl->set('d', 'DESCRIPTION', $cms_multitype->getContent('linkdescr', $typeid));
$title = $cms_multitype->getContent('linktitle', $typeid);
if (empty($title)) $title = basename($val);
$tpl->set('d', 'TITLE', $title);
$target = $cms_multitype->getContent('linktarget', $typeid);
if (!empty($target)) $target = 'target="'.$target.'"';
$tpl->set('d', 'TARGET', $target);
$tpl->next();
}
}
$tpl->generate("templates/linkliste.html");
}
?>
Code: Alles auswählen
<div id="linklist" class="onsitebox float-right">
<table class="h" cellspacing="0" cellpadding="0">
<tr><td class="l"><img src="/images/space.gif" width="4px" height="1px"></td>
<td><div class="headline"><h1>{HEADLINE}</h1></div></td>
<td class="r"><img src="/images/space.gif" width="4px" height="1px"></td></tr></table>
<table class="b" cellspacing="0" cellpadding="0"><tr><td class="l"><img src="/images/space.gif" width="2px" height="1px"></td><td><div>
<!-- BEGIN:BLOCK -->
<p><a href="{HREF}" title="{TITLE}" {TARGET}>{TITLE}</a>
{DESCRIPTION}</p>
<!-- END:BLOCK -->
</div></td><td class="r"><img src="/images/space.gif" width="2px" height="1px"></td></tr></table>
<table class="f" cellspacing="0" cellpadding="0"><tr><td class="l"><img src="/images/space.gif" width="5px" height="1px"></td><td><img src="/images/space.gif" width="1px" height="5px"></td><td class="r"><img src="/images/space.gif" width="5px" height="1px"></td></tr></table>
</div>
Ich habe es mit CMS_LINK getestet, es müsste aber auch mit allen anderen CMS Variablen klappen (ich sehe jedenfalls keinen Grund, warum es nicht gehen sollte)
Was leider noch nicht eingebaut ist, ist das eine Leere CMS Variable aus dem Array wieder entfernt wird. Das wird aber in den nächsten Tagen noch kommen, weil ich das eh brauche...
Vielleicht findet das ja jemand toll... Ich würde mich auf jeden Fall über Feedback und konstruktive Kritik freuen, es gibt sicher noch ein paar Sachen zu verbessern.
Greets
Martin.