Frage

Ich habe einen benutzerdefinierten Bericht erstellt. Der Bericht enthält eine erhebliche Anzahl von Feldern, die erforderlich sind, wenn er in CSV -Form exportiert wird.

Ich versuche herauszufinden, ob es eine Möglichkeit gibt, die Darstellung einiger Felder im Front-End-Gitter zu unterlassen. Die meisten von ihnen sind nicht wirklich wichtig für den Filterprozess im Administrator und werden nur verwendet, wenn der Bericht außerhalb von Magento zum weiteren Parsen heruntergeladen wird.

Ich würde erwarten, dass dies die Art der Funktionalität in der Gitterklasse wohnt, da dies das eigentliche Netz erzeugt, und später das exportierte CSV, aber ich sehe nichts, was so aussieht, als ob es sich um Sichtbarkeit handelt.

Bevor ich in dieser Klasse Methoden für unseren benutzerdefinierten Bericht eingehe und eine weniger bekannte Möglichkeit hat, dies zu erreichen, ist das Hinzufügen einer Art "Showrid" über das ADDColumn-Eigenschafts-Array einfacher als meine Art von "Showrid"?

TL, Dr. Gibt es eine einfache Möglichkeit, Felder exportieren zu lassen (z. B. CSV oder XML), aber aus dem Administratorraster weggelassen werden?

War es hilfreich?

Lösung

Erstellen Sie eine separate Blockdefinition - zB den Gitterblock zu einem anderen Block, der für Ihr CSV spezifisch ist. Ich würde das nennen Csvgrid.php Anstatt von Grid.php - Es würde die gleiche Funktionalität wie die Normalität enthalten Grid.php Enthält, aber die eine Spalte weglassen.

In Ihrem Controller:

public function exportCsvAction()
{
        $fileName = 'myreport_'.date('Y_m_d_h_i_s').'.csv';
        $content = $this->getLayout()->createBlock('mymodule/adminhtml_reports_csvgrid')->getCsv();
}

Wenn Sie das Netz duplizieren, platzieren Sie sich Csvgrid.php in das gleiche physische Verzeichnis wie Grid.php Aber benennen Sie es entsprechend um - vergessen Sie nicht, den Klassennamen zu ändern!

Bearbeiten:

Das stellt sich also heraus Mage_Adminhtml_Block_Widget_Grid hat eine Methode genannt removeColumn - definiert als:

/

**
     * Remove existing column
     *
     * @param string $columnId
     * @return Mage_Adminhtml_Block_Widget_Grid
     */
    public function removeColumn($columnId)
    {
        if (isset($this->_columns[$columnId])) {
            unset($this->_columns[$columnId]);
            if ($this->_lastColumnId == $columnId) {
                $this->_lastColumnId = key($this->_columns);
            }
        }
        return $this;
    }

Ich vermute das, weil Mage_Adminhtml_Block_Report_Grid erweitert Mage_Adminhtml_Block_Widget_Grid Es erbt diese Methode und sollte verwendet werden können. Ich würde in diesem Fall ein neues Blockgitter erstellen und das Netz, in dem sich Ihr aktueller Bericht befindet, erweitern. Von dort aus können Sie Ihre eigene verwenden prepareColumns Methode, rufen Sie die an parent::_prepareColumns() und dann anrufen removeColumn..

Viel Glück.

Andere Tipps

Sie können Set verwenden column_css_class und header_css_class wie no-display In der Spalte möchten Sie sich verbergen. Dadurch wird Ihre Spalte aus dem Administratorraster ausgeblendet. Diese Spalte wird jedoch im exportierten CSV oder XML vorhanden sein.

$this->addColumn('YOUR_COLUMN_ID', array(
        'header'    => Mage::helper('YOUR_HELPER_NAME')->__('YOUR_COLUMN_NAME'),
        'width'     => '150px',
        'index'     => 'YOUR_COLUMN_INDEX',
        'column_css_class'=>'no-display',
        'header_css_class'=>'no-display',
  ));

Es gibt eine Methode _afterLoadCollection() in mage/adminHtml/block/widget/grid.php, das überschreiben kann, um Spalten für Exportieren zu entfernen/hinzuzufügen $this->_isExport.

HINWEIS: Hinzufügen dieses Hinzufügens zu dem _prepareCollection() funktioniert nicht, da die Sammelfilter nicht eingereicht wurden, was dazu führt, dass die gesamte Sammlung abzüglich einer Filterung abgeladen wurde.

protected function _afterLoadCollection() {
    if(!$this->_isExport) {
        $this->removeColumn('columnToRemove');
    }
}

Wenn Sie diese Felder nur für den Bericht benötigen, warum fügen Sie sie dann nicht nur für den Bericht hinzu? Netzblöcke haben eine GetCollection -Methode, mit der das Sammlungsmodell zurückgegeben wird und Sie Felder hinzufügen können, die Sie für Ihren Bericht benötigen.

Der einfache Weg, dies zu tun, ist

Fallen Sie 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:

//New columns added but hidded

$this->addColumn('custom_column', array(
   'header' => Mage::helper('sales')->__('Custom Column'),
   'index' => 'custom_column',
   'column_css_class'=>'no-display',
   'header_css_class'=>'no-display',
));

Auch veränderte sich in

protected function _prepareCollection()
{
    $collection = Mage::getResourceModel($this->_getCollectionClass());
    $collection->getSelect()->joinLeft('sales_flat_order', 'main_table.entity_id = sales_flat_order.entity_id',array('custom_column'));     
    $this->setCollection($collection);
    return parent::_prepareCollection();
}

Dies bedeutet, dass wir unseren benutzerdefinierten Spaltenwert zur Sammlung hinzufügen müssen. Dafür müssen wir uns unserer Tabelle mit der Grid Collection Table anschließen.

Gehen Sie nun und überprüfen Sie das Backend, exportieren Sie die Bestellungen. Es wird unsere benutzerdefinierte Spalte hinzugefügt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top