製品リストページから在庫切れの子供製品の可用性で設定可能な製品を隠す
-
12-12-2019 - |
質問
私は、単一の関連する単純な製品でさえ在庫切れの製品リストページからのすべての設定可能な製品を隠したいと思います。まず最初に設定可能な製品をフィルタリングしようとしていますが、私は以下のエラーを獲得しています
SQLSTATE [42S22]:列見つかりません:1054不明な列 'e.type_id' 'where句'
catalog_block_product_list_collection
イベントを使用しています。
これはconfig.xmlからのイベントセクションコードです。
<events>
<catalog_block_product_list_collection>
<observers>
<retailon_configurable_list>
<type>singleton</type>
<class>retailon_configurable/observer</class>
<method>addInStockOnlyFilter</method>
-</retailon_configurable_list>
</observers>
</catalog_block_product_list_collection>
</events>
.
これはobserver
コードです:
<?php
class Retailon_Configurable_Model_Observer {
/**
* Observes the catalog_block_product_list_collection event
*/
public function addInStockOnlyFilter($observer){
$productCollection = $observer->getEvent()->getCollection()->addAttributeToFilter('type_id', 'configurable');
}
}
.
与えられた条件を提供した場合、observer
で製品をフィルタリングする方法はありますか?
解決
私はそれを作業しました。これがオブザーバーコードです:
<?php
class Retailon_Configurable_Model_Observer {
public function addInStockOnlyFilter($observer){
$productCollection = $observer->getEvent()->getCollection();
foreach ($productCollection as $product) {
if ($product->getTypeId() == "configurable"){
$product->getTypeInstance(true)->getUsedProducts ( null, $product);
foreach ($product->getTypeInstance(true)->getUsedProducts ( null, $product) as $simple) {
//all associated product
if($simple->getStockItem()->getQty() < 1 ){
$proArray[] = $product->getId();
}
}
}
}
if(count($proArray)){
foreach ($proArray as $key) {
$productCollection->removeItemByKey($key);
}
}
$observer->getEvent()->setCollection($productCollection);
}
}
. 所属していません magento.stackexchange