Ordermail, Endbetrag an zweiter Stelle anzeigen

Aus Wiki | modified eCommerce Shopsoftware
Zur Navigation springenZur Suche springen

Ich möchte in der Bestellbestätigung (templates/<mein_template>/mail/german/order_mail.txt u. .html) folgenden Spruch einfügen:

Bei Vorkassezahlung überweisen Sie bitte wie folgt: xxxxxxxx,yy

Mein Versuch

Bei Vorkassezahlung überweisen Sie bitte wie folgt: {$order_total_values.TEXT}

scheitert.


Antwort von Hendrik, 11.2008

Xtc speichert in den Bestellungen keinen expliziten Endbetrag sondern eine Liste von Werten die bei Abrechnungen stets aufgelistet werden. Die Liste ist unbestimmt lang, hat eine festgelegte Reihenfolge und beihaltet u.a. Beträge, Beträge als Text, Erklärender Text. Nachzulesen in DB, Tabelle orders_total.

Zb. erster Eintrag: titel="Zwischensumme", text="100 EUR", value="100"
Zweiter Eintrag: titel="zzgl UST 19%", text="19 EUR", value="19"
u.s.w.

Es gibt weder in der der Datenbank noch in Smarty einen eindeutigen Endbetrag den man eindeutig auslesen könnte und wiedergeben. Der Endbetrag den Smarty wiedergibt ist nur ein Teil einer Auflistung. Auch Smarty weiß nicht welcher Listenwert der gesuchte Endbetrag ist. Smarty gibt nur die Liste, eins nach dem anderen, wieder. Die besprochene foreach-Schleife.

Soweit zum Hintergrund.

Jetzt postulieren wir einfach, daß der letzte Listenwert stets der gesuchte Endbetrag ist. Das stimmt im allgemeinen, von der Systematik im Grundsatz muß das aber nicht immer zutreffen. Ignorieren wir das mal vorläufig. Wie finden wir in Smarty in einem Array den letzten Eintrag? Welcher Index? Smarty gibt dafür keine Auskunft. (Hab im Handbuch nichts gefunden dazu) . Aber in einer Schleife gibts einen Hinweis wann das letzte Element erreicht ist. Das können wir für eine IF-Abfrage nutzen. Foreach-Schleife, darin mittels IF alles ausfiltern ausser beim letzten Durchlauf. Charon lieferte dafür schon den richtigen Ansatz.


{foreach name=aussen item=order_total_values from=$order_total}
  {if $smarty.foreach.aussen.last==true}
    {$order_total_values.TEXT}
  {/if}
{/foreach}


Etwas eleganter ist der Ansatz indem wir nach dem Zusammenfassungsmodul fragen. Für jeden Eintrag in der Liste speichert xtc auch den Klassennamen des verantwortlichen Zusammenfassungsmoduls. Auch dieser Klassenname wird an Smarty übergeben und steht zur Auswertung zur Verfügung. Da wir den Endbetrag suchen ist das Zusammenfassungsmodul "ot_total" das gesuchte.

{foreach name=aussen item=order_total_values from=$order_total}
  {if $order_total_values.CLASS=="ot_total"}
    {$order_total_values.TEXT}
  {/if}
{/foreach}
           
anything