Mam problem z dodaniem kolumny do siatki klientów i wyświetlaniem wartości w tej kolumnie.
Oto kod obserwatora, który próbowałem wyświetlić kolumnę: -
if ($block->getType() == 'adminhtml/customer_grid') {
$customer = $observer->getCustomer();
$collection = Mage::getResourceModel('customer/customer_collection');
$block->addColumnAfter('mobile', array(
'header' => 'Mobile No.',
'type' => 'text',
'index' => 'mobile',
), 'email');
}
Dodaje to kolumnę, ale pod nią nie są wyświetlane żadne wartości.
magento-1.7
customer
grid
grid-serlization
Kuldeep
źródło
źródło
$block->getCollection()
Odpowiedzi:
Aby dodać kolumnę do siatki klientów, musisz przesłonić 2 elementy w bloku
Mage_Adminhtml_Block_Customer_Grid
._prepareCollection
- aby dodać swój atrybut do kolekcji_prepareColumns
- aby dodać kolumnę do siatki.W tym celu należy utworzyć nowe rozszerzenie. Nazwijmy to
Easylife_Customer
. Do tego potrzebne będą następujące pliki:app/etc/module/Easylife_Customer.xml
- plik deklaracjiapp/code/local/Easylife/Customer/etc/config.xml
- plik konfiguracyjnyapp/code/local/Easylife/Customer/Block/Adminhtml/Customer/Grid.php
- twoja własna wersja siatki klientów. Przeczytaj moje komentarze w kodzie:Wyczyść pamięć podręczną i powinieneś być gotowy.
źródło
Mage_Adminhtml_Block_Widget_Grid::_prepareCollection();
Droga obserwatorów:
Zadeklaruj 2 obserwatorów w pliku config.xml: jeden, aby dodać kolumnę do bloku siatki, a drugi, aby załadować dane z odpowiedniego atrybutu:
Utwórz klasę Observer za pomocą odpowiednich metod:
źródło
Odpowiadam na komentarz Alexa:
Aby wyeksportować do pliku CSV, również użyj
zamiast
źródło
Zakładając, że
$block
jest to przypadekMage_Adminhtml_Block_Customer_Grid
wtedy$block->getCollection()
powinien zwrócić kolekcję klientów używaną w siatce, która jest instancjąMage_Customer_Model_Resource_Customer_Collection
. Gdy spojrzysz na kodMage_Adminhtml_Block_Customer_Grid::_prepareCollection()
, zobaczysz, jak możesz dodać atrybut do tej kolekcji.Powinien być (choć nie testowany)
zakładając, że do jednostki klienta dodano atrybut mobilny
lub jeśli komórka jest dodana do atrybutu adresu encji rozliczeniowej
źródło
Mage_Adminhtml_Block_Widget_Grid::_prepareCollection
to się nazywa:$this->getCollection()->load()
. Oznacza to, że wszelkie inne modyfikacje kolekcji są ignorowane. Ale, jak powiedziałem, jest to bardzo dobre podejście do eksportowania siatki. Podczas eksportuload
metoda jest wywoływana dopiero znacznie później.Inny sposób:
Przepisz blok siatki klientów za pomocą niestandardowego modułu i użyj
setCollection()
funkcji, aby pobrać niestandardowy atrybut.app / code / [local or community] /YourCompany/YourModule/etc/config.xml
app / code / [local or community] /YourCompany/YourModule/Block/Customer/Grid.php
źródło
addColumnsOrder
funkcji. Sprawdź zaktualizowaną odpowiedź.Musiałem usunąć niektóre domyślne kolumny i dodać dodatkowe kolumny w siatce klientów. Postanowiłem skonfigurować kolumny. Najpierw dodałem 2 pola wielokrotnego wyboru w pliku system.xml :
Modele źródłowe są proste:
Drugi model źródłowy
Następnie zastąp klasę siatki:
źródło