Budując dodatek do sklepu internetowego Magento, natknąłem się na kilka problemów. W moim dążeniu do jak najszybszego stworzenia kodu nie mogłem zrozumieć dwóch rzeczy.
Mój (odpowiedni) kod jest następujący:
$rc = Mage::getResourceSingleton('catalog/product');
$productName = $rc->getAttributeRawValue($productId, 'name', Mage::app()->getStore());
$productPrice = $rc->getAttributeRawValue($productId, 'price', Mage::app()->getStore());
$productImage = $rc->getAttributeRawValue($productId, 'image', Mage::app()->getStore());
$productUrl = $rc->getAttributeRawValue($productId, 'url_key', Mage::app()->getStore());
Dwie rzeczy, których nie mogę zrozumieć to:
1) Jak mogę pobrać adres URL produktu? url_key
nie zawsze podaje prawidłowy adres URL, ponieważ nie wszystkie sklepy internetowe używają kanonicznych adresów URL lub mają kategorię w adresie URL.
2) Jak mogę uzyskać obraz produktu o ustawionej szerokości / wysokości zamiast pełnego obrazu? Ta ->resize()
funkcja nie działa w tym przypadku po ponownym uruchomieniu (ponieważ zwraca adres URL). Dodano do tego, czy jest możliwe, aby uzyskać Base Image
, Small Image
a Thumbnail
osobno?
Moim głównym celem jest jak najszybsze utrzymanie kodu. Mam tylko identyfikator produktu, ponieważ przeglądam elementy potomne produktu. Nie chcę używać, ->load()
ponieważ zajmuje to znacznie więcej czasu ładowania.
źródło
small_image
. Wygląda na to, że wszystkie małe obrazy zmieniają rozmiar i nie wybiera wariantu o zmienionym rozmiarze. Masz pomysł, jak to rozwiązać? Czy masz również rozwiązanie dotyczące adresu URL produktu?źródło
Wypróbuj poniższy kod, aby uzyskać adres URL obrazu:
LUB
LUB
źródło
Nie można tego zrobić bez zmiennej $ products / $ product zmienna:
W przypadku adresu URL produktu:
// nie można zatrzymać tej metody dodawania ___store do adresu URL, nawet ustawiając _store_to_url na false
** // nie możesz zatrzymać tej metody dodawania ___store do adresu URL, nawet ustawiając _store_to_url na false // note - zobacz sekcję „using _ignore_category” poniżej, aby znaleźć uzasadniony błąd przy użyciu tego parametru **
Dla produktu Zdjęcie:
Jeśli chcesz, aby URL obrazu był używany w tagu,
źródło
$product->getUrlPath();
, zdobywającurl_key
. Jest to możliwe bez$product
zmiennej. To sprawia, że uważam, że uzyskanie obrazu produktu i zmiana jego rozmiaru również powinny być możliwe bez konieczności ładowania całego produktu. (więc bez użyciaMage::getModel('catalog/product')->load($productId);
)Chcę dodać 1 linię kodu do komentarza mpaepper, co moim zdaniem jest świetnym rozwiązaniem w konkretnych scenariuszach. Użyłem go w pętli na stronie, na której nie miałem obiektu produktu, aby załadować obraz przez model produktu.
Jeśli nie chcesz ładować obrazu z obiektem produktu, możesz użyć podejścia mpaepper exlpains. Nie zapomnij zapisać ręcznie utworzonego obrazu podczas korzystania z tego rozwiązania. Gdy zapiszesz obiekt obrazu, utworzy on plik pamięci podręcznej, podobnie jak normalne obrazy Magento.
Zatem pełny kod powinien być:
źródło
Obraz produktu można uzyskać w następujący sposób:
Aby zmienić rozmiar obrazu, możesz dodać to:
Aby uzyskać adres URL produktu:
$ _Products to sam produkt, a nie identyfikator produktu;
źródło
$_products
zmiennej, ponieważ wymagałoby to załadowania produktu w całości. A załadowanie wszystkich produktów, przez które przechodzę przez pętlę, spowodowałoby ładowanie sekund w sekundach, co jest zbyt duże.