Smarty foreach und Assign

Hi zusammen,

ich möchte im Warenkorb sämtliche Artikelnummern als String an ein JavaScript übergeben. Dazu muss ich natürlich sämtliche Artikelnummern erstmal sammeln:


[{assign var="basketitemlist" value=$oView->getBasketArticles() }]
[{foreach key=basketindex from=$oxcmp_basket->getContents() item=basketitem name=test_Contents}]
[{assign var="basketproduct" value=$basketitemlist.$basketindex }]
  [{assign var="allbasketproducts" value=$basketproduct->oxarticles__oxartnum->value}]
[{/foreach}]

Allerdings wird natürlich hier immer nur das letzte Produkt in der Schleife genommen, ich möchte aber die Artikelnummern hintereinander in der Variable allbasketproducts stehe haben.

Jemand eine Idee?

Google mal nach “smarty capture append”

Gesendet von meinem Stream mit Tapatalk 2

Folgendes in die Schleife sollte gehen:

[{$deinarray.$basketindex = $allbasketproducts}] 

+1 für capture append. Wenn du sie nur als string brauchst und nicht als array könntest du sie auch direkt anhängen:

[{assign var="basketitemlist" value=$oView->getBasketArticles() }]
[{assign var="allbasketproducts" value=''}] 
[{foreach key=basketindex from=$oxcmp_basket->getContents() item=basketitem name=test_Contents}] 
    [{assign var="basketproduct" value=$basketitemlist.$basketindex }]
    [{if $allbasketproducts}]
        [{assign var="allbasketproducts" value=$allbasketproducts|cat:', '}]
    [{/if}]
    [{assign var="allbasketproducts" value=$allbasketproducts|cat:$basketproduct->oxarticles__oxartnum->value}] 
[{/foreach}] 
[{$allbasketproducts}] 
 

Wow, dankeschön für die prompte Hilfe :slight_smile: Funktioniert perfekt!

Auf der Thankyou steht das Basket Objekt nicht mehr zur Verfügung, oder? Dort brauche ich den ganzen Schmarrn nämlich nochmal…

Da gibt’s wahrscheinlich nur Order, der Basket ist ja dann schon leer.

Hab jetzt nochmals in der Docu nachgesehen, auf Order sollte eigentlich getBasketArticles anwendbar sein:


[{assign var="order" value=$oView->getOrder()}]
[{assign var="basketitemlist" value=$order->getBasketArticles() }]

Tut aber nicht und wird mit folgender Meldung quittiert:

Function ‘getBasketArticles’ does not exist or is not accessible! (MyOrder)

Also oxorder hat eine Funktion getBasket, probiers mal damit, etwa so:


[{assign var="order" value=$oView->getOrder()}] 
[{assign var="basket" value=$order->getBasket()}] 
[{assign var="basketitemlist" value=$basket->getBasketArticles() }]  

Hi Frank,

scheint noch nicht ganz zu funktionieren.


[{foreach key=basketindex from=$oxcmp_basket->getContents() item=basketitem name=test_Contents}] 

oxcmp_basket scheint hier leer zu sein. Muss noch etwas rumtüfteln, denn irgendwie musses ja funktionieren.

Ja ich glaub da gibt’s keinen Basket mehr, nur noch Order und Orderarticles.

Okay, die Orderarticles genügen mir schon mal, nur über welches Objekt muss ich dann darüber iterieren? Ich benötige nur alle Artikelnummern, genauso wie beim oberen Beispiel.

in account/order.tpl sieht das so aus:


[{foreach from=$order->getOrderArticles(true) item=orderitem name=testOrderItem}]
    [{assign var=sArticleId value=$orderitem->oxorderarticles__oxartid->value }]

Allright, prima, ich danke Dir, so funktionierts natürlich:


[{assign var="order" value=$oView->getOrder()}] 
[{assign var="allbasketproducts" value=''}]
[{foreach from=$order->getOrderArticles(true) item=orderitem name=testOrderItem}]
    [{if $allbasketproducts}]
        [{assign var="allbasketproducts" value=$allbasketproducts|cat:'|'}]
    [{/if}]
    [{assign var="allbasketproducts" value=$allbasketproducts|cat:$orderitem->oxarticles__oxartnum->value}] 
[{/foreach}]

Hi Leute,

jetzt habe ich nur noch ein Problem. Ich benötige noch die Gutscheinnummern auf der Thanyou Page.

Folgenden Code habe ich mir zusammengebaut, allerdings funktioniert das so nicht. Netterweise sind die Variablen aber in der cust_order_owner.tpl hier, dann sollten die Werte ja auch in der thankyou.tpl verfügbar sein.

Hier also mein gescheiterter Versuch:


[{if $oViewConf->getShowVouchers() }]
  [{assign var="allvouchers" value=''}]
    [{ foreach from=$vouchers item=voucher}]
      [{if $allvouchers}]
          [{assign var="allvouchers" value=$allvouchers|cat:'|'}]
      [{/if}]  
      [{assign var="allvouchers" value=$allvouchers|cat:$voucher->oxmodvouchers__oxvouchernr->value}] 
    [{/foreach }]
  [{assign var="wgVoucherCode" value=$allvouchers|rawurlencode }]
[{/if}]

wird $vouchers irgendwo definiert? ansonsten probier:
[{ foreach from=$order->getVoucherList() item=voucher}]

Hat sich erledigt:


[{if $order->getVoucherNrList() }]
  [{assign var="allvouchers" value=''}]
    [{foreach from=$order->getVoucherNrList() item=voucher}]
      [{if $allvouchers}]
          [{assign var="allvouchers" value=$allvouchers|cat:'|'}]
      [{/if}]  
      [{assign var="allvouchers" value=$allvouchers|cat:$voucher}] 
    [{/foreach }]
  [{assign var="wgVoucherCode" value=$allvouchers|rawurlencode }]
[{/if}]