Shopware — передать $sUserLoggedIn-Variable в виджет

В настоящее время у меня проблема с запросом, вошел ли пользователь в Shopware-Widget. Мне нужно сделать это, так как некоторые элементы на страницах эмоций должны быть скрыты, если пользователь не вошел в систему. Что я только что сделал, так это изменил код в component_html.tpl примерно так:

{if $Data.cms_title|substr:0:1 == "_"}
    {assign var="private" value=true}
{else}
    {assign var="private" value=false}
{/if}


{if $Data.cms_title}
    <div class="page-header">
        <h3>{$Data.cms_title|substr:1}</h3>
        {if $private and $sUserLoggedIn}<p>This block is private</p>{/if}
    </div>
{/if}
{$Data.text}

К сожалению, Shopware по умолчанию не передает переменные шаблона (в данном случае $sUserLoggedIn) в виджеты, и я понятия не имею, как решить эту проблему.

Любая помощь приветствуется :) С уважением


person bquarta    schedule 26.05.2015    source источник


Ответы (3)


Лучший способ — внедрить DI-контейнер в ваш класс.

После этого у вас есть доступ к Сессии через: $session = $this->container->get('session');

Теперь вы можете сделать что-то вроде этого:

$view->assign('isUserLoggedIn', !empty($session->sUserId)); or
$view->assign('isUserLoggedIn', !empty($session->offsetGet("sUserId"));
person Alexander Voss    schedule 18.10.2016

Вы пытались сделать $sUserLoggedIn глобальной переменной? Вы можете найти руководство в документах Shopware.

person Roman    schedule 20.10.2015
comment
лучший и простой способ. Просто для информации, чтобы сделать переменную глобальной, вам просто нужно добавить scope="global" при добавлении переменной, - person Faisal Sarfraz; 07.04.2017

Это некрасиво, но магазинное программное обеспечение делает это в своем собственном коде. Ну а с шопваром почти все выглядит как халтура. В начальной загрузке моего плагина я делаю:

$view->assign('isUserLoggedIn', !empty(Shopware()->Session()['sUserId']));
person pinkeen    schedule 25.05.2016