我的magento商店有3种语言。例如,如果有人从“英语”商店视图中链接了我的产品,并且我在“西班牙语”商店视图中,则该产品会返回404错误。
到目前为止,在我的调查中我找到了this blog,但我目前正试图了解该代码的去向。我理解它位于/app/code/core/Mage/Core/Model/Url/Rewrite.php
文件中,但我无法弄清楚该文件的确切位置应该添加该代码段。
我甚至不确定能解决我的问题。
编辑:
好的,我找到了这个链接:http://freegento.com/doc/db/d5d/_url_2_rewrite_8php-source.html
根据这个,我的文件应该有类似于我在上面的博客中看到的内容,不幸的是,我的文件中的函数loadByRequestPath
是不同的,它是这样的:
/** * Load rewrite information for request * If $path is array - we must load possible records and choose one matching earlier record in array * * @param mixed $path * @return Mage_Core_Model_Url_Rewrite */ public function loadByRequestPath($path) { $this->setId(null); $this->_getResource()->loadByRequestPath($this, $path); $this->_afterLoad(); $this->setOrigData(); $this->_hasDataChanges = false; return $this; }
答案 0 :(得分:1)
好的,那很快!我通过将文件loadByRequestPath
中的/app/code/core/Mage/Core/Model/Url/Rewrite.php
替换为此来解决了我的问题:
public function loadByRequestPath($path)
{
$this->setId(null);
if (is_array($path)) {
foreach ($path as $pathInfo) {
$this->load($pathInfo, 'request_path');
if (!$this->getId() && !isset($_GET['___from_store'])) {
$db = Mage::getSingleton('core/resource')->getConnection('default_read');
$result = $db->query('select store_id from core_url_rewrite WHERE request_path = "' . $pathInfo . '"');
if ($result) {
$storeIds = array();
if($row = $result->fetch(PDO::FETCH_ASSOC)) {
$storeId = $row['store_id'];
$storeCode = Mage::app()->getStore($storeId)->getCode();
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://" . $_SERVER['HTTP_HOST'] . "/" . $pathInfo . "?___store=" . $storeCode);
exit();
}
}
}
}
}
else {
$this->load($path, 'request_path');
}
return $this;
}
如果您在升级Magento时不想要任何问题,请不要忘记制作本地副本。