一律显示完整的URL,包括产品类别


8

对于我们的Magento网上商店(1.7.0.2),我们正在尝试优化URL结构。我们已经设法改善了某些方面,但是其中一项没有成功。我们想为我们所有的产品使用完整的URL(包括类别)。例如:

  • www.website.com/products/best-products/product
  • 或:类别页面的www.website.com/products/best-products

在浏览类别和使用面包屑时,此方法工作正常,但在搜索时则无效。然后,它总是使用www.website.com/product作为URL,这很可能是因为产品可以属于多个类别,并且它不知道在搜索结果中使用哪个类别。

有办法强制吗?要使其以某种方式使用“第一”类别,甚至使其使用您可以选择的某些默认类别?我是一名开发人员,所以我愿意对代码进行更改,但前提是没有其他/更可靠的方法。欢迎任何提示或技巧,在此先多谢!

Answers:


4

您想要的东西无法实现-afaik。

问题是magento计划使用“许多类别的产品”。现在的问题是magento不喜欢任何类别,而是根本不显示任何类别。

使用类别,当您单击类别时,这是唯一使用类别重写的地方(afaik)。

但是我认为您可以通过修改一点重写系统并确保加载一个类别重写而不是不包含所有类别的重写来实现您想要的。

然后,下一个问题是,您必须确保,每次相同的规范网址,Google仍然会获取,否则您将遇到重复内容的问题...

我想到的最后一个想法是:我不确定,从SEO角度来看这是否是个好主意。我不是SEO专家,但有人对我说,网址越短越好。


1

产品网址是从以下位置打印的:
Mage_Catalog_Model_Product::getProductUrl
该方法正在检查网址是否必须包含类别,使用Mage::registry('current_category')

但集合通常会在唯一查询中加载URL重写(检查方法Mage_Catalog_Model_Resource_Product_Collection::addUrlRewrite($categoryId = '')
,然后Mage_Catalog_Model_Product::getProductUrl从$ product数据中使用该“ request_path”。

因此,可能的窍门可能是这样的:

        // if we are in search results
    if( ! Mage::registry('current_category')){
        $myDesiredCategoryId = current($product->getCategoryIds()); // you could just use the first category registered with this product or define some other strategy
        $canonicalCategory = Mage::getModel('catalog/category')->load($myDesiredCategoryId);
        Mage::register('current_category', $canonicalCategory);
        $product->setRequestPath(null);
        $productUrlWithCategory = $product->getUrlModel()->getUrl($product);
        Mage::unregister('current_category');
    }

这不是最快的方法(集合中的每个产品现在都需要在单独的查询中加载URL重写),但是如果您正在寻找一种快速的解决方案,那可能是最简单的方法



-1

我非常确定您可以通过系统配置设置来实现Use Categories Path For Product URLs。可以在下面找到System->Configuration->Catalog->Catalog->Search Engin Optimization。设置此设置后,我认为您需要重新索引。

希望这可以帮助。


不会,仅当设置了当前类别时此设置才起作用(因此,如果要从类别页面打开产品)。
西蒙(Simon)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.