我已经使用 Magento 1.13 代码几个小时了,但我无法理解他们对 URL 重写所做的工作。我希望对此进行研究的人可以为我指明正确的方向。
我注意到 core_url_rewrite 不再被使用(或者至少默认情况下它是空的,并且我添加的任何新产品和类别都没有反映在 core_url_rewrite 表中)。相反,它们被添加到新的 enterprise_url_rewrite 表中。
这很简单,但是,我注意到添加了很多其他表(即 enterprise_url_rewrite_category_cl、enterprise_url_rewrite_product_cl、enterprise_url_rewrite_redirect_cl、enterprise_url_rewrite_redirect_rewrite)。我使用 MySQL Workbench 对表进行了逆向工程,并得出了以下 EER 图:
上面的 EER 图没有显示 enterprise_url_rewrite_redirect 和 enterprise_url_rewrite 之间的联系,但是(至少我假设)在 enterprise_url_rewrite_redirect_rewrite 表中管理的两者之间存在关系。我的问题是关于其他表的作用。它们每个都有一个 version_id 作为主键和一个 redirect_id 或 entity_id 外键。我假设的 enterprise_url_rewrite_redirect_cl 外键与 enterprise_url_rewrite_redirect 主键有关。
我的第一个问题是这张桌子的目的是什么?我看不出它有什么帮助。我对该表进行了项目范围的搜索,但找不到它的创建位置,更不用说使用了。如果这个问题的答案很明显,请原谅我。
我的第二个问题与 enterprise_url_rewrite_product_cl 和 enterprise_url_rewrite_category_cl 表有关。看来这两个表都有entity_ids。我想知道是否有人知道这些 entity_ids 可能指的是什么?
我还从代码中注意到访问模型的典型方式已经改变。例如,Enterprise/AdminGws/Model/Controllers.php 的第 781 行代码更改如下:
从:
$object = Mage::getModel('core/url_rewrite')->load($id);
到:
$object = Mage::getSingleton('core/factory')->getUrlRewriteInstance()->load($id);
现在,来自 Mage_Core_Model_Factory:
const XML_PATH_URL_REWRITE_MODEL = 'global/url_rewrite/model';
. . .
public function getUrlRewriteInstance()
{
return $this->getModel($this->getUrlRewriteClassAlias());
}
. . .
public function getUrlRewriteClassAlias()
{
return (string)$this->_config->getNode(self::XML_PATH_URL_REWRITE_MODEL);
}
我们看到 XML Path 是 global/url_rewrite/model。如果我们查看匹配的 Config.xml:
<url_rewrite>
<model>core/url_rewrite</model>
</url_rewrite>
最后,查看Mage/Core/Model/Url/Rewrite.php,我发现了以下两个函数:
/**
* Implement logic of custom rewrites
. . .
* @deprecated since 1.7.0.2. Refactored and moved to Mage_Core_Controller_Request_Rewrite
*/
公共函数重写(...){。. .
和
/**
* Prepare and return QUERY_STRING
. . .
* @deprecated since 1.7.0.2. Refactored and moved to Mage_Core_Controller_Request_Rewrite
*/
protected function_getQueryString() { . . .
评论似乎暗示应该存在一个 Mage_Core_Controller_Request_Rewrite 类,但在 Mage/Core/Controller/Request 中没有这样的类。我能够发现 Magento 团队可能指的是 Mage_Core_Model_Url_Rewrite_Request (我猜他们只是忘记更改评论。我试图在调试器中运行它,但由于我不知道的原因它不断崩溃。我不断收到以下日志:
a:5:{i:0;s:77:"Invalid method Mage_Core_Controller_Varien_Front::_getRequestPath(Array
(
)
)";i:1;s:611:"#0 xdebug://debug-eval(1): Varien_Object->__call('_getRequestPath', Array)
1 xdebug://debug-eval(1): Mage_Core_Controller_Varien_Front->_getRequestPath()
2 C:\user\emil\projects\magento\magento\app\code\core\Mage\Core\Controller\Varien\Front.php(1 67): Mage_Core_Controller_Varien_Front::dispatch()
3 C:\user\emil\projects\magento\magento\app\code\core\Mage\Core\Model\App.php(354): Mage_Core_Controller_Varien_Front->dispatch()
4 C:\user\emil\projects\magento\magento\app\Mage.php(683): Mage_Core_Model_App->run(Array)
5 C:\user\emil\projects\magento\magento\index.php(87): Mage::run('', 'store')
6 {main}";s:3:"url";s:14:"/magento/admin";s:11:"script_name";s:18:"/magento/index.php";s:4:"skin";s:7:"default";}
只有当我进入调试模式时才会出现上述问题。总的来说,我试图通过代码来尝试理解新的重写是如何工作的,但最终空手而归并被卡住了。我搜索了谷歌并没有想出太多。我想知道是否有人研究过 Magento EE 的新版本如何用于 URL 重写?
谢谢你。
埃米尔