Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#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.  roll
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}&#9;
        {$item->title}&#9;
        {if $item->fielddefs.delivery1!=''}{$item->fielddefs.delivery1.value}&nbsp;&euro;&#9;{/if}
        {if $item->fielddefs.delivery2!=''}{$item->fielddefs.delivery2.value}&nbsp;&euro;&#9;{/if}
        {if $item->fielddefs.delivery3!=''}{$item->fielddefs.delivery3.value}&nbsp;&euro;&#9;{/if}
        {if $item->fielddefs.delivery4!=''}{$item->fielddefs.delivery4.value}&nbsp;&euro;&#9;{/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.  hmm
Entweder ich hab in der {foreach} einen Fehler und sehe es nicht - oder bei den Zutaten geht was faul … ich komm einfach nicht drauf. cry

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. ops

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.  big_smile

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.  angel

Danke trotzdem!

Offline