Je suis confronté à un problème d'ajout d'une colonne sur la grille client et d'affichage des valeurs dans cette colonne.
Voici le code d'observateur que j'ai essayé d'afficher la colonne: -
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');
}
Cela ajoute la colonne mais aucune valeur n'est affichée en dessous.
magento-1.7
customer
grid
grid-serlization
Kuldeep
la source
la source
$block->getCollection()
Réponses:
Pour ajouter une colonne à la grille client, vous devez remplacer 2 éléments dans le bloc
Mage_Adminhtml_Block_Customer_Grid
._prepareCollection
- pour ajouter votre attribut dans la collection_prepareColumns
- pour ajouter la colonne dans votre grille.Pour cela, vous devez créer une nouvelle extension. Appelons ça
Easylife_Customer
. Pour cela, vous aurez besoin des fichiers suivants:app/etc/module/Easylife_Customer.xml
- le fichier de déclarationapp/code/local/Easylife/Customer/etc/config.xml
- le fichier de configurationapp/code/local/Easylife/Customer/Block/Adminhtml/Customer/Grid.php
- votre propre version de la grille client. Lisez mes commentaires dans le code:Videz le cache et vous devriez être prêt.
la source
Mage_Adminhtml_Block_Widget_Grid::_prepareCollection();
La façon d'observateurs:
Déclarez 2 observateurs dans votre fichier config.xml: l'un pour ajouter votre colonne au bloc de grille et l'autre pour charger les données de l'attribut correspondant:
Créez une classe Observer avec les méthodes appropriées:
la source
Je réponds au commentaire d'Alex:
Pour exporter en CSV aussi, utilisez
au lieu de
la source
En supposant que
$block
c'est une instance d'Mage_Adminhtml_Block_Customer_Grid
alors$block->getCollection()
doit renvoyer une collection client utilisée dans la grille qui est une instance deMage_Customer_Model_Resource_Customer_Collection
. Lorsque vous regardez le code,Mage_Adminhtml_Block_Customer_Grid::_prepareCollection()
vous verrez comment pouvez-vous ajouter un attribut à cette collection.Il devrait être (bien que non testé)
en supposant qu'un attribut mobile soit ajouté à l'entité client
ou si le mobile est et l'attribut ajouté à l'entité d'adresse de facturation
la source
Mage_Adminhtml_Block_Widget_Grid::_prepareCollection
ce que l' on appelle:$this->getCollection()->load()
. Cela signifie que toute autre modification de la collection est ignorée. Mais, comme je l'ai dit, c'est une très bonne approche pour exporter une grille. Lors d'une exportation, laload
méthode n'est appelée que bien plus tard.Autrement:
Réécrivez le bloc de grille client avec votre module personnalisé et utilisez la
setCollection()
fonction pour récupérer votre attribut personnalisé.app / code / [local ou communautaire] /YourCompany/YourModule/etc/config.xml
app / code / [local ou communautaire] /YourCompany/YourModule/Block/Customer/Grid.php
la source
addColumnsOrder
fonction. Veuillez vérifier la réponse mise à jour.J'ai dû supprimer certaines colonnes par défaut et ajouter des colonnes supplémentaires dans la grille client. J'ai décidé de rendre les colonnes configurables. J'ai d'abord ajouté 2 cases multisélection dans system.xml :
Les modèles source sont simples:
Le deuxième modèle source
Remplacez ensuite la classe de grille:
la source