Estoy obteniendo una colección de productos de una determinada categoría en una página en algunos sitios diferentes de Magento. Mi código para obtener la colección es:
$category = new Mage_Catalog_Model_Category();
$category->load($id);
$collection = $category->getProductCollection();
$collection->addAttributeToSelect('*');
$collection->addAttributeToFilter('status', 1);
$collection->addFieldToFilter(array(array('attribute'=>'visibility', 'neq'=>"1" )));
$collection->getSelect()->limit(12);
foreach ($collection as $shopProduct) :
echo $shopProduct->getProductUrl();
endforeach;
Mi problema es que en uno de los sitios de Magento que estamos ejecutando ProductUrl()
se busca una URL como http://www.my site.com/catalog/product/view/id/2309/s/shopcat/category/373/
y no más http://www.site.com/shopcat/product-url-key.html
. Pero en todos los otros sitios aparece como lo queremos.
¿Alguien sabe por qué podría ser esto? ¡Gracias! Intenté usarlo getUrlPath()
también, pero esto no devolvió nada. Sé que puedo solucionar esto haciendo algo como <?php echo $this->getBaseUrl().$shopProduct->getUrlKey().".html"; ?>
eso, ¡pero ese método parece un poco ineficiente!
EDITAR 21/03/14: sigo teniendo este problema. Me di cuenta de que getProductUrl()
recupera la URL deseada en algunos archivos de plantilla del sitio, pero no en otros. Por ejemplo, estoy cargando una colección en la página de inicio y me da las URL que quiero. Pero getProductUrl()
no me está dando las URL que quiero con el mismo código en una vista de categoría.
Respuestas:
Intenta obtener la colección así:
En otras palabras, deje que el modelo sepa dar la clave de url en lugar de la url larga y fea con
$collection->addUrlRewrite();
.fuente
Obtener una URL de productos
Potencialmente confuso debido a los 3 métodos que podría utilizar, todos los cuales están en Mage_Catalog_Model_Product:
La mejor manera de explicar es simplemente mostrar los resultados de varias llamadas. Dado un producto cuya clave URL es mondrian-large-coffee-table-set-multicolour en el dominio de http: //made.local, los resultados son:
fuente