新的Magento1.13 EE URL如何重写/新数据库表如何相互关联?

Emi*_*art 11 url-rewriting magento magento-1.13

我一直在使用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);
Run Code Online (Sandbox Code Playgroud)

至:

$object = Mage::getSingleton('core/factory')->getUrlRewriteInstance()->load($id);
Run Code Online (Sandbox Code Playgroud)

现在,来自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);
}
Run Code Online (Sandbox Code Playgroud)

我们看到XML Path是global/url_rewrite/model.如果我们查看匹配的Config.xml:

    <url_rewrite>
        <model>core/url_rewrite</model>
    </url_rewrite>
Run Code Online (Sandbox Code Playgroud)

最后,查看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
 */
Run Code Online (Sandbox Code Playgroud)

public function rewrite(...){...

/**
 * Prepare and return QUERY_STRING
. . .
 * @deprecated since 1.7.0.2. Refactored and moved to Mage_Core_Controller_Request_Rewrite
 */
protected function_getQueryString() { . . .
Run Code Online (Sandbox Code Playgroud)

注释似乎暗示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";}
Run Code Online (Sandbox Code Playgroud)

只有进入调试模式时才会出现上述问题.总的来说,我试图通过代码来尝试理解新的重写是如何工作的,但最终空手而归并陷入困境.我搜索谷歌并没有拿出太多东西.我想知道是否有人研究过新版Magento EE如何用于URL重写呢?

谢谢.

埃米尔

gia*_*our 1

很难回答您的问题,因为新的企业 URL 重写模块已经发生并且仍在发生非常重大的变化。预计下一版本 (1.13.0.2) 会出现稳定版本,但在此之前,Magento 核心团队之外的任何人都无法准确告诉您重写模块的外观和工作方式。

不过,新设置的要点是,Magento 现在从 中提取重写enterprise_url_rewrite,并且您识别的所有其他表都用于在重新索引过程中重建它。

所有以 结尾的相关表_cl都是与数据库触发器相关的更改日志。