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);