我使用Magento WordPress集成插件从一个平行的Magento安装调用块,以便从Magento提取适当的菜单块。
这是非常好的工作,除了一件事,网站是多语种。
我在Wordpress中插入了一些代码,以便当语言发生变化时,它将存储cookie更改为适当的语言,以确保Magento以正确的语言加载菜单。
由于某种原因,它需要在加载正确的语言之前单击两次。我可以在web检查器中看到,“商店”cookie设置为正确的语言,但在这种情况发生之前,插件似乎正在加载Magento内容。
除了分离菜单并让它们在系统之间手动编码之外,我真的不知道该怎么办。我在讨论中与插件的实际开发人员在一起,但他自己却想不出一个解决方案(不幸的是,当我要求提供一些支持的可能性时,讨论被终止了)。
在任何情况下,如果有人知道如何做到这一点,我会非常感激,因为似乎没有人找到了一个解决方案,我可以想象是一个相当典型的设置。
--
编辑:这是我写到目前为止,并试图开始工作。它从URL中提取语言字符串,然后设置store cookie。通过查看插件API/动作参考,这是在加载顺序中发生的第一件事。我确实有一个必须使用的插件,可以确认它的工作,但我也尝试过连接到registered_taxonomy,post类型等.由于一些奇怪的原因,它仍然无法工作,直到第二次点击,即使它发生了很久之前,主题或常规插件加载。
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覆盖(下一个负载也是如此)。
发布于 2013-08-06 09:37:32
Magento ==> WordPress桥插件在某个时候初始化Magento。此时,可以通过指定要加载哪个Magento或哪个website来加载storeview。
这发生在第53行的插件文件: wp-content/plugins/magento-wordpress-integration/mwi.php中,其中有以下代码:
$app = Mage::app(self::getValue('websitecode','base'), 'website');第一个参数(self::getValue('websitecode','base'))获取要加载的网站的网站代码(简称)。第二个参数指定第一个参数是网站代码,而不是存储代码。
您可以这样重写该行:
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存储视图通常用于翻译,它们具有与它们相关的特定区域设置。
你要做的就是:
$_SESSION['storeviewcode']的代码;发布于 2013-08-06 11:44:06
我还不能回答这个问题,但我也不能留下评论。但是,你能向我确认一下你在Magento的管理员区使用过的cookie设置吗?(系统> Config > Web)
发布于 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 --尽管这种差异也没有纠正这种行为。
没完没了的感谢米海和詹姆斯,这是一个痛苦的问题,试图解决。
https://stackoverflow.com/questions/18068999
复制相似问题