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.php 在 init()
方法中你可能会看到:
'is_logged' => (bool)$this->context->customer->isLogged(),
然后在下方:
// Deprecated
$this->context->smarty->assign(array(
...
'logged' => $this->context->customer->isLogged(),
两个结论如下:
- 在全局代码中更好地使用
$is_logged
,$logged
可能会在下一版本中被删除。
- 如果重新定义变量,它将覆盖全局值(是的,我是 Captain Obvious)。
您可以轻松查看,例如通过在 'xxx' 和 'yyy' 等虚拟值上替换 FrontController 变量,然后在 nav.tpl 中替换 {$is_logged} = {$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.php 在 init()
方法中你可能会看到:
'is_logged' => (bool)$this->context->customer->isLogged(),
然后在下方:
// Deprecated
$this->context->smarty->assign(array(
...
'logged' => $this->context->customer->isLogged(),
两个结论如下:
- 在全局代码中更好地使用
$is_logged
,$logged
可能会在下一版本中被删除。 - 如果重新定义变量,它将覆盖全局值(是的,我是 Captain Obvious)。
您可以轻松查看,例如通过在 'xxx' 和 'yyy' 等虚拟值上替换 FrontController 变量,然后在 nav.tpl 中替换 {$is_logged} = {$logged}
。
希望它能帮助您更好地了解情况。