3

我有 3 个在线商店在单个 Magento 安装上运行。

他们共享超过 10.000 多个 SKU(我已将它们设置为简单产品),但在前端可见的唯一产品是每个商店的分组产品(与 SKU 相关联)。

因此,我的 URL 重写表非常繁重,在检查 Varien Profiler 时,我遇到了“mage::dispatch::routers_match”,这需要超过 5 秒才能完成。我想这是因为它是一张很大的桌子。所以这让我想到了我的问题:

如何指定我不想让 Magento 重写的 URL。无论如何我可以告诉它不要重写简单的产品 URL 吗?仅此一项就会将桌子降低到1/3。

PS:Magento CE 1.7.0.2

编辑:

感谢 Tobias 为我指明了正确的方向。我去了 app/code/core/Mage/Catalog/Model/Url.php 并将函数编辑refreshProductRewrites为:

foreach ($products as $product) {
        if($product->getTypeId() == "simple"){
            continue;
        }
        else {
        $this->_refreshProductRewrite($product, $this->_categories[$storeRootCategoryId]);
        foreach ($product->getCategoryIds() as $categoryId) {
            if ($categoryId != $storeRootCategoryId && isset($this->_categories[$categoryId])) {
                if (strpos($this->_categories[$categoryId]['path'], $storeRootCategoryPath . '/') !== 0) {
                    continue;
                }
                $this->_refreshProductRewrite($product, $this->_categories[$categoryId]);
            }
        }
    }
    }
4

2 回答 2

6

存储在其中的产品的集合在refreshProductRewrites中core_url_rewrite生成。Mage_Catalog_Model_Url

你可以重写这个类并实现你自己的实现,它只存储分组的产品。

于 2013-02-05T15:56:53.617 回答
1

另一种解决方案是忽略具有空 url 键的产品。

   protected function _refreshProductRewrite(Varien_Object $product, Varien_Object $category)
   {
   if ($category->getId() == $category->getPath()) {
   return $this;
   }
   if ($product->getUrlKey() != '') {

   $urlKey = $this->getProductModel()->formatUrlKey($product->getUrlKey());

您可以通过(检查属性 id)清除简单产品的 url 键:

DELETE FROM catalog_product_entity_varchar WHERE entity_id IN (SELECT entity_id FROM catalog_product_entityWHERE type_id='simple' AND attribute_id='97');

于 2013-05-30T14:03:43.900 回答