Qual é a maneira mais eficiente de obter um URL de produto, apenas com seu ID? Em alguns lugares do nosso código, temos coisas como Mage::getModel('catalog/product')->load($id)->getProductUrl()
obter o URL do produto, dada a quantidade de eventos, etc. associados a um produto, isso parece um desperdício, existe um método mais simples? A capacidade de também especificar um ID de categoria seria boa.
Além disso, existe um método eficiente para fazer a mesma coisa para um único atributo para um produto como nome?
product
magento-1
url
performance
best-practice
Peter O'Callaghan
fonte
fonte
Respostas:
Interessante saber se podemos obter o URL do produto sem carregar o produto inteiro. Lamento responder à sua pergunta adicional e não à pergunta principal, pois também não tenho certeza se podemos obtê-lo :)
Para obter um único atributo sem carregar o produto inteiro, você pode usar
getAttributeRawValue()
se estiver usando o Magento CE versão 1.6+Mage::getResourceModel('catalog/product')->getAttributeRawValue($productId, 'attribute_code', $storeId);
Conforme o comentário de @ philwinkle abaixo, aqui está o código mais otimizado:
ATUALIZAÇÃO: obtenha o URL do produto por ID sem carregar o produto inteiro:
fonte
getResourceSingleton
. $ storeId não precisa ser um ID, também pode ser umMage_Core_Model_Store
objeto, para que você possa usar oMage::app()->getStore()
inline para acelerar as coisas.url_key
isso pode não funcionar porque Magento vai criar uma reescrita url diferente do url_keyEu acho que seria benéfico fazer isso através de uma coleção. Se você não precisar das informações completas do produto, poderá carregá-las por meio de uma coleção e, portanto, carregar apenas as informações necessárias. O código seria o seguinte.
Nota:
addUrlRewrite
para que você possa obter o URL do produto posteriormente, também pode usar um ID de categoria como parâmetro, sem isso o URL não conteria a categoria.Você ainda está chamando o
getProductUrl()
que acaba usandoMage_Catalog_Model_Product_Url
, mas isso só precisa do id, request_path e da chave da URL, para que funcione sem o produto completo.fonte
Eu acho que a maneira mais eficaz de obter uma URL reescrita de produtos (sem carregar o produto) é olhar diretamente no URL de reescrita de URL.
Para obter o caminho completo da categoria, use
Edit: testado para "url_key", pois outros atributos
getAttributeRawValue
devem caber.getRequestPathByIdPath
getAttributeRawValue
load(productId)
fonte
Eu encontrei essa pergunta, imaginando o mesmo. E, caso alguém precise disso em algum momento, postarei minhas próprias descobertas aqui.
Encontrei dois métodos para obter o URL do produto sem carregar o produto completo. Como eu estava trabalhando em um servidor lento, precisava encontrar o método de carregamento mais rápido.
O primeiro método:
A primeira é uma coleção de produtos com base no ID do produto:
O segundo método:
O segundo método, usando o método de Kalpesh Metha, seria este código:
Para esse método, você pode usar
'url_key'
ou'url_path'
. Ainda não descobri a diferença.A diferença entre os métodos:
O primeiro método leva um pouco mais de tempo (cerca de 15% de tempo extra). O segundo método, no entanto, retorna apenas a parte final do URL. Isso significa que, se a loja usar a categoria no URL, ela não funcionará, pois essa parte não será exibida. Este era o caso na loja em que eu estava trabalhando.
fonte