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