# PHP Variable an Smarty übergeben

**URL:** <https://forum.shopware.com/t/php-variable-an-smarty-ubergeben/49446>\
**Category:** Programmierung\
**Created:** [14. November 2017 um 10:50 UTC](https://forum.shopware.com/t/php-variable-an-smarty-ubergeben/49446 "2017-11-14T10:50:41Z")\
**Posts on this page:** 16\
**Page:** 1

<div class="post-metadata">

**Author:** ![schlueter550v](https://avatars.discourse-cdn.com/v4/letter/s/b782af/32.png) [@schlueter550v](https://forum.shopware.com/u/schlueter550v)\
**Post date:** [14. November 2017 um 10:50 UTC](https://forum.shopware.com/t/php-variable-an-smarty-ubergeben/49446/1 "2017-11-14T10:50:41Z")

</div>

Hallo Community,

Ich stehe auf dem Schlauch. Ich will in einem Smarty Template mit der aktuellen Kundengruppe des Users arbeiten.

Sprich: Wenn Kundengruppe nicht gleich Gast, zeige blabla.

Ich hab im Hinterkopf irgendetwas von view-\>assign?  
Wie übergebe ich die Variable aus einem Plugin an Smarty? Welches Event muss ich dafür nutzen?

Momentan habe ich folgendes:  
Bootstrap:

```
public function install()
{
	$this->subscribeEvent(
            'Enlight_Controller_Action_PostDispatch_Frontend',
            'postDispatch'
        );

	return true;
}

public function postDispatch(Enlight_Event_EventArgs $args)
{
$view->assign("kundengruppe",Shopware()->System()->sUSERGROUPDATA['groupkey']);
}

```

und in der tpl:

```
{if $kundengruppe != "GAST"}
{block name="frontend_detail_tabs_description" append}
{s namespace="frontend/detail/tabs" name='TabDownloadDescription'}{/s}
{/block}
{/if}

```

Nur leider ist es Shopware egal, ob ich eingeloggt bin oder nicht. Er zeigt den Inhalt immer an.

Grüße Schlueter550v

---

<div class="post-metadata">

**Author:** ![arnebecker](https://avatars.discourse-cdn.com/v4/letter/a/3bc359/32.png) [@arnebecker](https://forum.shopware.com/u/arnebecker)\
**Post date:** [14. November 2017 um 11:25 UTC](https://forum.shopware.com/t/php-variable-an-smarty-ubergeben/49446/2 "2017-11-14T11:25:48Z")

</div>

view-\>assign() ist schon richtig. An welcher Stelle willst du es denn konkret nutzen?

---

<div class="post-metadata">

**Author:** ![simkli](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/simkli/32/13124_2.png) [@simkli](https://forum.shopware.com/u/simkli)\
**Post date:** [14. November 2017 um 11:25 UTC](https://forum.shopware.com/t/php-variable-an-smarty-ubergeben/49446/3 "2017-11-14T11:25:51Z")

</div>

Fehler:

1. In deiner Tpl fehtl ein {extends file="…} sonst kannst du nicht „append“ bei einem Block machen
2. Wenn du eine Datei erweiterst {extends file="…} darf nichts auserhalb von einem Block stehen (=\> die if-Abfrage muss innerhlab des Blocks}

Empfehlungen:

1. Anstelle von append nutze {$smarty.block.parent}&nbsp;[Getting started with Smarty](https://developers.shopware.com/designers-guide/smarty/#blocks)

Viele Grüße

---

<div class="post-metadata">

**Author:** ![schlueter550v](https://avatars.discourse-cdn.com/v4/letter/s/b782af/32.png) [@schlueter550v](https://forum.shopware.com/u/schlueter550v)\
**Post date:** [14. November 2017 um 11:42 UTC](https://forum.shopware.com/t/php-variable-an-smarty-ubergeben/49446/4 "2017-11-14T11:42:20Z")

</div>

Hallo,

@arnebecker‍ ich will es bei der Artikelansicht nutzen. Ein Tab unten soll nur für eingeloggte Kunden sichtbar sein.

@simkli Meinst du so?:

```
{extends file="parent:frontend/detail/tabs.tpl"}

{* New tab *}
{block name="frontend_detail_tabs_description" append}
{if $kundengruppe != "GAST"}
{s namespace="frontend/detail/tabs" name='TabDownloadDescription'}{/s}
{/if}
{/block}

```

Das funktioniert leider auch nicht.  
stimmt mein Ansatz überhaupt wie ich die Kundengruppe übergebe, oder ist hier was Falsch

```
$view->assign("kundengruppe",Shopware()->System()->sUSERGROUPDATA['groupkey']);

```

&nbsp;

---

<div class="post-metadata">

**Author:** ![simkli](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/simkli/32/13124_2.png) [@simkli](https://forum.shopware.com/u/simkli)\
**Post date:** [14. November 2017 um 11:45 UTC](https://forum.shopware.com/t/php-variable-an-smarty-ubergeben/49446/5 "2017-11-14T11:45:28Z")

</div>

Ja, das sieht besser aus. Eines fehlt noch:

```
public function postDispatch(Enlight_Event_EventArgs $args)
{
  $subject = $args->getSubject(); // Controller 
  $view = $subject->View(); // View
  $view->assign("kundengruppe",Shopware()->System()->sUSERGROUPDATA['groupkey']);
}

```

Noch eine Empfehlung:

Enlight\_Controller\_Action\_PostDispatch\_Frontend -\>&nbsp;Enlight\_Controller\_Action\_PostDispatchSecure\_Frontend

Das verhindert, dass dein Code bei Fehlern o.ä. ausgeführt wird.

Viele Grüße

---

<div class="post-metadata">

**Author:** ![schlueter550v](https://avatars.discourse-cdn.com/v4/letter/s/b782af/32.png) [@schlueter550v](https://forum.shopware.com/u/schlueter550v)\
**Post date:** [14. November 2017 um 12:02 UTC](https://forum.shopware.com/t/php-variable-an-smarty-ubergeben/49446/6 "2017-11-14T12:02:02Z")

</div>

ok ich habe jetzt:

```
public function install()
{
	$this->subscribeEvent(
            'Enlight_Controller_Action_PostDispatchSecure_Frontend',
            'postDispatch'
        );

	return true;
}

public function postDispatch(Enlight_Event_EventArgs $args)
{
	$subject = $args->getSubject();
    $view=$subject->View();
$view->assign("kundengruppe",Shopware()->System()->sUSERGROUPDATA['groupkey']);
}

```

und in der tpl:

```
{extends file="parent:frontend/detail/tabs.tpl"}

{* New tab *}
{block name="frontend_detail_tabs_description" append}
{if $kundengruppe != "GAST"}
{s namespace="frontend/detail/tabs" name='TabDownloadDescription'}{/s}
{/if}
{/block}

{* New Tab container *}

{block name="frontend_detail_tabs_content_description" append}
{if $kundengruppe != "GAST"}

{s namespace="frontend/detail/tabs" name='TabDownloadDescription'}{/s}
{include file="frontend/detail/tabs/download.tpl"}

{/if}
{/block}

```

in der download.tpl, lass ich mir die $kundengruppe zwischen zwei paragraphs ausgeben.

```
{$kundengruppe}

```

Auf der Seite zeigt er dann aber einen leeren Wert an.

---

<div class="post-metadata">

**Author:** ![arnebecker](https://avatars.discourse-cdn.com/v4/letter/a/3bc359/32.png) [@arnebecker](https://forum.shopware.com/u/arnebecker)\
**Post date:** [14. November 2017 um 13:42 UTC](https://forum.shopware.com/t/php-variable-an-smarty-ubergeben/49446/7 "2017-11-14T13:42:25Z")

</div>

Ich weiß leider nicht was in&nbsp;Shopware()-\>System()-\>sUSERGROUPDATA[‘groupkey’] drin steht. Vielleich steht da auch einfach nix drin?!?

Du solltest auch beachten, dass die Artikeldetail Seite gecached wird (zumindest im Standard) und du auf der Detailseite nix Kunden-dynamisches einzeigen kannst auf diese Art und Weise. Du müsst mit dem {action} Viewhelper einen Subrequest abfeuern. Die werden nicht gecached und können deine Kunden-dynamischen Informationen in die Seite einbinden.

---

<div class="post-metadata">

**Author:** ![schlueter550v](https://avatars.discourse-cdn.com/v4/letter/s/b782af/32.png) [@schlueter550v](https://forum.shopware.com/u/schlueter550v)\
**Post date:** [14. November 2017 um 15:14 UTC](https://forum.shopware.com/t/php-variable-an-smarty-ubergeben/49446/8 "2017-11-14T15:14:19Z")

</div>

Hallo Community,

das Problem hat sich gelöst. Die Kundengruppe wurde nach dem Tipp von @simkli‍ übertragen.  
Was ich nicht wusste ist, das wenn man nicht eingeloggt ist diese Abfrage einen leeren String zurück gibt.

Wenn ich nun in Smarty:

```
{if $kundengruppe != ""}

```

nutze funktioniert alles so wie es soll.

Vielen Dank nochmal an @simkli‍

Beste Grüße

Schlueter550v

---

<div class="post-metadata">

**Author:** ![sschreier](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/sschreier/32/23296_2.png) [@sschreier](https://forum.shopware.com/u/sschreier)\
**Post date:** [14. November 2017 um 17:22 UTC](https://forum.shopware.com/t/php-variable-an-smarty-ubergeben/49446/9 "2017-11-14T17:22:11Z")

</div>

Hallo,

wie simkli aber oben schon schreibt: man soll kein append mehr nutzen (auch von Shopware aus), sondern anstelle davon {$smarty.block.parent}, da die Nutzung von append und preprend zu Problemen führen kann.

Und wie arnebecker richtig schreibt, wird deine Lösung auch gecacht, was ja auch nicht Sinn der Sache sein soll, wenn nur bestimmte Kundengruppen oder ähnliches die Downloads sehen dürfen.

Beste Grüße

Sebastian

---

<div class="post-metadata">

**Author:** ![schlueter550v](https://avatars.discourse-cdn.com/v4/letter/s/b782af/32.png) [@schlueter550v](https://forum.shopware.com/u/schlueter550v)\
**Post date:** [15. November 2017 um 07:05 UTC](https://forum.shopware.com/t/php-variable-an-smarty-ubergeben/49446/10 "2017-11-15T07:05:47Z")

</div>

Hallo,

wie wende ich das {$smarty.block.parent} an, und wie kann ich verhindern, dass es gecacht wird?

Gruß  
Schlueter550v

---

<div class="post-metadata">

**Author:** ![arnebecker](https://avatars.discourse-cdn.com/v4/letter/a/3bc359/32.png) [@arnebecker](https://forum.shopware.com/u/arnebecker)\
**Post date:** [15. November 2017 um 09:19 UTC](https://forum.shopware.com/t/php-variable-an-smarty-ubergeben/49446/11 "2017-11-15T09:19:31Z")

</div>

Moin Schlueter,

append

```
{block name="frontend_detail_tabs_description"}
  {$msarty.block.parent}
  {* deine Erweiterung *}
{/block}

```

prepend

```
{block name="frontend_detail_tabs_description"}
  {* deine Erweiterung *}
  {$msarty.block.parent}
{/block}

```

Und wie man den Cache deaktiviert? Das findet man sehr einfach bei Google. Untschuldigung, aber dieses Forum bietet Hilfe zu Selbsthilfe. Wir können hier keine komplette Lösungen basteln. Wir setzen vorraus, dass ihr Hilfesuchenden mit der Doku, der Dev Doku und Google vertraut seid!

Cache Global deaktivieren (nicht empfohlen):&nbsp;[http://community.shopware.com/Cache-Performance-Modul\_detail\_845.html#Start](http://community.shopware.com/Cache-Performance-Modul_detail_845.html#Start)

Hier kannst du nur die ADS (frontendt/detail) aus dem Cache nehmen (ebenfalls nicht empfohlen):&nbsp;[http://community.shopware.com/Cache-Performance-Modul\_detail\_845.html#HTTP-Cache\_aktivieren\_und\_konfigurieren](http://community.shopware.com/Cache-Performance-Modul_detail_845.html#HTTP-Cache_aktivieren_und_konfigurieren)

So kannst dus richtig machen:&nbsp;[On action tags](https://developers.shopware.com/blog/2016/07/11/on-action-tags/)

&nbsp;

---

<div class="post-metadata">

**Author:** ![schlueter550v](https://avatars.discourse-cdn.com/v4/letter/s/b782af/32.png) [@schlueter550v](https://forum.shopware.com/u/schlueter550v)\
**Post date:** [17. November 2017 um 10:05 UTC](https://forum.shopware.com/t/php-variable-an-smarty-ubergeben/49446/12 "2017-11-17T10:05:07Z")

</div>

Ok ich hab jetzt verstanden, dass ich mit dem Smarty {action} tag eine Abfrage ohne Cache auslösen kann. Aber welchen controller und Action muss ich angeben?

wäre controller=frontend und action=detail?

---

<div class="post-metadata">

**Author:** ![simkli](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/simkli/32/13124_2.png) [@simkli](https://forum.shopware.com/u/simkli)\
**Post date:** [17. November 2017 um 10:36 UTC](https://forum.shopware.com/t/php-variable-an-smarty-ubergeben/49446/13 "2017-11-17T10:36:53Z")

</div>

So wie ich das sehe brauchst du dir um den Cache keine Gedanken zu machen. Die Kundengruppe ist bereits ein Cache-Key. D.h. pro Kundengruppe wird ein separater Cache angelegt. Problematisch würde es werden, wenn du auch noch spezielle Daten von Kunden wie z.B. Name oder Vorname abfragen würdest. Diese stehen dir nämlich im Cache nicht zur Verfügung. Hast du den überhaupt Caching-Probleme?

Viele Grüße

---

<div class="post-metadata">

**Author:** ![arnebecker](https://avatars.discourse-cdn.com/v4/letter/a/3bc359/32.png) [@arnebecker](https://forum.shopware.com/u/arnebecker)\
**Post date:** [17. November 2017 um 10:42 UTC](https://forum.shopware.com/t/php-variable-an-smarty-ubergeben/49446/14 "2017-11-17T10:42:46Z")

</div>

Du müsstest dir selber einen Controller mit eigener Action&nbsp;schreiben. In das Template der Action muss das hier rein. Sprich das Ergebniss deiner Action:

```
{if $kundengruppe != "GAST"}
  {s namespace="frontend/detail/tabs" name='TabDownloadDescription'}{/s}
{/if}

```

Und das Ergebniss des Controller bindest du so ein:

```
{block name="frontend_detail_tabs_description" append}
{action controller=deinController action=deineAction}
{/block}

```

&nbsp;

---

<div class="post-metadata">

**Author:** ![schlueter550v](https://avatars.discourse-cdn.com/v4/letter/s/b782af/32.png) [@schlueter550v](https://forum.shopware.com/u/schlueter550v)\
**Post date:** [17. November 2017 um 10:44 UTC](https://forum.shopware.com/t/php-variable-an-smarty-ubergeben/49446/15 "2017-11-17T10:44:03Z")

</div>

hmm nicht das ich wüsste. Es ergibt sich aber gerade ein anderes Problem:

mittels view-\>assign habe ich ja die kundengruppe übergeben. Dies funktioniert nur leider nicht bei der Startseite. In welchem Event muss ich nochmals ein view-\>assign ausführen?  
Gibt es ne Liste mit den ganzen Shopware Events? In der DevDoku finde ich nicht viel passendes außer ein paar Beispielen.

---

<div class="post-metadata">

**Author:** ![arnebecker](https://avatars.discourse-cdn.com/v4/letter/a/3bc359/32.png) [@arnebecker](https://forum.shopware.com/u/arnebecker)\
**Post date:** [17. November 2017 um 13:12 UTC](https://forum.shopware.com/t/php-variable-an-smarty-ubergeben/49446/16 "2017-11-17T13:12:37Z")

</div>

Du verwendest ja&nbsp;Enlight\_Controller\_Action\_PostDispatchSecure\_Frontend. Der wird bei jedem Frontend Request gefeuert. Also auch bei der Startseite. Sollte also eigtl richtig sein!

Kann es sein das du zwischezeitlich ausgeloggt wurdest?

> Was ich nicht wusste ist, das wenn man nicht eingeloggt ist diese Abfrage einen leeren String zurück gibt.

Früher zu SW4 Zeiten gab es auch mal eine Übersicht mit allen Events. Die gibts aber inzwischen nicht mehr. Jetzt findest man sie nur noch wenn man durch den Shopware Code scrollt oder&nbsp;im Code nach den Stichworten filter(, notifiy( oder notifyUntil( suchst.
