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

时间:2013-06-07 20:36:08

标签: magento url-rewriting 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图:

enter image description here

上面的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
 */

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() { . . .

评论似乎暗示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重写呢?

谢谢。

了Emil

1 个答案:

答案 0 :(得分:1)

很难回答您的问题,因为新的企业URL重写模块已经历并且仍在进行非常重大的更改。下一个版本(1.13.0.2)预计会有稳定版本,但在此之前,Magento核心团队之外的任何人都无法告诉您完全重写模块的外观和工作方式。

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

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