Magento getProductUrl() не возвращает правильный URL (случайно?)

Я использую Magento 1.5.0.1, а функция getProductUrl(), используемая в блоках перекрестной продажи и последующей продажи на странице продукта, использует разные форматы URL.

Либо правильный URL-адрес, например: /laptop-bag.html, либо неправильный (ну, он работает, но, конечно, это не URL для перезаписи): /catalog/product/view/id/825/s/ Laptop-bag/category/16/

Иногда блоки перекрестной продажи и продажи возвращают правильный URL, иногда оба используют более длинную версию, а в некоторых случаях один использует правильную, а другой использует длинную версию??

Есть идеи, почему это происходит?

Я уже запустил восстановление базы данных magento, переиндексировал и обновил / очистил все кэши.

4 ответа

Решение

Пытаться $product->getUrlPath() вместо $product->getProductUrl()

ОБНОВЛЕНИЕ: согласно приведенному ниже комментарию @jordan314, Magento рекомендует клиентам EE:

Атрибут url_path больше не используется по состоянию на 1.13, но все еще доступен для обратной совместимости, и Magento не будет присваивать ему значение для новых продуктов, поэтому его не рекомендуется продолжать использовать. Возможно, вы могли бы попробовать использовать $product->getProductUrl() вместо этого.

Попробуйте добавить это, когда вы получаете свою коллекцию

$collection->addUrlRewrite();

Это помогло мне.

Создан неверный 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;
}
$id = 10;
Mage::app()->setCurrentStore('admin');
$url = Mage::helper('catalog/product')->getProductUrl($id);
Другие вопросы по тегам