12

我正在使用 Magento 1.5.0.1,并且产品页面上的交叉销售和追加销售块中使用的 getProductUrl() 函数抛出了不同的 URL 格式。

要么是正确的 URL,例如:/laptop-bag.html,要么是错误的 URL(它工作得很好,但当然不是重写 URL):/catalog/product/view/id/825/s/laptop-bag/category/ 16/

有时交叉销售和向上销售块都返回正确的 URL,有时都使用较长的版本,在某些情况下,一个使用正确的,另一个使用长的版本?

任何想法为什么会发生这种情况?

我已经运行了一个 magento 数据库修复、重新索引并刷新/刷新了所有缓存。

4

4 回答 4

18

尝试$product->getUrlPath()代替$product->getProductUrl()

更新:根据@jordan314 的以下评论,Magento 向 EE 客户推荐:

url_path 属性从 1.13 开始不再使用,但仍可用于向后兼容,并且 Magento 不会为新产品分配值,因此不建议继续使用它。也许您可以尝试使用 $product->getProductUrl() 代替。

于 2012-07-30T21:09:41.527 回答
7

生成不正确的url是因为找不到重写的url。可能是因为store_id不正确造成的。例如:

$id = 290;
Mage::app()->setCurrentStore('default');
echo "store_id: ".Mage::app()->getStore()->getId()."<br>";
$url = Mage::helper('catalog/product')->getProductUrl($id);
echo $url."<br>";

//change store id
Mage::app()->setCurrentStore('admin');
echo "store_id: ".Mage::app()->getStore()->getId()."<br>";
$url = Mage::helper('catalog/product')->getProductUrl($id);
echo $url."<br>";

结果:

store_id: 1
http://local.com/surestep-pro-diabetic-test-strips-50-strips-professional-care.html
store_id: 0
https://local.com/index.php/catalog/product/view/id/290/s/surestep-pro-diabetic-test-strips-50-strips-professional-care/

正确的 url 重写可以在名为 core_url_rewrite 的表中找到(包括有关 store_id 的信息)

如果在 core_url_rewrite 中找到匹配值,它将生成“正确的 url”,否则它将连接 product_id + url key + category_id

$routePath = 'catalog/product/view';
$routeParams['id']  = $product->getId();
$routeParams['s']   = $product->getUrlKey();
if ($categoryId) {
    $routeParams['category'] = $categoryId;
}
于 2012-07-30T16:25:53.410 回答
7

当你得到你的收藏时尝试添加这个

$collection->addUrlRewrite();

它帮助了我。

于 2016-03-30T06:03:23.690 回答
4
$id = 10;
Mage::app()->setCurrentStore('admin');
$url = Mage::helper('catalog/product')->getProductUrl($id);
于 2016-09-16T11:43:52.657 回答