Muszę przedłużyć koszyk na zakupy Magento, aby dodać dodatkowy krok do lokalizatora sklepu. Rozumiem, że muszę zastąpić podstawowy kontroler OnePage (Mage_Checkout_OnepageController
) i bloki (Mage_Checkout_Block_Onepage
), ale co należy zrobić w odniesieniu do śledzenia dodatkowych informacji (np. Wybranych przez użytkownika opcji z mojego niestandardowego kroku).Przedłużanie koszyka produktów Magento
Odpowiedz
Aby uzyskać całe rozwiązanie, należy wykonać kilka kroków.
Najpierw utwórz nowy moduł. Jeśli chcesz, użyj ModuleCreator.
Następnie napisać setup script w module, aby dodać nowe pola do struktury atrybutu Magento, na przykład :
$setup = new Mage_Sales_Model_Mysql4_Setup('core_setup');
$setup->startSetup();
$setup->addAttribute('quote', 'my_attribute', array('type' => 'varchar', 'visible' => false, 'required' => false));
$setup->addAttribute('order', 'my_attribute', array('type' => 'varchar', 'visible' => false, 'required' => false));
$setup->addAttribute('invoice', 'my_attribute', array('type' => 'varchar', 'visible' => false, 'required' => false));
$setup->addAttribute('creditmemo', 'my_attribute', array('type' => 'varchar', 'visible' => false, 'required' => false));
Uwaga użycie Mage_Sales_Model_Mysql4_Setup
dodanie pól do odpowiednich sales_flat_quote
i sales_flat_order
tabelach.
Teraz wstaw następujące wartości w pliku config.xml modułu:
<global>
<fieldsets>
<sales_convert_quote>
<my_attribute>
<to_order>*</to_order>
</my_attribute>
</sales_convert_quote>
<sales_convert_order>
<my_attribute>
<to_cm>*</to_cm>
<to_invoice>*</to_invoice>
</my_attribute>
</sales_convert_order>
</fieldsets>
To poinstruuje Magento skopiować wartości niestandardowego pola z cytatem zamówić do faktury i credit_memo itp
Następnie w swoim niestandardowym kodzie blokowym/kontrolnym będziesz mógł użyć magicznych modułów pobierających i ustawiających Magento, aby zachować wartości.
$oQuote = Mage::getSingleton('checkout/session')->getQuote();
$oQuote->setMyAttribute('some_value');
$oQuote->save();
Powinieneś zobaczyć nową kolumnę i wartość zapisaną w sales_flat_quote
. Następnie, gdy klient zakończy kasę, ta sama wartość powinna zostać zapisana w sales_flat_order
.
Zauważ, że powyższy kod może zostać przedłużony do pracy quote_item
i order_item
po prostu zmieniając quote
do quote_item
etc, jeśli jednak chcesz zapisać wartości, które zostały ustawione na swoich produktów atrybutów, wtedy wymagane jest kilka dodatkowych prac.
Włóż nowy blok XML do swojego config.xml (znowu wewnątrz węzła globalnej):
<sales>
<quote>
<item>
<product_attributes>
<my_attribute />
</product_attributes>
</item>
</quote>
</sales>
Gdzie my_attribute
jest kod atrybutu na modelu produktu. Że uczyni my_attribute dostępny na połączonego produktu, dzięki czemu można uzyskać do niego dostęp za pośrednictwem
$oQuoteItem->getProduct()->getMyAttribute()
bez potrzeby wykonywania pełnej Mage::getModel('catalog/product')->load($oQuoteItem->getProductId())
. Jest to o wiele bardziej wydajne.
Następnie potrzebny będzie obserwator, który skopiuje wartości z obiektu produktu do obiektu quote_item. Więc zadeklarować swój obserwatora w config.xml:
<events>
<sales_quote_item_set_product>
<observers>
<quoteitem_set_custom_data>
<type>singleton</type>
<class>mymodule/observer</class>
<method>setCustomDataOnQuoteItem</method>
</quoteitem_set_custom_data>
</observers>
</sales_quote_item_set_product>
<events>
i napisać kod w swojej klasie obserwatora tak:
public function setCustomDataOnQuoteItem($oObserver){
$oProduct = $oObserver->getProduct();
$oQuoteItem = $oObserver->getQuoteItem();
foreach(array('my_attribute') as $vAttributeCode){
$oQuoteItem->setData($vAttributeCode,$oProduct->getData($vAttributeCode));
}
}
Oto kompletny moduł roboczy .. jego (prawie) takie same jak powyższy kod Johnatan. Znajdziesz go tutaj: https://bitbucket.org/vovsky/adding-custom-product-attribute-to-quote-and-order-items-in/
i pełne wyjaśnienie każdym kroku tutaj: http://www.atwix.com/magento/custom-product-attribute-quote-order-item/
- 1. Programowe dodawanie produktów do zdalnego koszyka użytkownika magento
- 2. Magento: Sortowanie kolekcji produktów
- 3. Kategoria produktów Magento
- 4. Magento: Aktualizuj wielkość koszyka programowo
- 5. Pobierz subtotal magento z koszyka
- 6. Jak dodać nowe paczki produktów do koszyka?
- 7. Magento: paginacja filtrowana kolekcja produktów
- 8. Magento API: przypisywanie istniejących produktów do konfigurowalnych produktów
- 9. API mydła Magento Dodaj paczkę Produkt do koszyka
- 10. Tłumaczenie produktów Magento dla wielu witryn wielojęzycznych
- 11. Magento - Pobieranie produktów o określonej wartości atrybutu
- 12. Pobieranie produktów z zamówienia w Magento
- 13. Nawigacja warstwowa Magento na niestandardowej kolekcji produktów
- 14. Magento SOAP API Lista produktów Pagina
- 15. Gdzie są przechowywane recenzje produktów magento 1.5?
- 16. Magento - jak uzyskać powiązane produkty Grupy produktów?
- 17. Magento pokazuje niepoprawną liczbę produktów w kategorii
- 18. Magento kolekcja produktów z konkretnym identyfikatorze
- 19. Reguła cenowa koszyka na zakupy, z wyłączeniem produktów specjalnych
- 20. Dodaj pakiet produktów do koszyka bez konieczności podawania opcji
- 21. Dodawanie Woocommerce Dodaj do koszyka Przycisk do pokrewnych produktów i listy produktów
- 22. Przedłużanie Ext.data.Store
- 23. Magento - Jak zdobyć wszystkie elementy koszyka w header.phtml
- 24. Magento: nie można dodać produktu do koszyka po zamówieniu
- 25. Magento niestandardowy proces dodawania do koszyka nie działa
- 26. Tworzenie produktów Magento w pakiecie lub grup produktów z konfigurowalnymi produktami
- 27. Kolekcja produktów Magento Dostać tylko produkty z niektórych kategorii
- 28. Magento Uzyskaj kolekcję produktów Filtruj według identyfikatora sklepu
- 29. Magento, programowo dodając kategorię do produktów w skrypcie z SQL
- 30. Jak uzyskać konfigurowalny zakres cenowy produktów w magento?
Dlaczego nikt stworzenia blogu jako jasny i pełny, jak to zrobiłeś ?? Spędziłem 2h szukając twojej odpowiedzi! Dzięki ! – LittleBigDev