Ich habe einen benutzerdefinierten Bericht erstellt. Der Bericht enthält eine erhebliche Anzahl von Feldern, die für den Export in CSV-Form erforderlich sind.
Ich versuche herauszufinden, ob es eine Möglichkeit gibt, das Rendern einiger Felder im Front-End-Raster wegzulassen. Die meisten davon sind für den Filterprozess in admin nicht wirklich wichtig und werden nur verwendet, wenn der Bericht zum weiteren Parsen außerhalb von Magento heruntergeladen wird.
Ich würde erwarten, dass sich diese Art von Funktionalität in der Rasterklasse befindet, da dies das eigentliche Raster und später die exportierte CSV generiert, aber ich sehe nichts, was so aussieht, als würde es sich um Sichtbarkeit handeln.
Gibt es eine weniger bekannte Möglichkeit, dies zu erreichen, bevor ich Methoden in dieser Klasse für unseren benutzerdefinierten Bericht überschreibe, die einfacher ist, als eine Art "showInGrid" -Eigenschaft über das Eigenschaftsarray addColumn hinzuzufügen?
TL, DR Gibt es eine einfache Möglichkeit, Felder zu exportieren (z. B. CSV oder XML), aber aus dem Admin-Raster wegzulassen?
Antworten:
Erstellen Sie eine separate Blockdefinition - z. B. duplizieren Sie den Grid-Block in einen anderen Block, der für Ihre CSV spezifisch ist. Ich würde dies
Csvgrid.php
anstelle vonGrid.php
- es würde alle die gleichen Funktionen enthalten, die das NormalGrid.php
enthält, aber die eine Spalte weglassen.In Ihrem Controller:
Wenn Sie das Grid duplizieren, platzieren Sie es
Csvgrid.php
in demselben physischen Verzeichnis wieGrid.php
, benennen Sie es jedoch entsprechend um - vergessen Sie nicht, den Klassennamen zu ändern!Bearbeiten:
Es stellt sich also heraus, dass
Mage_Adminhtml_Block_Widget_Grid
eine Methode namensremoveColumn
- definiert als:Ich vermute, dass es diese Methode erbt und verwendet werden sollte , weil es
Mage_Adminhtml_Block_Report_Grid
erweitertMage_Adminhtml_Block_Widget_Grid
wird. In diesem Fall würde ich ein neues Blockraster erstellen und das Raster erweitern, in dem sich Ihr aktueller Bericht befindet. Von dort aus können Sie Ihre eigeneprepareColumns
Methode verwenden, das aufrufenparent::_prepareColumns()
und dann aufrufenremoveColumn
.Viel Glück.
quelle
_prepareColumns
ein Index, der nicht mehr in der Sammlung vorhanden ist. Während es eine 'removeColumn'-Methode gibt, würde ich sagen, erweitern Sie die Grid-Klasse und rufen Sie auf und fügen Sieparent::_prepareColumns()
dann Ihre eigeneremoveColumns
Methode ein.Sie können Satz verwenden
column_css_class
undheader_css_class
wieno-display
auf die Spalte , die Sie ausblenden möchten. Dadurch wird Ihre Spalte vor dem Admin-Raster ausgeblendet. Diese Spalte ist jedoch in der exportierten CSV- oder XML-Datei vorhanden.quelle
_afterLoadCollection()
In Mage / Adminhtml / Block / Widget / Grid.php gibt es eine Methode , die überschrieben werden kann, um Spalten für den Export oder die Anzeige mit zu entfernen / hinzuzufügen$this->_isExport
.HINWEIS: Das Hinzufügen zu
_prepareCollection()
wird nicht funktionieren, da die Sammlungsfilter nicht gesendet wurden. Dies führt dazu , dass die gesamte Sammlung ohne Filterung ausgegeben wird.quelle
Wenn Sie diese Felder nur für den Bericht benötigen, warum fügen Sie sie nicht nur für den Bericht hinzu? Rasterblöcke verfügen über die Methode getCollection, die das Erfassungsmodell zurückgibt, und Sie können Felder hinzufügen, die Sie für Ihren Bericht benötigen.
quelle
Der einfache Weg, dies zu tun, ist
Greifen Sie auf die Datei Grid.php zurück (app / core / Mage / Adminhtml / Block / Sales / Order / Grid.php).
Fügen Sie dann Ihre benutzerdefinierte Spalte hinzu, wie ich es unten getan habe:
auch geändert in
Dies bedeutet, dass wir unseren benutzerdefinierten Spaltenwert zur Sammlung hinzufügen müssen. Dazu müssen wir unsere Tabelle mit der Grid Collection-Tabelle verbinden.
Überprüfen Sie nun das Backend und exportieren Sie die Bestellungen. Es wird unsere benutzerdefinierte Spalte hinzugefügt.
quelle