我正在使用Magento 1.5.0.1,并且产品页面上的交叉销售和向上销售块中使用的getProductUrl()函数会抛出不同的URL格式。
正确的网址如下: /laptop-bag.html 或者是错误的(它有效,但当然不是重写URL): /目录/产品/视图/ ID / 825 / S /笔记本电脑包/类别/ 16 /
有时交叉销售和向上销售块都返回正确的URL,有时两者都使用较长的版本,在某些情况下,一个使用正确的,另一个使用长版本?
为什么会发生这种情况?
我已经运行了magento数据库修复,重新编制索引,并刷新/刷新了所有缓存。
答案 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);