W jaki sposób uzyskujemy adres URL do miniatury produktu za pośrednictwem interfejsu API spoczynku.
/V1/products/{sku}/media
dostałby nam względny adres URL taki jak "/m/b/mb01-blue-0.jpg"
i URL obrazu będzie baseurl/catalog/product/m/b/mb01-blue-0.jpg
To działa dobrze. Ale w jaki sposób otrzymujemy miniaturę, która zwykle znajduje się w folderze pamięci podręcznej.
magento2
product-images
rest
thumbnail
Mohammed Shameem
źródło
źródło
Odpowiedzi:
Jeśli potrzebujesz pełnej ścieżki obrazu miniatury z systemem pamięci podręcznej Magento 2 za pośrednictwem interfejsu API, możesz utworzyć niestandardowy interfejs API na podstawie natywnej klasy ProductRepository.
Utwórz nowy moduł. (wyjaśnione w innych postach)
Utwórz plik etc / webapi.xml :
Utwórz plik etc / di.xml :
Utwórz interfejs Api \ ProductRepositoryInterface.php :
Utwórz model Model \ ProductRepository.php :
Dostęp
Iść do
/rest/V1/custom/products/{sku}
Powinieneś pobrać miniaturę z buforowanym adresem URL frontendu obrazu:
Komentarze:
Trzeci parametr funkcji startEnvironmentEmulation służy do wymuszenia użycia obszaru interfejsu użytkownika, jeśli użytkownik jest już w tym samym magazynie. (przydatne w obszarze API)
Nie testuję tego niestandardowego interfejsu API, możesz dostosować kod, ale logika jest poprawna, ale przetestowałem już część, aby pobrać adres URL obrazu w innym niestandardowym interfejsie API.
To obejście pozwala uniknąć tego rodzaju błędów:
źródło
\Magento\Catalog\Api\ProductRepositoryInterfaceFactory
zamiast\Magento\Catalog\Model\ProductFactory
, ponieważ można wywołaćget()
naproductRepositry
obiekcie z SKU bezpośrednio. Przynajmniej tego teraz używam.vendor/magento/module-catalog/Model/ProductRepository.php:258
Powody, dla których Magento nie zapewnia tej funkcjonalności po wyjęciu z pudełka, są następujące:
Jako rozwiązanie długoterminowe - interfejsy API zapytań powinny odpowiedzieć na to pytanie, ponieważ zapewnią możliwość pól tylko do odczytu i pól obliczeniowych. Jako rozwiązanie możemy zapewnić najbliższy czas społeczności - moglibyśmy wdrożyć / wprowadzić dedykowaną usługę rozpoznawania adresów URL, która zwróci adres URL dla określonych typów jednostek (takich jak Produkt, Kategoria, Obraz itp.)
Z tego samego powodu nie podajemy adresu URL produktu w ramach interfejsu ProductInterface
Oto moja odpowiedź na ten problem (adres URL produktu): https://community.magento.com/t5/Programming-Questions/Retrieving-the-product-URL-for-the-current-store-from-a/mp / 55387 / highlight / true # M1400
źródło
Powinno to być możliwe przy użyciu następującego adresu URL:
/rest/V1/products/{sku}
Spowoduje to zwrócenie produktu i powinien istnieć węzeł dla niestandardowych atrybutów, który zawiera link do miniatury
źródło