首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Magento和Wordpress -跨两个平台同步菜单,发出cookie

Magento和Wordpress -跨两个平台同步菜单,发出cookie
EN

Stack Overflow用户
提问于 2013-08-05 22:40:32
回答 3查看 742关注 0票数 0

我使用Magento WordPress集成插件从一个平行的Magento安装调用块,以便从Magento提取适当的菜单块。

这是非常好的工作,除了一件事,网站是多语种。

我在Wordpress中插入了一些代码,以便当语言发生变化时,它将存储cookie更改为适当的语言,以确保Magento以正确的语言加载菜单。

由于某种原因,它需要在加载正确的语言之前单击两次。我可以在web检查器中看到,“商店”cookie设置为正确的语言,但在这种情况发生之前,插件似乎正在加载Magento内容。

除了分离菜单并让它们在系统之间手动编码之外,我真的不知道该怎么办。我在讨论中与插件的实际开发人员在一起,但他自己却想不出一个解决方案(不幸的是,当我要求提供一些支持的可能性时,讨论被终止了)。

在任何情况下,如果有人知道如何做到这一点,我会非常感激,因为似乎没有人找到了一个解决方案,我可以想象是一个相当典型的设置。

--

编辑:这是我写到目前为止,并试图开始工作。它从URL中提取语言字符串,然后设置store cookie。通过查看插件API/动作参考,这是在加载顺序中发生的第一件事。我确实有一个必须使用的插件,可以确认它的工作,但我也尝试过连接到registered_taxonomy,post类型等.由于一些奇怪的原因,它仍然无法工作,直到第二次点击,即使它发生了很久之前,主题或常规插件加载。

代码语言:javascript
复制
function set_store_cookie() {
    if( preg_match("(/(de|en|jp)/)",$_SERVER[REDIRECT_URL],$m)) {
        $pbCurrentLanguage = $m[1];
    } else {
      $currentLanguage = "en";
    }
    setcookie('store', $currentLanguage, time()+(60 * 60 * 24 * 1), COOKIEPATH, '.domain.com', false);
  }
add_action('registered_post_type', 'set_store_cookie');

--

store 2:编辑2:在下面与Mihai进行了广泛的讨论之后,我们讨论了一些事情,但主要发现,无论什么情况,如果设置了 cookie,即使静态调用$app = Mage::app('desired_lang', 'store');,Wordpress也会加载cookie指定的语言。

这非常令人困惑,因为它与前面的问题相同:如果设置了cookie,Wordpress在第二次刷新之前无法加载适当的Magento语言。

在此期间,我通过每次加载Wordpress时删除cookie来解决这个问题,但这似乎是一个非理想的解决方案。这让我感到非常困惑,即使调用Mage::app静态加载错误的语言,并且被cookie覆盖(下一个负载也是如此)。

EN

回答 3

Stack Overflow用户

发布于 2013-08-06 09:37:32

Magento ==> WordPress桥插件在某个时候初始化Magento。此时,可以通过指定要加载哪个Magento或哪个website来加载storeview

这发生在第53行的插件文件: wp-content/plugins/magento-wordpress-integration/mwi.php中,其中有以下代码:

代码语言:javascript
复制
$app = Mage::app(self::getValue('websitecode','base'), 'website');

第一个参数(self::getValue('websitecode','base'))获取要加载的网站的网站代码(简称)。第二个参数指定第一个参数是网站代码,而不是存储代码。

您可以这样重写该行:

代码语言:javascript
复制
if(isset($_SESSION['storeviewcode'])) {
    /**
     *     Loads a particular storeview that you specify in
     * $_SESSION['storeviewcode'].
     */
    $app = Mage::app($_SESSION['storeviewcode'], 'store');
}
else {
    /**
     *     Falls back to default behavior.
     */
    $app = Mage::app(self::getValue('websitecode','base'), 'website');
}

我假设您知道,除了完整性之外,Magento存储视图通常用于翻译,它们具有与它们相关的特定区域设置。

你要做的就是:

  • 找出在加载WordPress事件(钩子)期间;
  • 找出在Magento被加载之前发生的事件;
  • 编写一些用有效的存储代码初始化$_SESSION['storeviewcode']的代码;
  • 将代码附加到适当的事件(钩子);
  • 确保WordPress语言与正确的存储代码相对应;
票数 1
EN

Stack Overflow用户

发布于 2013-08-06 11:44:06

我还不能回答这个问题,但我也不能留下评论。但是,你能向我确认一下你在Magento的管理员区使用过的cookie设置吗?(系统> Config > Web)

票数 1
EN

Stack Overflow用户

发布于 2013-08-06 13:45:14

好的。嗯,Mihai,James (插件作者)和我花了几个小时聊天,并尝试了没完没了的解决方案,但都没有奏效。

无论如何,Magento始终使用cookie值覆盖任何手动请求的区域设置。

问题是,直到随后重新加载,才会读取正确的cookie值。

我的最初解决方案,如编辑,是在每次加载Wordpress (不理想)时取消cookie设置,并通过Mage::app手动调用区域设置。

最后,我决定从PHP的角度来看它,而不是Magento/WP,因为Mihai提到了在PHP中会话/cookie实现是多么令人沮丧,并遇到了这样的一个线程:http://www.webmasterworld.com/php/4332059.htm

最后,这只是一个简单的补充:

$_COOKIE['store'] = 'new_locale'

setcookie(...)之后,确保当前cookie变量与second匹配,而不需要第二个页面加载。这段代码是通过add_action('muplugins_loaded', 'set_store_cookie');连接到Wordpress上的,这是Wordpress动作顺序中最早可能的。

最终没有必要对Magento、Wordpress或WPI插件进行修改。

虽然它不能解决Magento为什么要用cookie覆盖手工应用程序调用的问题,但它现在终于正常工作了。看起来,Magento:https://gist.github.com/Vinai/1205913实际上存在一个bug --尽管这种差异也没有纠正这种行为。

没完没了的感谢米海和詹姆斯,这是一个痛苦的问题,试图解决。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18068999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档