Comment récupérer/ajouter une colonne personnalisée dans la grille de liste de produits dans l'administrateur

magento.stackexchange https://magento.stackexchange.com//questions/60891

Question

J'ai créé un nouveau module afin d'ajouter une colonne à la liste de produits affichée dans la section admin de Magento.La colonne affiche un identifiant et je souhaite qu'elle affiche le nom (d'une autre table) appartenant à cet identifiant.

app/code/local/Mypackage/Customgrid/etc/Config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Mypackage_Customgrid>
            <version>0.4.0</version>
        </Mypackage_Customgrid>
    </modules>

    <global>
        <models>
            <mypackage_customgrid>
                <class>Mypackage_Customgrid_Model</class>
            </mypackage_customgrid>
        </models>
    </global>

    <adminhtml>
        <events>
            <core_block_abstract_prepare_layout_before>
                <observers>
                    <customgrid_column_append>
                        <type>model</type>
                        <class>Mypackage_Customgrid_Model_Observer</class>
                        <method>appendCustomColumn</method>
                    </customgrid_column_append>
                </observers>
            </core_block_abstract_prepare_layout_before>
        </events>
    </adminhtml>
</config>

app/code/local/Mypackage/Customgrid/Model/Observer.php

class Mypackage_Customgrid_Model_Observer extends Varien_Event_Observer {

    public function appendCustomColumn(Varien_Event_Observer $observer) {
        $block = $observer->getBlock();
        if (!isset($block)) {
            return $this;
        }

        if ($block->getType() == 'adminhtml/catalog_product_grid') {
            /* @var $block Mage_Adminhtml_Block_Customer_Grid */
            $block->addColumnAfter('udropship_vendor', array(
                'header'    => 'Vendor',
                'index'     => 'udropship_vendor',
                'type'  => 'text',
            ), 'visibility');
        }
    }
}

Comme vous pouvez le voir dans le code ci-dessus, j'utilise l'extension uDropship.Le code ci-dessus affiche l'ID du fournisseur associé à chaque produit, mais j'aimerais que cette colonne affiche le nom du fournisseur associé à chaque produit.

J'ai essayé de modifier la récupération de collection dans le fichier app/code/core/Adminhtml/Block/Catalog/Product/Grid.php (uniquement à des fins de test, j'écraserai ce fichier si je trouve comment faire cela).Mais je ne comprends pas comment obtenir la valeur du nom de la base de données.

Au fait, le schéma de table dans lequel les données que je souhaite afficher sont stockées ressemble à quelque chose comme ça

table: magentoudropship_vendor
    vendor_id
    vendor_name
    [...]

Quelqu'un est-il capable de me guider dans cette démarche ?Tout ce qui peut m'aider à comprendre comment manipuler la base de données est le bienvenu.

Était-ce utile?

La solution

app/code/core/Adminhtml/Block/Catalog/Product/Grid.php est le bon point de départ.Ce que vous devez faire, c'est réécrire Mage_Adminhtml_Block_Catalog_Product_Grid::_prepareCollection et rejoignez magentoudropship_vendor, afin que vous ayez accès au vendor_name pour la grille.Je suppose que tu as vendor_id comme attribut du produit (corrigez-moi si je me trompe).

De plus, j'ajouterais la colonne à la grille de la liste de produits dans cette réécriture.Voir Mage_Adminhtml_Block_Catalog_Product_Grid::_prepareColumns.C'est ici que vous pouvez ajouter des colonnes supplémentaires.

Il te faut quelque chose comme...

protected function _prepareCollection()
{
    $resource = Mage::getSingleton('core/resource');
    $collection = Mage::getModel('catalog/product')->getCollection()
        ->addAttributeToSelect('sku')
        ->addAttributeToSelect('name')
        ->addAttributeToSelect('attribute_set_id')
        ->addAttributeToSelect('type_id');

    $collection->getSelect()
        ->join(
            array('v' => $resource->getTableName('...')), // Insert approprirate alias to get `magentoudropship_vendor`
            'main_table.vendor_id = v.vendor_id',
            array('vendor_name')    // List of wanted columns from the custom table
        );
    ...
}

Alias ​​pour le getTableName() la méthode se trouve dans votre config.xml de l'extension uDropShip.par exemple. model_alias/table_name.Copiez et collez le <models>...<models> si vous n'êtes toujours pas sûr.

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