Prestashop $logged 和 $is_logged

Prestashop $logged and $is_logged

我遇到 Smarty 问题,有时在默认代码中出现 $is_logged

..\modules\blockuserinfo\blockuserinfo.php

[...]
public function hookDisplayTop($params)
    {
        if (!$this->active)
            return;

        $this->smarty->assign(array(
            [...]
            'is_logged' => $this->context->customer->isLogged(),
            [...]
        ));
        return $this->display(__FILE__, 'blockuserinfo.tpl');
    }
[...]

..\themes\presta-bootstrap\modules\blockuserinfo\nav.tpl

<!-- Block user information module NAV  -->
{if $is_logged}
    <div class="header_user_info">
            [...]
    </div>
{/if}

但在 $logged 上更改 .tpl 中的 var 名称之前它不会工作。然后突然它起作用了!怎么样?

类似情况。

..\themes\presta-bootstrap\order-opc.tpl

<!-- Shopping Cart -->

        {include file="$tpl_dir./shopping-cart.tpl"}
        <!-- End Shopping Cart -->
        {if $is_logged AND !$is_guest}
            {include file="$tpl_dir./order-address.tpl"}
        {else}
            <!-- Create account / Guest account / Login block -->
            {include file="$tpl_dir./order-opc-new-account.tpl"}
            <!-- END Create account / Guest account / Login block -->

仅当我将 $is_logged 替换为 $logged 时才能正常工作。这两种情况都不会出错,只是得到 FALSE 值并给出意想不到的结果。

我应该去哪里找原因?

让我们一步一步说清楚,$logged$is_logged只是Smarty变量,这意味着它们在某处定义。

我不确定你用的是什么版本,在blockuserinfo.php中的1.6.0.11我看到定义了:

this->smarty->assign(array( ... 'logged' => $this->context->customer->isLogged(),

从另一边 classes/controllers/Frontcontroller.phpinit() 方法中你可能会看到:

'is_logged' => (bool)$this->context->customer->isLogged(),

然后在下方:

// Deprecated $this->context->smarty->assign(array( ... 'logged' => $this->context->customer->isLogged(),

两个结论如下:

  1. 在全局代码中更好地使用 $is_logged$logged 可能会在下一版本中被删除。
  2. 如果重新定义变量,它将覆盖全局值(是的,我是 Captain Obvious)。

您可以轻松查看,例如通过在 'xxx' 和 'yyy' 等虚拟值上替换 FrontController 变量,然后在 nav.tpl 中替换 {$is_logged} = {$logged}

希望它能帮助您更好地了解情况。