Robiłem sporo google, prób i błędów, ale nie mogę znaleźć rozwiązania problemu.
- Możliwość zmiany pól i kolejności Sales_order_grid; i
- Możliwość wyświetlania dwóch niestandardowych pól w tej siatce (filtrowalnych).
Ten pierwszy (punkt 1) został rozwiązany poprzez rozszerzenie Mage_Adminhtml_Block_Widget_Grid
modułu niestandardowego (wiem o obserwatorach, ale inne zainstalowane moduły zastępowały moje zmiany ich obserwatorami).
Niezależnie od tego, ten drugi problem jest moim obecnym problemem, poniżej są dwie metody, które do tej pory mnie zawiodły.
Metoda 1
<?php
/* @var $this Mage_Sales_Model_Mysql4_Setup */
$this->startSetup();
$connection = $this->getConnection();
/**
* Create the payment method dropdown field, because this field _may_ be
* used for searching we will create an index for it.
*/
$connection->addColumn(
$this->getTable('sales/order_grid'),
'x_payment_method',
"ENUM('PayPal', 'SagePay') DEFAULT NULL"
);
$connection->addKey($this->getTable('sales/order_grid'), 'x_payment_type', 'x_payment_type');
/**
* Create the order channel field to identify where the order was originally
* generated from. Also add an index for this field for additional filtering.
*/
$connection->addColumn(
$this->getTable('sales/order_grid'),
'x_sale_channel',
"ENUM('Amazon', 'Play', 'eBay', 'Website') NOT NULL DEFAULT 'Website'"
);
$connection->addKey($this->getTable('sales/order_grid'), 'x_sale_channel','x_sale_channel');
$this->endSetup();
Metoda 2
W tym momencie miałem już dość czytania tych samych 7 artykułów, które nie pomogły, więc próbowałem uruchomić JEDEN teren; Sprawdziłem także dzienniki błędów w Magento i stwierdziłem, że „$ this-> getTable ()” było błędne, więc go usunąłem.
<?php
/* @var $this Mage_Sales_Model_Mysql4_Setup */
$this->startSetup();
$connection = $this->getConnection();
/**
* Create the payment method dropdown field, because this field _may_ be
* used for searching we will create an index for it.
*/
$this->addAttribute('sales_flat_order', 'x_test_option', array(
'label' => 'X Test Option',
'type' => 'varchar',
'input' => 'select',
'visible' => true,
'required' => false,
'position' => 1,
'visible_on_front' => false,
'option' => array('value' => array('web', 'test 1', 'test 2')),
'default' => array('web'),
));
$this->endSetup();
Co nasuwa pytanie, jaka jest różnica między kolumną a atrybutem? Moje wstępne założenie było takie, że kolumna jest dodawana do istniejącej tabeli podstawowej, podczas gdy atrybut jest dodawany do tabel EAV_ * i odpowiednio powiązany.
źródło
Odpowiedzi:
Twoje domniemanie jest prawidłowe.
Ale dla
sales_
stołu są one takie same.Początkowo jednostkami sprzedaży były EAV. Zmienili się na płaskie tabele, zaczynając od wersji 1.4.0.1 (tak myślę). Dla zachowania zgodności wstecznej obie metody zostały zachowane.
W przypadku innych płaskich zgłoszona podmioty (strony cms, bloki, polls) nie można używać
addAttribute
, tylkoaddColumn
, ale do sprzedaży to działa w obie strony.Jeśli planujesz zrobić rozszerzenie, które musi być kompatybilne z wersjami wcześniejszymi niż 1.4, użyj
addAttribute
, w przeciwnym razie nie widzę w tym sensu.źródło
addColumn
metody? Chociaż nie używa się również „getTable”, ponieważ Sales_flat_order jest po prostu tym. Postaram się, że wkrótce i powrót z virdict :)$this->getTable('sales/flat_order')
równie dobrze ustawić jedensales_flat_order
; drugi był$connection->addKey($this->getTable('sales/order_grid'), 'x_payment_type', 'x_payment_type');
;x_payment_type
powinno byćx_payment_method
.