Magento一致的产品网址

时间:2010-12-17 00:09:08

标签: php url magento

Magento似乎有许多不同的格式适用于产品网址,包括:

/catalog/product/view/id/123/s/my-product-slug/
/my-product-slug/
/top-category/sub-category/my-product-slug/
etc...

我想只使用其中一个,总是,这是第三个,在产品slug之前将所有父类别slug连接在一起。有没有办法将Magento配置为仅使用其中一种格式?

使用像getProductUrl()这样的方法似乎会返回不同的结果,具体取决于您所使用的页面/上下文,有人可以告诉我为什么会这样吗?

一般来说,有没有人知道任何文档或博客文章等,这可能有助于我更好地理解Magento中的路由?

谢谢!

3 个答案:

答案 0 :(得分:3)

clockworkgeek非常接近并引导我回答......

我尝试使用$product->setCategoryId()并发现$product->getCategoryId()没有返回任何内容,并且Mage_Catalog_Model_Product_Url::getUrl方法取决于产品模型上的getCategoryId方法来弄清楚产品的URL。结果getCategoryId在产品模型中明确定义(不是像我假设的魔术方法),它返回Mage::registry('current_category')的值。所以我基本上注册和注册了'current_category'以满足我的需求。

但这仍然让我的问题部分无法回答。我想出了如何破解并获得我想要的URL,但从技术上来说,凌乱的/catalog/product/view/id/123/s/my-product-slug/类型的URL仍然有效,而且我宁愿所有的URL变种路由到类别的URL。能够在Magento中定义单一的规范URL样式会很棒。如果有人对此有任何进一步的了解,请告诉我!

答案 1 :(得分:2)

要强制使用该网址,我非常确定您的产品必须包含类别ID。

$product->setCategoryId(7)->getProductUrl();

当然7只是一个例子。产品可以属于许多类别,因此您必须决定如何选择一个产品,可能是假定第一个。

list($categoryId,) = $product->getCategoryIds();
$product->setCategoryId($categoryId)->getProductUrl();

答案 2 :(得分:0)

我不确定这是否是你需要的,现在无法检查但是试试这个:

$product_url = "http://www.domain.com/".$product->getUrlPath();