次のことで私を助けてください:
私のウェブサイトでは、カテゴリを選択すると、対応するサブカテゴリと、「このカテゴリには商品がありません」というメッセージが表示されます。これは、下位レベルのサブカテゴリに到達するまでドリルダウンしているときに発生します。
代わりに、そのサブカテゴリのすべての製品を表示したいと思います。
どうすればこれを行うことができますか?
アドバイスありがとうございました。
スティーブン
次のことで私を助けてください:
私のウェブサイトでは、カテゴリを選択すると、対応するサブカテゴリと、「このカテゴリには商品がありません」というメッセージが表示されます。これは、下位レベルのサブカテゴリに到達するまでドリルダウンしているときに発生します。
代わりに、そのサブカテゴリのすべての製品を表示したいと思います。
どうすればこれを行うことができますか?
アドバイスありがとうございました。
スティーブン
/controllers/CategoryController.php
以下のコードを開いてprocess()
メソッドに追加します。コードの追加を開始および終了する場所を示すコメントに注目してください。
public function process()
{
....
}
if ($this->category->id != 1)
$this->productListAssign();
/* MODIFICATION STARTS HERE */
if(!(isset($this->cat_products) AND $this->cat_products) ){
$this->category->id=array();
foreach($subCategories as $k=>$v){
$this->category->id[]=$v['id_category'];
}
$this->productListAssign();
}
/* MODIFICATION ENDS HERE */
self::$smarty->assign(array( ...
}
次にclasses/Category.php
、SQL クエリの WHERE 句の行を開き、次のように変更しますpublic function getProducts
。
WHERE cp.`id_category` = '.(int)$this->id.($active ? ' AND p.`active` = 1' : '').'
に
WHERE cp.`id_category` '.(is_array($this->id)?" IN(".implode(',',$this->id).") ": "=".(int)$this->id).($active ? ' AND p.`active` = 1' : '').'
これを達成するために何も変更する必要はありません。
製品をサブカテゴリだけでなく、親カテゴリにも割り当てるだけです (BO の製品編集で)。
Layered Navigation Module (blocklayered) をインストールすることもできます。このモジュールのデフォルトの動作は、ページでセレクターウィジェットが表示されていない/アクティブでない場合でも、サブカテゴリの製品を表示することです。
categoryController.php で、メソッドを見つけることができますprocess()
。これは、カテゴリ ページに表示されるすべての情報を取得するものです。すべての製品を格納する変数 ($cat_product
私の記憶が良ければ呼び出されると思います) が見つかります。空かどうかを簡単に確認できます。次に、ここからサブカテゴリを取得し (カテゴリ クラスにこのメソッドがあります)、これらのカテゴリの製品を取得する必要があります (カテゴリの製品を取得するメソッドもあります)。これは従わなければならないロジックに過ぎず、必要なすべてのコードは既にフレームワークに含まれています。
メイン ヘッダー メニューに新しいカテゴリを追加するのは非常に簡単です。モジュール - Pos Megamenu Customer に移動し、必要なものを追加するだけです。
終わり!!