Werte aus einem Array "extrahieren" und zusammen einer Smarty-Variable zuweisen

Diskussionen zur Smarty-Template-Engine
Post Reply
kris29
Forum Members
Forum Members
Posts: 53
Joined: Wed Dec 10, 2008 10:56 pm

Werte aus einem Array "extrahieren" und zusammen einer Smarty-Variable zuweisen

Post 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?
Last edited by kris29 on Thu Jun 04, 2009 6:20 pm, edited 1 time in total.
NaN

Mehrere Werte aus Array/Objekt in einer Variable als String

Post 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.
Last edited by NaN on Thu Jun 04, 2009 2:39 pm, edited 1 time in total.
kris29
Forum Members
Forum Members
Posts: 53
Joined: Wed Dec 10, 2008 10:56 pm

Re: Werte aus einem Array "extrahieren" und zusammen einer Smarty-Variable zuweisen

Post 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.
NaN

Re: Werte aus einem Array "extrahieren" und zusammen einer Smarty-Variable zuweisen

Post by NaN »

Versuchs mal ohne Anführungszeichen.
Könnte auch ein Fehler im modifizierten Inhaltstypen sein.
Schau ich noch mal nach.
kris29
Forum Members
Forum Members
Posts: 53
Joined: Wed Dec 10, 2008 10:56 pm

Re: Werte aus einem Array "extrahieren" und zusammen einer Smarty-Variable zuweisen

Post by kris29 »

Ohne Anführungszeichen geht es auch nicht. Da wird gar nichts im Dropdown angezeigt.
NaN

Re: Werte aus einem Array "extrahieren" und zusammen einer Smarty-Variable zuweisen

Post 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

Code: Select all

{$items}
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.
cyberman

Re: Werte aus einem Array "extrahieren" und zusammen einer Smarty-Variable zuweisen

Post 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.
NaN

Re: Werte aus einem Array "extrahieren" und zusammen einer Smarty-Variable zuweisen

Post 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)
Last edited by NaN on Fri Jun 12, 2009 11:08 pm, edited 1 time in total.
cyberman

Re: Werte aus einem Array "extrahieren" und zusammen einer Smarty-Variable zuweisen

Post by cyberman »

OK, wenn es um den Contenttype gehen sollte, nehme ich alles zurück und behaupte das Gegenteil :).
Post Reply

Return to “Smarty-Tipps und -Tricks”