新手Magento开发人员在这里,但我会尽量保持结构。
网站架构:
- 马真托 1.8 多商店(1 种
- 语言的 1 家商店)
- 由上一个开发人员进行了轻微修改(我认为大多数(如果不是全部)核心文件都处于原始、未受影响的状态)。
- 着装规范模板
- 将代码存储在 URL 中 -> true
- SEO 友好的网址 ->真实
问题:
在单个产品视图(即 store.com/en/shoes/guess-green-shoes.html)下,标题中的商店切换器不会生成正确的URL。即。如果我点击德语开关,那么地址是"store.com/de/shoes/guess-grone-schuhe.html",但它应该是"store.com/de/schuhe/guess-grone-schuhe.html"。
隐含地这意味着类别 slug 没有得到翻译,我不知道我应该如何行动。更有经验的玩家有什么建议吗?
我尝试过的:
检查URL重写管理,其中情况如下
请求路径 目标路径
correct_de_link X
correct_en_link X
correct_it_link X
correct_xx_link表示链接正常,类别和产品名称已翻译。因此,我认为这是正确的。
我还认为我会更改核心类Mage_Core_Controller_Request_Http->setPathInfo(); 或 Mage_Core_Model_Store->getCurrentUrl();但我认为这是不必要的,只会掩盖调查。
如果我没有得到答案,我会怎么做:
我将使用 php explode() 函数解析类别字符串,然后按名称和存储 ID 在商店之间翻译它。然后我会手动将其添加到商店切换器中。
嘿嘿伙计们
所以我更深入地研究了这个问题,发现它是由类Mage_Core_Model_Url_Rewrite_Request中的_rewriteDb函数引起的。
即__from_store get变量是"en","lv"..对于不同的商店,Magento核心试图使用此变量来访问商店数组,但它需要连接到商店代码的商店ID。所以我添加了一行(在" - REWRITE HACK"之间)来解决这个问题,现在一切都按预期工作。
$fromStore = $this->_request->getQuery('___from_store');
if (!$this->_rewrite->getId() && $fromStore) {
$stores = $this->_app->getStores();
// START - REWRITE HACK
$fromStore = Mage::app()->getStore( $fromStore )->getId();
// END - REWRITE HACK
if (!empty($stores[$fromStore])) {
/** @var $store Mage_Core_Model_Store */
$store = $stores[$fromStore];
$fromStoreId = $store->getId();
} else {
return false;
}