Quel est le moyen le plus efficace d'obtenir une URL de produit, juste en fonction de son ID? À certains endroits de notre code, nous avons des choses telles que Mage::getModel('catalog/product')->load($id)->getProductUrl()
pour obtenir l'URL du produit, étant donné la quantité d'événements, etc. associés à un produit, cela semble plutôt inutile, existe-t-il une méthode plus simple? La possibilité de spécifier également un identifiant de catégorie serait bien.
De plus, existe-t-il une méthode efficace pour faire la même chose pour un seul attribut pour un produit tel que le nom?
product
magento-1
url
performance
best-practice
Peter O'Callaghan
la source
la source
Réponses:
Intéressant de savoir si nous pouvons obtenir l'URL du produit sans charger le produit entier. Désolé de répondre à votre question supplémentaire et non à la question principale, car je ne sais pas non plus si nous pouvons l'obtenir :)
Pour obtenir un seul attribut sans charger le produit entier, vous pouvez utiliser
getAttributeRawValue()
si vous utilisez Magento CE version 1.6+Mage::getResourceModel('catalog/product')->getAttributeRawValue($productId, 'attribute_code', $storeId);
Selon le commentaire de @ philwinkle ci-dessous, voici un code plus optimisé:
MISE À JOUR: Obtenez l'URL du produit par ID sans charger le produit entier:
la source
getResourceSingleton
place. $ storeId n'a pas besoin d'être un identifiant, il peut aussi être unMage_Core_Model_Store
objet, vous pouvez donc utiliserMage::app()->getStore()
inline pour accélérer les choses.url_key
cela peut ne pas fonctionner car magento va créer une réécriture d'URL différente de la clé urlJe pense qu'il serait avantageux de le faire via une collection. Si vous n'avez pas besoin des informations complètes sur le produit, vous pouvez les charger via une collection et donc uniquement charger les informations dont vous avez besoin. Le code serait le suivant.
Remarque:
addUrlRewrite
afin que vous puissiez obtenir l'URL du produit plus tard, cela peut également prendre un identifiant de catégorie comme paramètre, sans cela, l'URL ne contiendrait pas la catégorie.Vous finissez toujours par appeler le
getProductUrl()
qui finit par utiliserMage_Catalog_Model_Product_Url
, mais cela n'a besoin que de l'id, request_path et de la clé url pour que cela fonctionne sans le produit complet.la source
Je suppose que la façon la plus efficace d'obtenir une URL de produit réécrite (sans chargement de produit) est de regarder directement sur talbe de réécriture d'URL.
Pour obtenir le chemin de catégorie complet, utilisez
Edit: testé pour "url_key", pour d'autres attributs
getAttributeRawValue
devraient convenir.getRequestPathByIdPath
getAttributeRawValue
load(productId)
la source
J'ai trouvé cette question, me posant la même question. Et juste au cas où quelqu'un d'autre en aurait besoin, je posterai mes propres découvertes ici.
J'ai trouvé deux méthodes pour obtenir l'URL du produit sans charger le produit complet. Comme je travaillais sur un serveur lent, je devais trouver la méthode de chargement la plus rapide.
La première méthode:
La première collection de produits est basée sur l'ID du produit:
La deuxième méthode:
La deuxième méthode, utilisant la méthode de Kalpesh Metha, serait ce code:
Pour cette méthode, vous pouvez utiliser
'url_key'
ou'url_path'
. Je n'ai cependant pas découvert la différence.La différence entre les méthodes:
La première méthode prend un peu plus de temps (environ 15% de temps supplémentaire). Cependant, la deuxième méthode ne renvoie que la dernière partie de l'URL. Cela signifie que si la boutique utilise la catégorie dans l'URL, cela ne fonctionnera pas, car cette partie n'est pas affichée. C'était le cas dans la boutique sur laquelle je travaillais.
la source