Jaki jest najskuteczniejszy sposób uzyskania adresu URL produktu, podając tylko jego identyfikator? W kilku miejscach w naszym kodzie mamy takie rzeczy, jak Mage::getModel('catalog/product')->load($id)->getProductUrl()
na przykład uzyskanie adresu URL produktu, biorąc pod uwagę ilość zdarzeń itp. Związanych z produktem, wydaje się to raczej marnotrawstwem, czy istnieje prostsza metoda? Przydałaby się możliwość określenia identyfikatora kategorii.
Ponadto, czy istnieje skuteczna metoda robienia tego samego dla pojedynczego atrybutu produktu, takiego jak nazwa?
product
magento-1
url
performance
best-practice
Peter O'Callaghan
źródło
źródło
Odpowiedzi:
Ciekawe, czy możemy uzyskać adres URL produktu bez ładowania całego produktu. Przepraszam, że odpowiedziałem na dodatkowe pytanie, a nie na pytanie główne, ponieważ nie jestem również pewien, czy możemy je uzyskać :)
Aby uzyskać pojedynczy atrybut bez ładowania całego produktu, możesz go użyć,
getAttributeRawValue()
jeśli używasz Magento CE w wersji 1.6+Mage::getResourceModel('catalog/product')->getAttributeRawValue($productId, 'attribute_code', $storeId);
Zgodnie z komentarzem @ philwinkle poniżej znajduje się bardziej zoptymalizowany kod:
AKTUALIZACJA: Uzyskaj adres URL produktu według identyfikatora bez ładowania całego produktu:
źródło
getResourceSingleton
zamian. $ storeId nie musi być identyfikatorem, może być równieżMage_Core_Model_Store
obiektem, więc możesz użyć funkcjiMage::app()->getStore()
inline, aby przyspieszyć działanie.url_key
może to nie działać, ponieważ Magento utworzy przepisanie innego adresu URL niż url_keyMyślę, że byłoby to korzystne, gdybyśmy to zrobili za pośrednictwem kolekcji. Jeśli nie potrzebujesz pełnych informacji o produkcie, możesz załadować je za pośrednictwem kolekcji, a więc załaduj tylko te informacje, których potrzebujesz. Kod byłby następujący.
Uwaga:
addUrlRewrite
aby później uzyskać adres URL produktu, może on również przyjmować identyfikator kategorii jako parametr, bez tego adres URL nie zawierałby kategorii.Wciąż dzwonisz do tego,
getProductUrl()
co się kończyMage_Catalog_Model_Product_Url
, ale to wymaga tylko identyfikatora, request_path i klucza adresu URL, więc powinno działać bez pełnego produktu.źródło
Wydaje mi się, że najskuteczniejszym sposobem na przepisanie adresu URL produktu (bez ładowania produktu) jest spojrzenie bezpośrednio na przepisanie adresu URL talbe.
Aby uzyskać pełną ścieżkę kategorii, użyj
Edycja: testowane na „url_key”, dla innych atrybutów
getAttributeRawValue
powinny pasować.getRequestPathByIdPath
getAttributeRawValue
load(productId)
źródło
Znalazłem to pytanie, zastanawiam się tak samo. I na wypadek, gdyby ktoś inny tego potrzebował, opublikuję tutaj własne ustalenia.
Znalazłem dwie metody uzyskania adresu URL produktu bez ładowania pełnego produktu. Ponieważ pracowałem na wolnym serwerze, musiałem znaleźć najszybszą metodę ładowania.
Pierwsza metoda:
Pierwsze pobranie to kolekcja produktów na podstawie identyfikatora produktu:
Druga metoda:
Drugą metodą, wykorzystującą metodę Kalpesh Metha, byłby następujący kod:
Dla tej metody możesz użyć
'url_key'
albo'url_path'
. Nie znalazłem jednak różnicy.Różnica między metodami:
Pierwsza metoda zajmuje nieco więcej czasu (około 15% dodatkowego czasu). Druga metoda zwraca jednak tylko ostatnią część adresu URL. Oznacza to, że jeśli sklep używa kategorii w adresie URL, nie będzie działać, ponieważ ta część nie jest wyświetlana. Tak było w sklepie, nad którym pracowałem.
źródło