Shopware - 将 $sUserLoggedIn-Variable 传递给小部件

Posted

技术标签:

【中文标题】Shopware - 将 $sUserLoggedIn-Variable 传递给小部件【英文标题】:Shopware - Pass $sUserLoggedIn-Variable to Widget 【发布时间】:2015-08-07 22:31:38 【问题描述】:

我目前在 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)传递给小部件,我不知道如何解决这个问题。

任何帮助表示赞赏:) 问候

【问题讨论】:

【参考方案1】:

您是否尝试将$sUserLoggedIn 设为全局变量?你可以在Shopware docs找到教程。

【讨论】:

最好最简单的方法。仅供参考,要使变量全局化,您只需在添加变量时添加scope="global"【参考方案2】:

这很丑陋,但商店软件在它自己的代码中做到了。好吧,对于商店用品,几乎所有东西看起来都像黑客一样。 在我的插件的引导程序中,我这样做:

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

【讨论】:

【参考方案3】:

最好的方法是将 DI 容器注入到你的类中。

之后,您可以通过以下方式访问 Sesson:$session = $this-&gt;container-&gt;get('session');

现在你可以做类似的事情了:

$view->assign('isUserLoggedIn', !empty($session->sUserId)); or
$view->assign('isUserLoggedIn', !empty($session->offsetGet("sUserId"));

【讨论】:

以上是关于Shopware - 将 $sUserLoggedIn-Variable 传递给小部件的主要内容,如果未能解决你的问题,请参考以下文章

Shopware - 将 $sUserLoggedIn-Variable 传递给小部件

如何将自定义订单状态添加到 shopware 6

以编程方式将媒体上传到 Shopware 6 的最佳方式?

移动不同版本的shopware内容

Shopware 6 OneToMany 关系

Shopware 客户导入错误:EntityManager 已关闭