magento magento-1.5

Magento getProductUrl() no devuelve la URL correcta(¿aleatorio?)



magento-1.5 (4)

Estoy usando Magento 1.5.0.1 y la función getProductUrl () utilizada en los bloques de venta cruzada y de venta directa en la página del producto arroja diferentes formatos de URL.

O bien la URL correcta como: /laptop-bag.html O la incorrecta (bueno, funciona, pero por supuesto no es la URL de reescritura): / catalog / product / view / id / 825 / s / laptop-bag / category / dieciséis/

A veces, los bloques de venta cruzada y de venta directa devuelven la URL correcta, a veces ambos usan la versión más larga, y en algunos casos, uno usa el correcto y el otro utiliza la versión larga.

¿Alguna idea de por qué está pasando esto?

Ya ejecuté una reparación de base de datos magento, reindexé y actualicé / limpié todas las cachés.


Se genera la URL incorrecta porque no puede encontrar la URL reescrita. Tal vez es causado porque store_id incorrecto. p.ej:

$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>";

resultado:

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/

La reescritura de url correcta se puede encontrar en la tabla denominada core_url_rewrite (incluida la información sobre el store_id)

Si encuentra el valor de coincidencia en core_url_rewrite, generará ''la url correcta'', de lo contrario concatárála product_id + url key + category_id

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


Pruebe $product->getUrlPath() lugar de $product->getProductUrl()

ACTUALIZACIÓN: como se indica a continuación por @ jordan314, Magento recomienda a los clientes de EE:

El atributo url_path ya no se usa a partir de 1.13, pero todavía está disponible para compatibilidad con versiones anteriores, y Magento no le asignará un valor para productos nuevos, por lo que no se recomienda continuar usándolo. Quizás podría intentar usar $ product-> getProductUrl () en su lugar.


Intente agregar esto cuando obtenga su colección

$collection->addUrlRewrite();

Me ha ayudado.


$id = 10; Mage::app()->setCurrentStore(''admin''); $url = Mage::helper(''catalog/product'')->getProductUrl($id);