¿Cuál es la forma más eficiente de obtener una URL de producto dada su ID? En algunos lugares de nuestro código tenemos cosas como, por ejemplo Mage::getModel('catalog/product')->load($id)->getProductUrl()
, para obtener la URL del producto, dada la cantidad de eventos, etc. asociados con un producto, esto parece un desperdicio, ¿existe un método más simple? La capacidad de especificar también una identificación de categoría sería buena.
Además, ¿existe un método eficiente para hacer lo mismo para un solo atributo de un producto como el nombre?
product
magento-1
url
performance
best-practice
Peter O'Callaghan
fuente
fuente
Respuestas:
Es interesante saber si podemos obtener la URL del producto sin cargar el producto completo. Lamento responder su pregunta adicional y no la pregunta principal, ya que tampoco estoy seguro de si podemos obtenerla :)
Para obtener un solo atributo sin cargar el producto completo, puede usarlo
getAttributeRawValue()
si está usando Magento CE versión 1.6+Mage::getResourceModel('catalog/product')->getAttributeRawValue($productId, 'attribute_code', $storeId);
Según el comentario de @ philwinkle a continuación, aquí hay un código más optimizado:
ACTUALIZACIÓN: Obtenga la URL del producto por ID sin cargar el producto completo:
fuente
getResourceSingleton
lugar. $ storeId no tiene que ser una identificación, también puede ser unMage_Core_Model_Store
objeto, por lo que puede usar enMage::app()->getStore()
línea para acelerar las cosas.url_key
esto puede no funcionar porque Magento creará una reescritura de url diferente de la url_keyCreo que sería beneficioso hacer esto a través de una colección. Si no necesita la información completa del producto, puede cargarla a través de una colección y, por lo tanto, solo cargar la información que necesita. El código sería el siguiente.
Nota:
addUrlRewrite
para que pueda obtener la URL del producto más adelante, esto también puede tomar un ID de categoría como parámetro, sin esto la URL no contendría la categoría.Todavía terminas llamando al
getProductUrl()
que termina usandoMage_Catalog_Model_Product_Url
, pero esto solo necesita el id, request_path y la clave de url, por lo que debería funcionar sin el producto completo.fuente
Supongo que la forma más eficiente de obtener una URL reescrita de productos (sin cargar el producto) es mirar directamente en el talbe de reescritura de URL.
Para obtener la ruta de categoría completa, use
Editar: probado para "url_key", para otros atributos
getAttributeRawValue
debe encajar.getRequestPathByIdPath
getAttributeRawValue
load(productId)
fuente
Encontré esta pregunta, preguntándome lo mismo. Y en caso de que alguien más necesite esto alguna vez, publicaré mis propios hallazgos aquí.
Encontré dos métodos para obtener la URL del producto sin cargar el producto completo. Como estaba trabajando en un servidor lento, necesitaba encontrar el método de carga más rápido.
El primer método:
El primero es una colección de productos basada en la identificación del producto:
El segundo método:
El segundo método, usando el método de Kalpesh Metha, sería este código:
Para este método, puede usar
'url_key'
o'url_path'
. Sin embargo, no he descubierto la diferencia.La diferencia entre los métodos:
El primer método lleva un poco más de tiempo (aproximadamente 15% de tiempo extra). Sin embargo, el segundo método solo devuelve la parte final de la URL. Esto significa que si la tienda usa la categoría en la URL, no funcionará, ya que esa parte no se muestra. Este fue el caso en la tienda en la que estaba trabajando.
fuente