magento2 product url key rewrite原理
magento2 product url key rewrite原理
分类和产品的url rewrite都在vendor/module-catalog-url-rewrite里。
通过event事件来更新url的。
产品保存的时候,触发MagentoCatalogUrlRewriteObserverProductProcessUrlRewriteSavingObserver.php.
在以下4种情况才执行url rewrite的操作
-
修改url_key的情况下
-
修改产品分类的情况下 (在分类页面->Products in Category删掉对应的产品)
-
修改website的情况下
-
更改visibility的情况下,必须是设置为前台可见
通过这4个条件之一后,不一定会更新url rewrite表。
它接着在后面又验证了catalog_product_entity_varchar表,
通过url_key和产品id,去找有没有记录,
如果当前store id有记录的话 就直接返回 不更新url rewrite表.
如果当前store id有记录的话 就执行下面的代码 更新url rewrite表.
比如
SELECT `e_attr`.`store_id` FROM `catalog_product_entity` AS `e` INNER JOIN `catalog_product_entity_varchar` AS `e_attr` ON e.entity_id = e_attr.entity_id WHERE (e_attr.attribute_id = '119') AND (e.entity_id = '475')
所以,你要想保存更新url rewrite表的话,需要手动删掉catalog_product_entity_varchar里对应的url_key记录。