EC-CUBE3 表示順を日付順にする方法

そもそも必要かどうかわかりませんが

「登録した日付順にしたい」

という要望がでましたので備忘録。

 

本来の趣旨

「順番のデフォルト」を変えるということ。
元々は登録ID降順で表示されているのですが、IDを管理画面とかから修正することができないので結局、デフォルトの順番を変えることはできないってことになります。

ここでは「ID降順」ではなく「他の順」で表示させるという修正方法の説明です。

 

話の矛盾した背景

本来なら「登録降順=ID降順」なので何もしなくてもいいはずなんです。
しかし、運用として他のサイトにUPした商品を週1回10件ずつCSVでUPするということをしているので、下のようなことになってしまうのです。

なので、あえて日付降順にすることにします。

 

 

デフォルトの表示順番を修正する方法

/src/Eccube/Repository/ProductRepository.php

の165行目あたりのidソートを直します

■修正前■

} else {
if ($categoryJoin === false) {
$qb
->leftJoin(‘p.ProductCategories’, ‘pct’)
->leftJoin(‘pct.Category’, ‘c’);
}
$qb
->addOrderBy(‘p.id’, ‘DESC’);
}

return $qb;
}

/**
* get query builder.
*
* @param array $searchData
* @return \Doctrine\ORM\QueryBuilder

 

 

■修正後■

} else {
if ($categoryJoin === false) {
$qb
->leftJoin(‘p.ProductCategories’, ‘pct’)
->leftJoin(‘pct.Category’, ‘c’);
}
$qb
->addOrderBy(‘p.create_date’, ‘DESC’);
}

return $qb;
}

/**
* get query builder.
*
* @param array $searchData
* @return \Doctrine\ORM\QueryBuilder

 

ここではcreate_dateで回していますが、
このソースを見ていくと

cc1.rank
p.price02_max

とかもあるので、いろいろな値を入れてカスタマイズすることができそうです。

 

 

「->addOrderBy(」とかって簡単にSQLの追加できるのが、ドクトリンのいいところだよなぁ~(^ー^)

ドクトリン?スマーティー?わからんけど。

コメントを残す