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

cap*_*ino 11 magento magento-1.5

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

要么正确的网址如:/laptop-bag.html或错误的网址(它的确有效,但当然不是重写网址):/ catalog/product/view/id/825/s/laptop-bag/category/16 /

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

任何想法为什么会这样?

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

Kal*_*esh 16

尝试$product->getUrlPath()而不是$product->getProductUrl()

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

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


kar*_*ick 6

当你收集你的收藏时,试着添加这个

$collection->addUrlRewrite();
Run Code Online (Sandbox Code Playgroud)

它帮助了我.


iva*_*dja 5

生成了错误的网址,因为它找不到重写的网址。可能是由于错误的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>";
Run Code Online (Sandbox Code Playgroud)

结果:

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/
Run Code Online (Sandbox Code Playgroud)

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

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

$routePath = 'catalog/product/view';
$routeParams['id']  = $product->getId();
$routeParams['s']   = $product->getUrlKey();
if ($categoryId) {
    $routeParams['category'] = $categoryId;
}
Run Code Online (Sandbox Code Playgroud)