Essayer de filtre par « En stock » ou « Rupture de stock » sur la grille d'administration du produit

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

Question

J'ai réussi à été en mesure d'obtenir si un produit est « En stock » ou « Rupture de stock » dans la grille produit admin Magento en utilisant un observateur de la manière indiquée ci-dessous. Cependant, lorsque je tente de filtre par « En stock » ou « Rupture de stock », il ne fonctionne tout simplement pas.

Je crois que cela est de faire avec l'index de filtre et veiller à ce que la collection associe la colonne de stock avec la table jointe pour le filtrage. Je ne suis pas sûr comment obtenir ce travail - si quelqu'un a des suggestions, il serait très apprécié. J'ai mis mon code existant ci-dessous:

etc / config.xml

<config>
<global>
    <models>
        <stockcolumn>
            <class>Creare_Stockcolumn_Model</class>
        </stockcolumn>
    </models>
</global>
<adminhtml>
    <events>
       <eav_collection_abstract_load_before>
            <observers>
                <stockcollection>
                    <class>stockcolumn/observer</class>
                    <method>onEavLoadBefore</method>
                </stockcollection>
            </observers>
        </eav_collection_abstract_load_before>
        <adminhtml_block_html_before>
            <observers>
                <addstockcolumn>
                    <class>stockcolumn/observer</class>
                    <method>onBlockHtmlBefore</method>
                </addstockcolumn>
            </observers>
        </adminhtml_block_html_before>
    </events>
</adminhtml>
</config>

Modèle / Observer.php

class Creare_Stockcolumn_Model_Observer {

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

    switch ($block->getType()) {
        case 'adminhtml/catalog_product_grid':
            $block->addColumn('stock_status',
                array(
                       'header'=> 'Stock Status',
                       'width' => '60px',
                       'index' => 'stock_status',
                       'filter_index'=>'inv.stock_status',
                       'type'  => 'options',
                       'options' => array('1'=>'In Stock','0'=>'Out Of Stock'),
                ));
            break;
    }
}

public function onEavLoadBefore(Varien_Event_Observer $observer) {
    $collection = $observer->getCollection();
    $collection->joinTable( array('inv' => 'cataloginventory/stock_item'), 'product_id = entity_id', array("stock_status" => "is_in_stock") )->addAttributeToSelect('stock_status');

}
}
Était-ce utile?

La solution

Ils pourraient ajouter l'état du stock au réseau et à l'aide que pour rechercher avec? Ce lien sur magento.SE à partir il y a quelques jours vous aider à ajouter l'état des stocks au réseau et en fait un outil de filtrage facile. Je l'ai essayé sur 7/1/02 et il a très bien fonctionné.

Autres conseils

Comme il est un module personnalisé, nous avons besoin d'écrire une méthode pour filtrer l'état du stock dans l'observateur comme suit:

public function filterStockStatus($collection, $column)
{
    $filterValue = $column->getFilter()->getValue();
    $collection->joinField(
                    'is_in_stock',
                    'cataloginventory/stock_item',
                    'is_in_stock',
                    'product_id=entity_id',
                    '{{table}}.stock_id=1',
                    'left'
    )->addFieldToFilter('is_in_stock', array('eq' => $filterValue));
}

Note:. Utilisez le nom de la méthode correspondante dans la méthode addColumn

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