J'ai créé un rapport personnalisé. Le rapport contient un nombre important de champs qui sont requis pour son exportation au format CSV.
Ce que j'essaie de comprendre, c'est s'il existe un moyen d'omettre le rendu de certains des champs de la grille frontale. La plupart d'entre eux ne sont pas vraiment importants pour le processus de filtrage dans admin et ne sont utilisés que lorsque le rapport est téléchargé pour une analyse ultérieure en dehors de Magento.
Je m'attendrais à ce que ce type de fonctionnalité réside dans la classe de la grille, car c'est ce qui génère la grille réelle et, plus tard, le CSV exporté, mais je ne vois rien qui ressemble à de la visibilité.
Avant d'entrer et de remplacer les méthodes de cette classe pour notre rapport personnalisé, y a-t-il un moyen moins connu d'accomplir cela qui est plus facile que d'ajouter une sorte de propriété "showInGrid" via le tableau de propriétés addColumn?
TL, DR existe-t-il un moyen facile d'exporter des champs (par exemple, CSV ou XML) mais d'omettre de la grille d'administration?
Réponses:
Créez une définition de bloc séparée - par exemple, dupliquez le bloc Grid sur un autre bloc spécifique à votre CSV; J'appellerais cela
Csvgrid.php
au lieu deGrid.php
- il contiendrait toutes les mêmes fonctionnalités que la normaleGrid.php
contient, mais omettait une colonne.Dans votre contrôleur:
Lorsque vous dupliquez la grille, placez-la
Csvgrid.php
dans le même répertoire physique queGrid.php
mais renommez-la en conséquence - n'oubliez pas de changer le nom de la classe!Éditer:
Il s'avère donc qu'il
Mage_Adminhtml_Block_Widget_Grid
a une méthode appeléeremoveColumn
- définie comme:Ma conjecture est que, car il
Mage_Adminhtml_Block_Report_Grid
étendMage_Adminhtml_Block_Widget_Grid
hérite de cette méthode et devrait pouvoir être utilisé. Je voudrais, dans ce cas, créer une nouvelle grille de bloc et étendre la grille dans laquelle se trouve votre rapport actuel. À partir de là, vous pouvez utiliser votre propreprepareColumns
méthode, appelerparent::_prepareColumns()
puis appelerremoveColumn
..Bonne chance.
la source
_prepareColumns
qui référencera un index qui n'existe plus dans la collection. Bien qu'il existe une méthode «removeColumn», je dirais étendre la classe Grid et appelerparent::_prepareColumns()
, puis injecter votre propreremoveColumns
méthode.Vous pouvez utiliser set
column_css_class
etheader_css_class
quantno-display
à la colonne que vous souhaitez masquer. Cela masquera votre colonne de la grille d'administration. Cependant, cette colonne sera présente dans le fichier csv ou xml exporté.la source
Il existe une méthode
_afterLoadCollection()
dans Mage / Adminhtml / Block / Widget / Grid.php qui peut être remplacée pour supprimer / ajouter des colonnes pour l'exportation ou l'affichage$this->_isExport
.REMARQUE: l' ajout de cela
_prepareCollection()
ne fonctionnera pas car les filtres de collection n'auront pas été soumis, ce qui entraînera le vidage de la collection entière moins tout filtrage.la source
Si vous n'avez besoin que de ces champs pour le rapport, pourquoi ne les ajoutez-vous que pour le rapport? Les blocs de grille ont la méthode getCollection qui retournera le modèle de collection et vous pouvez ajouter les champs dont vous avez besoin pour votre rapport.
la source
La façon la plus simple de le faire est
Repliez le fichier Grid.php (app / core / Mage / Adminhtml / Block / Sales / Order / Grid.php)
puis ajoutez votre colonne personnalisée comme je l'ai fait ci-dessous:
a également changé
cela signifie que nous devons ajouter notre valeur de colonne personnalisée à la collection. Pour cela, nous devons joindre notre table avec une table de collecte de grille.
Maintenant, allez vérifier le backend, exportez les commandes. il y aura notre colonne personnalisée ajoutée.
la source