2016-02-19 33 views
1

新手Magento的开发商在这里,但我会尽量保持它的结构。Magento的MultiStore的产品视图类URL重写

网站架构:

  • Magento的1.8
  • 多店(1号店1语言)
  • 由过去的开发商轻轻改装成的(我想大多数,如果不是所有的核心文件是在一个原始的,未触及的条件)。在URL
  • DressCode Magento的模板
  • 商店代码 - >真
  • 搜索引擎友好的URL - >真

问题:

当在一个单一的产品视图(即商店。 com/en/shoes/guess-green-shoes.html)标题中的商店切换器不会生成正确的网址。 IE浏览器。如果我点击了德国的交换机,那么地址是“store.com/de/shoes/guess-grone-schuhe.html”,但它应该是“store.com/de/schuhe/guess-grone-schuhe。 HTML”。

暗示这意味着类别蛞蝓是没有得到翻译,我不知道我应该如何采取行动。任何来自更有经验的球员的建议?

我曾尝试:

经过URL重写管理,那里的情况如下

请求路径目标路径
correct_de_link X
correct_en_link X
correct_it_link X

correct_xx_link表示链接正常,类别为an d产品名称翻译。因此我认为这是正确的。

我还计算过,我会改变的核心类Mage_Core_Controller_Request_Http-> setPathInfo();或Mage_Core_Model_Store-> getCurrentUrl();但我认为这是没有必要的,只会掩盖这个问题。

如果我没有得到一个答案,我会做:

我会解析类的字符串与PHP的爆炸()函数,然后通过名称和店铺ID存储之间它翻译。然后我会手动将其添加到商店切换器。

回答

0

黑家伙

所以我更深入地挖掘问题,发现它是由类Mage_Core_Model_Url_Rewrite_Request的_rewriteDb功能引起的。

即__from_store获取变量是“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; 
      }