Was ist die effizienteste Methode, um eine Produkt-URL zu erhalten, wenn nur die ID angegeben wird? An einigen Stellen in unserem Code haben wir Dinge, wie zum Beispiel Mage::getModel('catalog/product')->load($id)->getProductUrl()
, um die URL des Produkts abzurufen. Angesichts der Menge an Ereignissen usw., die mit einem Produkt verbunden sind, scheint dies ziemlich verschwenderisch zu sein. Gibt es eine einfachere Methode? Die Möglichkeit, auch eine Kategorie-ID anzugeben, wäre schön.
Gibt es außerdem eine effiziente Methode, um dasselbe für ein einzelnes Attribut für ein Produkt wie den Namen zu tun?
product
magento-1
url
performance
best-practice
Peter O'Callaghan
quelle
quelle
Antworten:
Interessant zu wissen, ob wir die Produkt-URL abrufen können, ohne das gesamte Produkt zu laden. Tut mir leid, deine zusätzliche Frage und nicht die Hauptfrage zu beantworten, da ich mir auch nicht sicher bin, ob wir sie bekommen können :)
Um ein einzelnes Attribut zu erhalten, ohne das gesamte Produkt zu laden, können
getAttributeRawValue()
Sie Magento CE ab Version 1.6 verwendenMage::getResourceModel('catalog/product')->getAttributeRawValue($productId, 'attribute_code', $storeId);
Nach dem Kommentar von @ philwinkle unten ist hier ein optimierterer Code:
UPDATE: Produkt-URL anhand der ID abrufen, ohne das gesamte Produkt zu laden:
quelle
getResourceSingleton
stattdessen aufrufen . $ storeId muss keine ID sein, es kann auch einMage_Core_Model_Store
Objekt sein, sodass SieMage::app()->getStore()
Inline verwenden können, um die Dinge zu beschleunigen.url_key
dies möglicherweise nicht funktioniert , wenn es mehr als ein Produkt mit demselben gibt, da Magento eine andere URL als url_key erstelltIch denke, es wäre vorteilhaft, dies über eine Sammlung zu tun. Wenn Sie nicht die vollständigen Produktinformationen benötigen, können Sie diese über eine Sammlung laden und nur die benötigten Informationen laden. Der Code wäre wie folgt.
Hinweis:
addUrlRewrite
Damit Sie die Produkt-URL später abrufen können, kann auch eine Kategorie-ID als Parameter verwendet werden. Ohne diese Angabe würde die URL die Kategorie nicht enthalten.Sie rufen immer noch das auf, das letztendlich
getProductUrl()
verwendet wirdMage_Catalog_Model_Product_Url
, aber dies benötigt nur die ID, den Anforderungspfad und den URL-Schlüssel, damit es ohne das vollständige Produkt funktionieren sollte.quelle
Ich denke, der effizienteste Weg, um eine umgeschriebene URL für ein Produkt zu erhalten (ohne dass ein Produkt geladen wird ), besteht darin, direkt auf die URL-Umschreibung zuzugreifen.
Verwenden Sie, um den vollständigen Kategorienpfad abzurufen
Edit: auf "url_key" getestet, damit andere Attribute
getAttributeRawValue
passen sollten.getRequestPathByIdPath
getAttributeRawValue
load(productId)
quelle
Ich habe diese Frage gefunden und mich auch gefragt. Und für den Fall, dass jemand anderes dies benötigt, werde ich meine eigenen Erkenntnisse hier veröffentlichen.
Ich habe zwei Methoden gefunden, um die Produkt-URL abzurufen, ohne das gesamte Produkt zu laden. Da ich auf einem langsamen Server arbeitete, musste ich die schnellste Lademethode finden.
Die erste Methode:
Der erste erhält eine Produktkollektion basierend auf der Produkt-ID:
Die zweite Methode:
Die zweite Methode, die die Methode von Kalpesh Metha verwendet, wäre dieser Code:
Für diese Methode können Sie entweder
'url_key'
oder verwenden'url_path'
. Den Unterschied habe ich allerdings nicht herausgefunden.Der Unterschied zwischen den Methoden:
Die erste Methode benötigt etwas mehr Zeit (ca. 15% mehr Zeit). Die zweite Methode gibt jedoch nur den letzten Teil der URL zurück. Dies bedeutet, dass, wenn der Shop die Kategorie in der URL verwendet, dies nicht funktioniert, da dieser Teil nicht angezeigt wird. Dies war der Fall in dem Geschäft, an dem ich arbeitete.
quelle