Magento getProductUrl()没有返回正确的URL(随机?)

时间:2012-07-30 14:53:30

标签: magento magento-1.5

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

正确的网址如下: /laptop-bag.html 或者是错误的(它有效,但当然不是重写URL): /目录/产品/视图/ ID / 825 / S /笔记本电脑包/类别/ 16 /

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

为什么会发生这种情况?

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

4 个答案:

答案 0 :(得分:15)

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

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

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

答案 1 :(得分:6)

尝试在收集时添加此内容

$collection->addUrlRewrite();

它帮助了我。

答案 2 :(得分:4)

生成了错误的网址,因为它无法找到重写的网址。 也许是因为不正确的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/

可以在名为core_url_rewrite的表中找到正确的url重写(包括有关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;
}

答案 3 :(得分:3)

$id = 10;
Mage::app()->setCurrentStore('admin');
$url = Mage::helper('catalog/product')->getProductUrl($id);