Domanda

Ho creato un rapporto personalizzato. Il rapporto ha un numero significativo di campi in esso che sono necessari per quando è esportato in forma di CSV.

Quello che sto cercando di capire è se c'è un modo per omettere il rendering di alcuni dei campi sulla griglia di front-end. La maggior parte di loro non sono molto importante per il processo di filtraggio in admin e sono utilizzati solo quando il rapporto viene scaricato per l'ulteriore analisi al di fuori di Magento.

mi aspetto che questo tipo di funzionalità di risiedere nella classe griglia come questo è ciò che genera la griglia reale e, in seguito, la esportato ma CSV non vedo nulla che sembra si tratta di visibilità.

Prima di andare dentro e metodi di override in questa classe per il nostro report personalizzato, c'è un modo meno noto per raggiungere questo obiettivo che è più facile che la mia aggiunta di una sorta di "showInGrid" proprietà tramite la matrice di proprietà addColumn?

TL, DR c'è un modo semplice per avere campi esportati (a esempio, CSV o XML), ma omesso dalla griglia di amministrazione?

È stato utile?

Soluzione

Crea una definizione di blocco separato - per esempio duplicare il blocco di griglia ad un altro blocco che è specifico per il vostro CSV; Lo definirei Csvgrid.php invece di Grid.php -. Conterrebbe tutte le stesse funzionalità che la Grid.php normale contiene, ma omettere l'una colonna

Nel vostro controller:

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

Quando si duplica la griglia, posto Csvgrid.php nella stessa directory fisica come Grid.php ma rinominarlo di conseguenza - non dimenticate di cambiare il nome della classe!

Modifica

Così si scopre che Mage_Adminhtml_Block_Widget_Grid ha un metodo chiamato removeColumn - definito come:

/

**
     * 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;
    }

La mia ipotesi è che perché Mage_Adminhtml_Block_Report_Grid estende Mage_Adminhtml_Block_Widget_Grid eredita questo metodo e dovrebbe essere in grado di essere utilizzato. Vorrei, in questo caso, creare un nuovo blocco griglia ed estendere la rete che il vostro rapporto corrente è in. Da lì è possibile utilizzare il proprio metodo di prepareColumns, chiamare il parent::_prepareColumns() e removeColumn poi chiamata ..

Buona fortuna.

Altri suggerimenti

È possibile utilizzare column_css_class set e header_css_class come no-display alla colonna che si desidera nascondere. In questo modo nascondere la colonna dalla griglia di amministrazione. Tuttavia, questa colonna sarà presente nel CSV o XML esportati.

$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',
  ));

C'è un metodo _afterLoadCollection() in Mage / Adminhtml / blocchi / Widget / Grid.php che possono essere overrided rimuovere / aggiungere le colonne per l'esportazione o la visualizzazione con $this->_isExport.

Nota: L'aggiunta di questo al _prepareCollection() non funzionerà come non sono stati presentati i filtri di raccolta, con conseguente l'intera collezione scaricato meno alcun filtraggio

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

Se avete solo bisogno di quei campi di rapporto, perché non li aggiunge solo per il rapporto? blocchi griglia hanno GetCollection metodo che restituirà modello di raccolta ed è possibile aggiungere i campi necessari per il rapporto.

Il modo più semplice per farlo è

Ripristinare il file Grid.php (APP / core / Mage / Adminhtml / block / Vendite / ordine / Grid.php)

Allora aggiungi la tua colonna personalizzata come ho fatto qui di seguito:

//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',
));

cambiamento anche fatto 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();
}

Questo significa che dobbiamo aggiungere il nostro valore colonna personalizzata per la raccolta. Per questo dobbiamo unire la nostra tavola con tavolo di raccolta griglia.

Ora andare a controllare backend, esportare gli ordini. ci sarà la nostra colonna personalizzata aggiunto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top