2012-07-30 11 views
8

Uso 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.Magento getProductUrl() no devuelve la URL correcta (¿aleatorio?)

O bien la URL correcta como: /laptop-bag.html O el mal (bien que funciona, pero por supuesto no es la reescritura de URL): // Catálogo de productos/view/id/825/s/laptop-bag/category/16/

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 la versión correcta y la otra usa la versión larga. ?

¿Alguna idea de por qué sucede esto?

Ya he ejecutado una reparación de base de datos magento, reindexada, y actualiza/descartó todas las cachés.

Respuesta

13

Trate $product->getUrlPath() en lugar de $product->getProductUrl()

ACTUALIZACIÓN: Según el comentario de más abajo @ jordan314, Magento recomienda a EE clientes:

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

+0

¡Gracias! Puedo ver lo que sucedió ahora, esencialmente sucede cuando estás viendo un producto de una categoría y los productos relacionados/de ventas adicionales no existen en la misma categoría. Al usar el urlpath, lo obtiene desde la raíz. ¡Funciona de maravilla! – cappuccino

+0

Gracias Kalpesh, tenía el mismo problema, había muchas excavaciones y ¡eso lo encontré! ¡¡brillante!! –

+0

@AdamLesniak Me alegra ayudar :) – Kalpesh

3

Se genera la URL incorrecta porque no puede encontrar la URL reescrita. Tal vez se deba a que store_id incorrecto. por ejemplo:

$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 correcto se puede encontrar en la tabla llamada core_url_rewrite (incluida la información sobre el store_id)

Si se encontró valor de coincidencia en core_url_rewrite, generará 'la url correcta' de lo contrario concat la clave de producto + url + category_id

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

Pruebe agregar este cuando usted está consiguiendo su colección

$collection->addUrlRewrite(); 

Me ha ayudado.

+0

Esto funcionó para mí también –

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

Su respuesta ciertamente vale una pequeña explicación. [incluyendo una explicación] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) realmente ayuda a mejorar la calidad de su publicación. –

Cuestiones relacionadas