現在、カテゴリーの一覧には、そのカテゴリーのサブカテゴリーの商品も一覧として出てきます。
これを、真実所属するカテゴリーにまでたどり着いてから表示させたい。

つまり、
親カテゴリーAに2点。サブカテゴリーBに3点。サブカテゴリーCに2点。商品がある場合、親カテゴリーAでは合計7点の商品が掲載されますが、これを2点とし、サブカテゴリーBにたどり着いて残りの3点を出すというようなパターンにしたいです。

EC-CUBEでは該当するcategory_idより、その親カテゴリーにまで至るまでのすべてのカテゴリーの商品を引っ張るような仕組みになっています。

これを、真実そのcategory_idの商品だけひっぱる改造をします。

まず、この商品をデータとして引っ張ってくる箇所は、
data\class\pages\products\LC_Page_Products_List.phpのL.374以降です。
ここから、新着順やコード順などのひっぱるところがありますが、category_idをwhere条件として作り出しているのは
L.434あたりの
list($tmp_where, $arrval) = $objDb->sfGetCatWhere($category_id);
です。

この、sfGetWhereが親カテゴリまでさかのぼったwhere分を出す仕事をしています。

では、指定したcategory_idのみひっぱるfunctionを拡張ファイルに追加します。

data\class_extends\helper_extends\SC_Helper_DB_Ex.php
に以下のfunctionを追加します。

——————————————————————————————-

ツꀀツꀀツꀀ /**
ツꀀツꀀツꀀツꀀ * 指定したカテゴリーのWHERE文と値を返す.(一つだけ)
ツꀀツꀀツꀀツꀀ *
ツꀀツꀀツꀀツꀀ * @param integer $category_id カテゴリID
ツꀀツꀀツꀀツꀀ * @return array 商品を検索する場合の配列
ツꀀツꀀツꀀツꀀ */
ツꀀツꀀツꀀ function sfGetCatMonoWhere($category_id) {
ツꀀツꀀツꀀツꀀツꀀツꀀツꀀ $tmp_where = ” category_id = “.$category_id;
ツꀀツꀀツꀀツꀀツꀀツꀀツꀀ return $tmp_where;
ツꀀツꀀツꀀ }

——————————————————————————————-

こんなことしなくても直接書いちゃえばいいのかなーと思いますけどね。できるだけ大元のソースは変更したくないので。

で、

data\class\pages\products\LC_Page_Products_List.phpのL434を以下のように変更

$tmp_where = $objDb->sfGetCatMonoWhere($category_id);

これで、最終カテゴリーにのみ商品が表示されるようになりました。