Essayer de filtre par « En stock » ou « Rupture de stock » sur la grille d'administration du produit
-
16-10-2019 - |
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');
}
}
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