web-dev-qa-db-ja.com

Magento getProductUrl()が正しいURLを返していません(ランダム?)

Magento 1.5.0.1を使用していますが、商品ページのクロスセルブロックとアップセルブロックで使用されているgetProductUrl()関数がさまざまなURL形式をスローしています。

/laptop-bag.htmlのような正しいURLまたは間違ったURL(うまく機能しますが、もちろんリライトURLではありません):/ catalog/product/view/id/825/s/laptop-bag/category/16 /

クロスセルブロックとアップセルブロックの両方が正しいURLを返す場合もあれば、両方とも長いバージョンを使用する場合もあります。また、一方が正しいバージョンを使用し、もう一方が長いバージョンを使用する場合もあります。

なぜこれが起こっているのか考えはありますか?

私はすでにmagentoデータベースの修復を実行し、インデックスを再作成し、すべてのキャッシュを更新/フラッシュしました。

12
cappuccino

$product->getUrlPath()の代わりに$product->getProductUrl()を試してください

更新:@ jordan314による以下のコメントによると、MagentoはEEのお客様に推奨しています:

rl_path属性は1.13で使用されなくなりましたが、下位互換性のために引き続き使用できます。Magentoは新製品に値を割り当てないため、引き続き使用することはお勧めしません。おそらく、使用してみてください。代わりに$ product-> getProductUrl()。

16
Kalpesh

コレクションを取得するときにこれを追加してみてください

$collection->addUrlRewrite();

それは私を助けてくれました。

6
karick

書き換えられた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キー+ category_idが連結されます。

$routePath = 'catalog/product/view';
$routeParams['id']  = $product->getId();
$routeParams['s']   = $product->getUrlKey();
if ($categoryId) {
    $routeParams['category'] = $categoryId;
}
5
ivantedja
$id = 10;
Mage::app()->setCurrentStore('admin');
$url = Mage::helper('catalog/product')->getProductUrl($id);
3
test