Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.
Seiten: 1
#1 22. Januar 2024 14:32
- rage_all
- kennt CMS/ms
- Ort: Augsburg
- Registriert: 09. März 2011
- Beiträge: 288
LISE stoppt Export nach einem {foreach}
Hallo zusammen,
ich bin sicher, es gibt dafür eine schlüssige Erklärung … aber ich hab mal wieder einen Helm auf.
Folgendermaßen:
Hier ist eine Speisekarte im LISE hinterlegt; die Allergene (bzw. alle Zutaten) zu den Speisen werden aus einer weiteren LISE-Instanz (Zutaten) geholt. Das Ganze funktioniert tadellos - im Frontend der Website etwa kann angesehen werden, welche Zutaten bei dieser Speise drin sind und ggf. welche Allergene dazu. Da hab ich auch noch diverse JavaScript-Filter, z.B. für vegetarische Speisen, etc., - läuft alles, toll, super, mega, Klasse.
Aaaaaber:
Ich hab noch ein Template zum Export der Daten, für einen Ausdruck der Speisekarte - und hier würde ich mir wünschen, dass die Allergene (und nur allein die Allergene) direkt hinter dem Namen der Speise ausgegeben werden.
Der gesamte Aufruf ist:
1. Eine Inhaltsseite mit dem Inhalt
[== HTML ==]
{LISESpeisekarte action=category template_category=_indd_export_cat_delivery}
2. Genanntes Speisekarten-Template (ja, nach Kategorien gruppiert - und hier die Lieferkarte):
[== Smarty ==]
{foreach from=$categories item=category}{LISESpeisekarte category=$category->alias template_summary='_export_indd_lieferkarte'}{/foreach}
3. In diesem Beispiel das Template der Lieferkarte
[== Smarty ==]
{foreach from=$items item=item}
{if $item->fielddefs.delivery1.value!=''}
{if $deliveryprice1}
{$deliveryprice1=$deliveryprice1+$item->fielddefs.delivery1.value}
{else}
{assign deliveryprice1 $item->fielddefs.delivery1.value}
{/if}
{/if}
{/foreach}
{if $deliveryprice1 > ''}
<p><b>{$category->name}</b></p>
{if !empty($category->description)}<p>{eval var=$category->description}</p>{/if}
{strip}
{if $items|@count > 0}
{foreach from=$items item=item}
{if $item->fielddefs.delivery1!=''}<pre>
{if $item->fielddefs.nummer!=''}{$item->fielddefs.nummer.value}{/if}	
{$item->title}	
{if $item->fielddefs.delivery1!=''}{$item->fielddefs.delivery1.value} €	{/if}
{if $item->fielddefs.delivery2!=''}{$item->fielddefs.delivery2.value} €	{/if}
{if $item->fielddefs.delivery3!=''}{$item->fielddefs.delivery3.value} €	{/if}
{if $item->fielddefs.delivery4!=''}{$item->fielddefs.delivery4.value} €	{/if}
{if $item->fielddefs.beschreibung!=''}{$item->fielddefs.beschreibung.value}<br>{/if}
{if $item->fielddefs.zutaten!=''}{assign var="zutaten" value=","|explode:$item->fielddefs.zutaten.value}
{foreach from=$zutaten item=zutat}
{if $zutat@first}<sup>{/if}
{LISEZutaten action=detail template_detail=allergene_export item=$zutat}
{$allergyvalue}
{if !$allergyvalue==false && !$zutat@last}, {/if}
{if $zutat@last}</sup>{/if} {assign var="zutaten" value=''}
{/foreach}
{/if}
</pre>
{/if}{* if price exists *}
{/foreach}
{/if}{* eof if count *}<hr>
{/if}{* if deliveryprice > 0 *}{/strip}
4. Als Zulieferer der Allergene das Template aus der Zutaten-Instanz:
[== Smarty ==]
{strip}{if $item->fielddefs.allergene.value!=''}{assign allergyvalue value=$item->fielddefs.allergene.value scope=global}{else}{assign allergyvalue value=false scope=global}{/if}{/strip}
~~~ ~~~ ~~~ ~~~
Nun hab ich festgestellt, dass wenn der {foreach}-Teil für die Allergene (Teil 3) ganz am Ende hängt (was ein wenig doof ist), alle Daten ausgegeben werden. Wenn ich aber den Block weiter nach oben verschiebe, bis hin zum {$item->title} oder auch nach den Preisen, alle weiteren Teile des Templates nicht ausgeführt werden, bzw. die Daten nicht ausgegeben werden - aber auch keinen Fehler erzeugen.
Und damit bin ich ratlos, wo ich den Fehler suchen soll.
Entweder ich hab in der {foreach} einen Fehler und sehe es nicht - oder bei den Zutaten geht was faul … ich komm einfach nicht drauf.
Daher meine Frage an die hier, die solchen Code tagtäglich schreiben: Seht Ihr auf Anhieb, wo der Fehler steckt?
Sicher lässt sich die ganze Kiste noch optimieren; ich bin nahezu überzeugt, dass ich's total umständlich geschrieben hab, aber das ist okay … dass ich alle Daten bekommen kann, das wäre toll.
Nur für den Fall: Ja, die Zutaten sind in der Reihenfolge in der Felddefinition nach Titel und nach Beschreibung, aber vor den einzelnen Preisen. Wäre es also die Reihenfolge, dürfte z.B. die Beschreibung gerade gar nicht rauskommen, nach den Preisen - tut sie aber (ich hatte mal sowas, dass ich die Variablen hätte anders abholen müssen oder in einer anderen Reihenfolge legen).
Vielen Dank!
Offline
#2 25. Januar 2024 21:16
- nockenfell
- Moderator
- Ort: Lenzburg, Schweiz
- Registriert: 09. November 2010
- Beiträge: 2.930
- Webseite
Re: LISE stoppt Export nach einem {foreach}
Leider kann ich dir keinen einfachen Tipp geben. Ich habe schon länger kein solch komplexes Template gebaut.
Interessenhalber: Hast du mal probiert im Allergene Template mal das gesamte Smarty rauszulöschen und dann probieren ob es läuft?
Entweder stört sich hier eine Instanz (deshalb läuft es möglicherweise am Ende) oder es gibt sonst etwas im Template das den Ärger machen.
Würde es mit leerem Template laufen, kannst du dich eins nach dem anderen rantasten, woher der Fehler kommt. Immer etwas mehr wieder reinbauen.
[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog / Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox
Offline
#3 29. Januar 2024 11:43
- rage_all
- kennt CMS/ms
- Ort: Augsburg
- Registriert: 09. März 2011
- Beiträge: 288
Re: LISE stoppt Export nach einem {foreach}
Danke - aber kein Erfolg. :-(
Ich hab in die Zutaten-Instanz tatsächlich nichts anderes rein, als ausschließlich
[== Smarty ==] {$item->fielddefs.allergene.value}
Die zu kennzeichnenden Stoffe sind korrekt mit den Buchstaben rausgekommen, aber danach aus dem Speisekarten-Template keinerlei Daten mehr.
Wenn ich die Zutaten-Instanz als erstes aufrufe, kommt tatsächlich gar nichts anderes mehr, außer alleine den Zutaten und sieht dann ungefähr so aus:
[== Frontend-HTML ==]
...vegetarisches<br>
AG, AA, A,N,O, G, A, G, G, A, A,N,O, G, A, A,N,O, G, G, A, A,N,O, G, A, A,N,O, G, A, G, G, G, A,N,O,
Keine Preise, keine {$title}, nichts mehr.
Jetzt überlege ich, ob ich z.B. mit {capture} die Daten zwischenspeichern soll, evtl. in einer eigenen {foreach} laufen lassen … aber kann ich dann sicher sein, dass die sich nicht verschieben? Nicht dass eine Speise an sich leer wäre und keine Allergene hätte, aber wegen der zwei {foreach} alles quasi nach oben rückt?
Grr.
Ich hab mir das leichter vorgestellt.
Naja - für den Moment funktioniert es ausreichend.
Ich werd bei Gelegenheit ein wenig experimentieren; die Allergene-Instanz aufrufen und von dort aus die Speisekarte callen, mit zwei {foreach}; irgendwas fällt mir ganz sicher ein.
Danke trotzdem!
Offline
Seiten: 1