gpt4 book ai didi

javascript - 如果用户未登录/登录,Prestashop 将目录模式设置为开/关

转载 作者:行者123 更新时间:2023-11-27 23:08:49 25 4
gpt4 key购买 nike

我正在开发一个 prestashop 模块,以便在用户未登录或登录时将目录模式设置为打开或关闭。

效果很好,但遇到了问题。

我不希望未登录的用户看到价格并允许其订购。但是通过我发现的解决方案,当第一次连接(模式目录关闭)未登录的用户加载页面时,目录模式打开,但他可以看到价格(必须重新加载以隐藏价格)所以,首先加载设置目录模式打开,第二次加载加载显示真实目录模式。

我找到了一个js脚本,可以自动重新加载以在新模式下生效,但显然,页面的加载时间延长了两倍。

这是函数:

  public function hookHeader()
{
$logged = $this->context->customer->isLogged();
if (!$logged) {
Configuration::updateValue('PS_CATALOG_MODE', true);
} else {
Configuration::updateValue('PS_CATALOG_MODE', false);
}
// reload the page once more
echo '
<script type="text/javascript">
(function() {
if( window.localStorage ) {
if( !localStorage.getItem( "firstLoad" ) ) {
localStorage[ "firstLoad" ] = true;
window.location.reload();
} else {
localStorage.removeItem( "firstLoad" );
}
}
})();
</script>
';
}

希望有人能帮助我解决这个问题。谢谢。

最佳答案

您的解决方案有问题。您正在更新数据库内的值:如果多个用户正在浏览该网站,该值将打开/关闭/打开/关闭/...,换句话说,它是“不稳定的”。下一个访问该网站的客户将获得当前值(可以打开和关闭)。

相反,您应该仅为该客户切换该值。我为 Configuration 类编写了一个重写,它检查您是否正在尝试获取 PS_CATALOG_MODE,然后检查您是否已登录并返回 0 或 1。请小心使用静态变量缓存此值(这样您就不必多次检查)。

但是这个解决方案也有一个缺陷。它每次都会检查请求配置变量的键。

更好的解决方案是在 session 期间更改此值。配置变量实际上在 session 期间保存在 PHP 数组中。您应该在这里更改它:

https://github.com/PrestaShop/PrestaShop/blob/1.6.1.x/classes/Configuration.php#L203

可能通过覆盖

https://github.com/PrestaShop/PrestaShop/blob/1.6.1.x/classes/Configuration.php#L140

这就是我想要重写的 loadConfiguration:

<?php

// placed in /override/classes/Configuration.php

class Configuration extends ConfigurationCore
{
public static function loadConfiguration()
{
parent::loadConfiguration();
// 'global' because I assume you're not runing multishop
self::$_cache[self::$definition['table']][0]['global']['PS_CATALOG_MODE'] = !Context::getContext()->customer->isLogged();
}
}

我是从 memeroy 写的,所以一定要检查 anmes 等。我假设你正在运行 > PS1.6

关于javascript - 如果用户未登录/登录,Prestashop 将目录模式设置为开/关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36362937/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com