2009-10-06 6 views
6

Buduję sklep Magento dla klienta i chcę dodać atrybut do wszystkich produktów, które działają jako lista rozwijana. Podobnie jak atrybut "Producent".Magento: sposób wypełniania wartości atrybutu rozwijanego produktu

Jednak zamiast ręcznie wpisywać listę wartości dla tego atrybutu, które powinny zostać wypełnione z zewnętrznej witryny. Tak więc za każdym razem, gdy tworzysz nowy produkt lub edytujesz istniejący, lista rozwijana zawiera aktualną listę wartości pobranych ze strony zdalnej. Lista nie powinna zostać pobrana tylko raz podczas tworzenia atrybutu, ale za każdym razem, gdy produkt jest tworzony lub edytowany.

Załóżmy na przykład, że można uzyskać listę wszystkich producentów za pomocą loków ze zdalnej strony. Nazwy na tej liście są czasami modyfikowane lub dodawane, jednak identyfikator pozostaje taki sam, więc powinny być używane za kulisami. W jaki sposób wypełniasz wartości z rozwijanego menu producenta?

Wiem, jak utworzyć podstawowe niestandardowe rozszerzenie, ale rozszerzenie zaplecza administracyjnego jest dla mnie nowością.

Każda pomoc jest doceniana.

+0

Zaakceptować odpowiedź? – ColinM

+0

@ColinM Ups. Gotowe. :) –

Odpowiedz

10

Atrybuty produktu Magento są niezwykle elastyczne, ale posiadanie wartości dynamicznych dla jednego produktu wymagałoby jednego atrybutu dla każdego produktu, co nie ma większego sensu, więc zakładam, że te wartości atrybutów mają pewne wspólne cechy wśród produktów w twoim produkcie. przechowywać, więc będziesz miał ograniczoną liczbę atrybutów (lub jednego?). Dla każdego takiego atrybutu należy wcześniej utworzyć atrybut i model zaplecza, a następnie użyć aktualizacji zadania lub zdarzenia cron opcji wartości atrybutu z interfejsu API i buforować je lokalnie w bazie danych lub innej metodzie. Możesz dodać atrybut w module instalatora tak:

$installer->addAttribute('catalog_product', 'my_attr_code', array(
    'label' => 'Attribute Name', 
    'required' => false, 
    'input' => 'select', 
    'source' => 'namespace/source', 
    'default' => 'none', 
    'position' => 1, 
    'sort_order' => 3, 
)); 

lub rolki własne oświadczenie insert SQL dla tabeli eav_attribute. Pamiętaj o przypisaniu nowego atrybutu do zestawu atrybutów w backendach, aby można było z nich korzystać.Następnie należy utworzyć model w My_Namespace_Model_Source która rozciąga Mage_Eav_Model_Entity_Attribute_Source_Table (zakładając, że chcesz wybrać wejście dla swoich wartości atrybutów) i wdraża na minimum jednej z następujących metod:

getAllOptions() 
getOptionText($value) 

Więc nich wyciągnąć z dynamicznych opcji, które są buforowane lokalnie, w przeważającej części twój nowy atrybut będzie się zachowywał jak każdy inny w Magento. Upewnij się, że korzystasz z inteligentnego buforowania, ponieważ metody te mogłyby zostać wielokrotnie trafione podczas ładowania jednej strony. Może wystąpić zdarzenie, które można zaobserwować tuż przed wyświetleniem strony tworzenia lub edytowania produktu, w przeciwnym razie wystarczy zastąpić klasę lub kontroler lub użyć zadania cron Magento.

Edycja: Można również użyć istniejących modeli atrybutów Magento i utworzyć wartości opcji za pośrednictwem istniejącego interfejsu API, ale zakładam, że do przeprowadzenia synchronizacji lub z innego powodu mogą być potrzebne dodatkowe metadane, w którym to przypadku użytkownik chce mieć niestandardowy model backendu.

4

Nie jest to dobra odpowiedź, ale domyślam się, że najpierw dodaję atrybut, a następnie go zinstruuję, aby zobaczyć, jak jest wypełniony.

Następnie na stronie wyświetlacza produkt na administratora, chciałbym zastąpić edytować i nowych działań na productController, w celu załadowania wartości za pomocą curl dla tego atrybutu (można odnośnika identyfikator atrybutu w tabeli eav_attribute)

Możesz następnie spakować to jako niestandardowe rozszerzenie, więc nie edytuj bezpośrednio kodu źródłowego. Powodzenia!

4

Musisz wyszukać dyspozytorów zdarzeń Magento.

Zasadniczo za każdym razem, gdy wystąpi zdarzenie - aktualizacja produktu, złożenie zamówienia, usunięcie czegoś itp. - wiadomość jest wysyłana przez system. Te wiadomości mogą zostać przechwycone i mogą wywołać metody, które utworzyłeś. Aby osiągnąć to, co chcesz, musisz złapać zdarzenie, które jest wyzwalane, gdy produkt jest tworzony i aktualizowany, i poproś o uruchomienie metody z jednego z twoich niestandardowych modułów. Ta metoda pobierze wartość ze strony zdalnej i zaktualizuje ją za pomocą produktu.

Po szybkiej wyszukiwarce Google, znalazłem następujący artykuł:

http://blog.baobaz.com/en/tag/magento-events

można znaleźć jakie zdarzenia są wywoływane przez Magento patrząc na odpowiednim kodem modułu.