$sBasket.attr4 wie $sArticle.attr4 auslesen?

Hallo,

wie kann ich im Checkout in dem Array $sBasket den Wert für attr4 auslesen?

Ich habe es mit verschachtelten {foreach} probiert, aber das funktioniert nicht.

{assign var="attrSpedition" value="0"}
	{foreach name=aussen from=$sBasket item=item}
		{foreach item=item2 from=$item}
			{foreach item=item3 from=$item2}
				{foreach key=key item=item4 from=$item3}
					{$key}: {$item4.value} {* Hier werden die Werte korrekt ausgegeben *}
					{if $key == 'attr4'}
						{$attrSpedition = item4.value}
					{/if}
				{/foreach}
			{/foreach}
		{/foreach}
	{/foreach}
Wert attrSpedition: {$attrSpedition} {* hier steht dann nichts drin *}

Kann mir bitte jemand zeigen, was ich verkehrt mache?

Viele Grüße

Gunnar

Hatte ein ähnliches Problem.

Da aber die Attribute in einem protected Objekt ( core ) sind, kannst du diese nicht direkt abrufen. Ich habe dann mein eigenes Attribut wie folgt aberufen:

{$sBasketItem.additional_details.attributes.core->get("mein_freitextfeld")}

In deinem Fall müsste es also sein

{$sBasketItem.additional_details.attributes.core->get("attr4")}

 

Hallo Shopwareianer,

danke für deine Antwort. Leider funktioniert es nicht.

Stattdessen bekomme ich diese Fehlermeldung in der error.log:

 PHP Fatal error:  Call to a member function get() on null in /var/cache/production_201801171346/templates/frontend_XXX_de_DE_1_secure/9c/b1/c0/9cb1c00fca3fd8dbb5388438e028b75cd3994a54.snippet.index.tpl.php on line 3034

Die checkout/confirm.tpl wird auch nicht weiter geladen.

 {* Phone *}
 {block name='frontend_register_personal_fieldset_input_phone'}
     {if {$sBasketItem.additional_details.attributes.core->get('attr4')} == '1'} 
         {* Tu was *}
     {/if}
 {/block}

Bei dem $sBasketItem bin ich nicht sicher, ob das sein kann, da es im Debug Fenster diese Variable nicht gibt. Aber, ob mit oder ohne “Item” kommt diesselbe Fehlermeldung.

Hast Du vielleicht noch eine Idee, was es sein kann?

Viele Grüße

Gunnar

Hallo,

probier mal folgenden Code:

 {block name='frontend_register_personal_fieldset_input_phone'}
     {if $sBasketItem.additional_details.attributes.core->get('attr4') == '1'} 
         {* Tu was *}
     {/if}
 {/block}

oder alternativ:

 {block name='frontend_register_personal_fieldset_input_phone'}
     {if $sBasketItem.additional_details.attr4 == '1'} 
         {* Tu was *}
     {/if}
 {/block}

Grüße

Sebastian

@Gunnar schrieb:

Hallo Shopwareianer,

danke für deine Antwort. Leider funktioniert es nicht.

Stattdessen bekomme ich diese Fehlermeldung in der error.log:

 PHP Fatal error:  Call to a member function get() on null in /var/cache/production_201801171346/templates/frontend_XXX_de_DE_1_secure/9c/b1/c0/9cb1c00fca3fd8dbb5388438e028b75cd3994a54.snippet.index.tpl.php on line 3034

Die checkout/confirm.tpl wird auch nicht weiter geladen.

{* Phone }
{block name=‘frontend_register_personal_fieldset_input_phone’}
{if {$sBasketItem.additional_details.attributes.core->get(‘attr4’)} == ‘1’}
{
Tu was *}
{/if}
{/block}

Bei dem $sBasketItem bin ich nicht sicher, ob das sein kann, da es im Debug Fenster diese Variable nicht gibt. Aber, ob mit oder ohne “Item” kommt diesselbe Fehlermeldung.

Hast Du vielleicht noch eine Idee, was es sein kann?

Viele Grüße

Gunnar

Du solltest jetzt auch nicht unbedingt die sBasketItem Variabel nehmen, sondern natürlich deine Variabel, welche du auslesen möchtest und dann schauen, wo das Core Array schlummert. Und dann mit dem obigen get Befehl die Attribute auslesen.

1 Like

Ja, wer lesen kann, ist klar im Vorteil. Man sollte sich korrekt durchs Array hangeln :wink:

Sinn und Zweck der Übung war, die Telefonnummer zum Pflichtfeld bei Speditionsware zu machen und bei allen anderen Artikel nicht.
Wir benutzen den OnePage Checkout von Premsoft und dort gibt es  $sBasket.
Falls wer ähnliches machen will, hier der Code in personal_fieldset.tpl:

 {* Phone *}
    {block name='frontend_register_personal_fieldset_input_phone'}
	{assign var="i" value='0'}
	{assign var="spedition" value='0'}
	{assign var="counter" value='0'}
	{$counter = $sBasket.content|@count}
	{for $i=0 to $counter-1}
		{if $sBasket.content.$i.additional_details.attributes.core->get('attr4') == '1'}
			{$spedition = '1'}
		{/if}
	{/for}
	{if $spedition == '1'}
		
			
		
	{/if}
    {/block}

Ja, den Code kann man noch kürzer schreiben, ich hab es aber gerne schnell lesbar :wink:

Danke für eure Hilfe!

Gunnar