Page 1 of 1
Werte aus einem Array "extrahieren" und zusammen einer Smarty-Variable zuweisen
Posted: Wed Jun 03, 2009 11:38 am
by kris29
Hallo.
Mittes CTLModuleMaker habe ich ein Modul erstellt und möchte dem CMS-Benutzer nun ein Dropdown im Admin zur Auswahl der Einträge bereitstellen.
Dazu frage ich im Template die Namen der Einträge ab:
Code: Select all
{foreach from=$itemlist item="item"}{if $item->is_selected}class="active"{/if}{$item->name},{/foreach}
Ich erhalte die Werte:
Banner1,Banner2,Banner3 ... usw.
Damit im Dropdown genau diese Werte zur Auswahl stehen, muß ich sie als items in folgenden Code im gleichen Template einbinden, woran ich aber mangels Smarty-Wissen scheitere.
Weiß jemand weiter?
Mehrere Werte aus Array/Objekt in einer Variable als String
Posted: Wed Jun 03, 2009 1:45 pm
by NaN
Nur der Vollständigkeit zuliebe:
Hier ist die Rede von einem modifizierten Inhaltstypen "Content2".
Nachzulesen unter folgendem Link:
http://forum.cmsmadesimple.org/index.ph ... 504.0.html
Dazu lässt sich der smarty Modifikator "cat" (
siehe Beispiel von nhaack) wunderbar einsetzen.
D.h.:
- Die foreach-Schleife durchlaufen und die Werte einer neuen Variablen zuweisen;
Dabei die neue Variable aber nicht einfach überschreiben, sondern ihr ein Komma und den Wert der Variablen aus der
foreach-Schleife zuweisen;
- danach die neue Variable als Wert für den Parameter "items" im Content-Tag verwenden
- den content block nicht in Kommentarzeilen schreiben, sondern mit dem Parameter "assign" ebenfalls einer Variablen zuweisen;
somit kannst Du später noch auf den Namen des ausgewählten Dropdown-Wertes zugreifen
Code: Select all
{foreach from=$itemlist item="item"}
{if !isset($items) || $items==''}
{* wenn die variable $items nicht existiert oder leer ist, wird ihr einfach der Wert des aktuellen Elements zugewiesen *}
{assign var="items" value=$item->name}
{else}
{* wenn die variable $items schon existiert, wird ihr einfach ihr bisheriger Wert plus Komma plus der Wert des aktuellen Elements zugewiesen *}
{assign var="items" value=$items|cat:","|cat:$item->name}
{/if}
{/foreach}
{content block="banner" type="dropdown" items="$items" label="Select banner" assign="banner"}
Vielleicht sollte man den Titel des Themas ändern.
Denn im Prinzip geht es ja nicht um den {content}-Tag, sondern darum, wie man via Smarty mehrere Werte aus einem Array/Objekt "extrahieren" und zusammen einer Smarty-Variable vom Typ String zuweisen kann.
Re: Werte aus einem Array "extrahieren" und zusammen einer Smarty-Variable zuweisen
Posted: Thu Jun 04, 2009 6:27 pm
by kris29
Danke NaN!
Leider zeigt es im Dropdown noch nicht die Werte an, sondern nur "$items". Liegt es etwa an einem Fehler in der Schreibweise?
PS: Habe den Titel des Themas korrigiert.
Re: Werte aus einem Array "extrahieren" und zusammen einer Smarty-Variable zuweisen
Posted: Fri Jun 05, 2009 8:43 am
by NaN
Versuchs mal ohne Anführungszeichen.
Könnte auch ein Fehler im modifizierten Inhaltstypen sein.
Schau ich noch mal nach.
Re: Werte aus einem Array "extrahieren" und zusammen einer Smarty-Variable zuweisen
Posted: Fri Jun 05, 2009 2:17 pm
by kris29
Ohne Anführungszeichen geht es auch nicht. Da wird gar nichts im Dropdown angezeigt.
Re: Werte aus einem Array "extrahieren" und zusammen einer Smarty-Variable zuweisen
Posted: Fri Jun 05, 2009 2:49 pm
by NaN
Gott, bin ich blöde!
Das kann so leider nicht funktionieren, da Dein Modul, das die Variable $itemlist und somit die Werte für den Parameter items bereitstellt, im Backend nicht ausgeführt wird.
Der Inhaltstyp sucht nur nach dem tag {content ...} und zeigt dementsprechend nur an, was dort direkt ins template geschrieben steht.
Smarty und Templatevariablen interessieren dort nicht, weil das Template ja erst im Frontend verarbeitet wird.
Denn wenn Du einfach mal nur
ins Template unter die foreach Schleife schreibst, dann wirst Du sehen, dass die einzelnen Elemente doch in einem String zusammengefügt worden sind.
Aber wie gesagt, leider nur im Frontend.
Für Deine Idee müsste man sich etwas anderes einfallen lassen.
Re: Werte aus einem Array "extrahieren" und zusammen einer Smarty-Variable zuweisen
Posted: Fri Jun 12, 2009 10:39 pm
by cyberman
Ich hatte noch keine Gelegenheit, CTL zu testen, bietet CTL keine Option für Dropdowns an? Normalerweise sollten Dropdowns im Backend über die API erzeugt werden können.
http://www.cmsmadesimple.org/apidoc/CMS ... utDropdown
Du musst dann im Template nur noch die Variable einfügen und es wird automatisch ein Dropdown ausgegeben.
Re: Werte aus einem Array "extrahieren" und zusammen einer Smarty-Variable zuweisen
Posted: Fri Jun 12, 2009 11:06 pm
by NaN
Ich glaube es geht hier darum, dass kris29 dieses DropDown im Backend beim Bearbeiten der Seiteninhalte bereits im Contenttype haben will.
Und da lässt sich leider kein dynamisches DropDown erzeugen.
Man muss die Werte für das DropDown direkt ins Template schreiben.
So jedenfalls, wenn man den Inhaltstyp Content2 verwenden will.
Es ist derzeit leider nicht möglich bestimmte Modulfunktionen in den Inhaltstypen zu integrieren.
(Es sei denn die Module liefern ihren eigenen Inhaltstypen mit)
Calguy hat da zwar schon was vorbereitet (wenn man sich den Quellcode anschaut sieht man z.B., dass es mal einen Inhaltsblock vom Typ Modul geben soll, der Code ist allerdings noch als Kommentar deaktiviert - und funktioniert außerdem noch nicht) aber so weit ich sehen konnte wird diese Funktion auch in der CMS Version 1.6 noch nicht enthalten sein.
Natürlich könnte man das DropDown auch selber in den PHP-Quellcode des Contenttypes mit Hilfe der API einfügen.
Aber mit dem Content2 Dingens wollte ich ja genau das umgehen, dass man jedesmal den Quellcode modifizieren muss.
Die neuen Felder im Backend sollen einfach mit Hilfe von Parametern erstellt werden können.
So "Smarty-Like".
Außerdem haben Templatevariablen, Module o. Plugins im Template (mit Ausnahme des Content-Tags) keinerlei Auswirkungen auf das Backend, da das Template ja erst im Frontend vollständgig gerendert wird.
(Und die Templatevariablen, Module o. Plugins sind ja eigentlich auch nur fürs Frontend gedacht)
Re: Werte aus einem Array "extrahieren" und zusammen einer Smarty-Variable zuweisen
Posted: Fri Jun 12, 2009 11:09 pm
by cyberman
OK, wenn es um den Contenttype gehen sollte, nehme ich alles zurück und behaupte das Gegenteil

.