Question

J'ai créé un rapport personnalisé. Le rapport a un nombre important de domaines dans ce qui sont nécessaires pour quand il est exporté en format CSV.

Ce que je suis en train de comprendre est de savoir s'il y a un moyen d'omettre le rendu de certains des champs sur la grille frontale. La plupart d'entre eux ne sont pas vraiment importants pour le processus de filtrage en administration et ne sont utilisés que lorsque le rapport est téléchargé plus en dehors de l'analyse syntaxique de Magento.

J'attendre à ce que type de fonctionnalité Résider dans la classe de grille comme c'est ce que génère la grille réelle et, plus tard, le CSV exporté mais je ne vois rien qui ressemble comme il traite la visibilité.

Avant d'aller et méthodes de remplacement dans cette classe pour notre rapport personnalisé, est-il un moyen moins connu pour accomplir ce qui est plus facile que mon ajout d'une sorte de propriété « showInGrid » via le tableau de la propriété addColumn?

  

TL, DR est-il un moyen facile d'avoir des champs exportés (en dire, CSV ou   XML) mais omis dans la grille d'administration?

Était-ce utile?

La solution

Créer une définition de bloc séparé - par exemple dupliquer le bloc de grille à un autre bloc qui est spécifique pour votre CSV; Je qualifierais ce Csvgrid.php au lieu de Grid.php -. Il contiendrait toutes les mêmes fonctionnalités que le Grid.php normal contient, mais omettre une colonne

Dans votre contrôleur:

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

Lors de la duplication de la grille, le lieu Csvgrid.php dans le même répertoire physique Grid.php mais le renommer en conséquence - ne pas oublier de changer le nom de la classe!

Modifier

Alors il se avère que Mage_Adminhtml_Block_Widget_Grid a une méthode appelée removeColumn - définie comme:

/

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

Je pense que parce Mage_Adminhtml_Block_Report_Grid étend Mage_Adminhtml_Block_Widget_Grid elle hérite de cette méthode et devrait pouvoir être utilisé. Je, dans ce cas, créez un nouveau bloc de grille et étendre le réseau que votre rapport actuel est. De là, vous pouvez utiliser votre propre méthode de prepareColumns, appelez le parent::_prepareColumns() puis appelez removeColumn ..

Bonne chance.

Autres conseils

Vous pouvez utiliser le jeu column_css_class et header_css_class comme no-display à la colonne que vous souhaitez masquer. Cela permet de masquer votre colonne de la grille d'administration. Cependant, cette colonne sera présent dans le format CSV ou XML exporté.

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

Il y a une _afterLoadCollection() méthode dans Mage / Adminhtml / Bloquer / Widget / Grid.php qui peut être overrided pour supprimer / ajouter des colonnes pour l'exportation ou l'affichage avec $this->_isExport.

NOTE: Ajouter cela au _prepareCollection() ne fonctionnera pas comme les filtres de collecte n'ont été soumis, ce qui dans la collection sous-évaluées, moins tout filtrage

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

Si vous avez seulement besoin de ces domaines pour le rapport, pourquoi ne pas les ajouter pour le rapport uniquement? blocs de grille ont méthode getCollection qui retournera modèle de collection et vous pouvez ajouter des champs dont vous avez besoin pour votre rapport.

La façon facile à faire est

retombons le fichier Grid.php (app / core / Mage / Adminhtml / Bloc / Ventes / commande / Grid.php)

puis ajoutez votre colonne personnalisée comme je l'ai fait ci-dessous:

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

a également fait du changement dans

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

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 collection de la grille.

Maintenant, allez vérifier backend, exporter les commandes. il sera notre colonne personnalisée ajouté.

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top