バージョン選択

フォーラム

メニュー

オンライン状況

21 人のユーザが現在オンラインです。 (11 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 21
もっと...

サイト内検索

質問 > フロント機能 > 特定のカテゴリの商品リスト作成について

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
rokuatsu
投稿日時: 2022/9/14 17:30
対応状況: −−−
新米
登録日: 2022/9/14
居住地:
投稿: 3
特定のカテゴリの商品リスト作成について
▼テンプレート
[EC-CUBE] EC-CUBE4.1.2

お世話になります。
TOPページやサイドバーに特定のカテゴリの商品リストを作成したいと考えております。

下記コードで商品リストを呼び出すことはできたのですが、並び順の変更方法がわからず困っております、、

======================

{% set Category = repository("Eccube\\Entity\\Category").find(カテゴリID) %}
{%
set products = repository("Eccube\\Entity\\Product")
.getQueryBuilderBySearchData({'category_id':Category})
.setMaxResults(10)
.getQuery()
.getResult()
%}

<ul>
{% if products %}
{% for p in products %}
<li class="product_item">
<a href="{{ url('product_detail', {'id': p.id}) }}">
<p class="ec-newItemRole__listItemTitle">{{ p.name }}</p>
</a>
</li>
{% endfor %}
{% endif %}
</ul>

======================


現状は新しく登録した商品が呼び出すリストの1番上に追加されてしまい、登録日の早いもの(商品IDの若いもの)がどんどん下にいってしまう状況なのですが、
扱う商品の性質上、新しく追加した商品がリストの1番下に追加されていくことを理想としております。
(商品登録びの早いもの順、商品IDの若い順に上から並んでいくイメージでございます。)

上記コードにおいて、カテゴリ商品の呼び出し順を指定することはできないでしょうか?
ご教示いただけますと幸いでございます、、

どうぞよろしくお願いいたします。
tacky14
投稿日時: 2022/9/15 12:29
対応状況: −−−
半人前
登録日: 2021/4/23
居住地:
投稿: 16
Re: 特定のカテゴリの商品リスト作成について
src\Eccube\Repository\ProductRepository.php のgetQueryBuilderBySearchData()
// Order By 以下のIf文で並び順が指定できますね。
ただ、ここではP.id DESC で固定されてしまっているので、ソース改修しないと難しいのでは?と思います。

商品の並び順は、mtb_product_list_order_by でマスタ登録されているので
管理画面のマスタデータ管理から、IDと名称を登録

app\Customize\以下に同ファイルをコピーして

// 作成日順
        } elseif (!empty($searchData['orderby']) && $searchData['orderby']->getId() == 登録したマスタID) {
            if ($categoryJoin === false) {
                $qb
                    ->leftJoin('p.ProductCategories', 'pct')
                    ->leftJoin('pct.Category', 'c');
            }
            $qb->orderBy('p.create_date', 'ASC');
            $qb->addOrderBy('p.id', 'ASC');

このような形でOrderByのIf文に作成日順のパターンを追加。

tenplate側で
{% set Category = repository("Eccube\\Entity\\Category").find(カテゴリID) %}
{% set ProductListOrderBy = repository("Eccube\\Entity\\Master\\ProductListOrderBy").find(登録したマスタID) %}
{%
set products = repository("Eccube\\Entity\\Product")
.getQueryBuilderBySearchData({'category_id':Category, 'orderby': ProductListOrderBy})
.getQuery()
.getResult()
%}

このような形で調整すると、作成日順に取得できるのではないかと思います。
rokuatsu
投稿日時: 2022/9/18 14:03
対応状況: 解決済
新米
登録日: 2022/9/14
居住地:
投稿: 3
Re: 特定のカテゴリの商品リスト作成について
ご回答いただきありがとうございます!
まだテスト環境での実装ですが、
おかげさまで理想の形で商品リストを呼び出すことができました…!

ご質問した段階でマスタデータ管理での並び順の登録や
ProductRepository.phpへの書き足しは行っていたのですが、呼び出したリストには反映されていない状況でした。
呼び出す際のコードで並び順を指定する必要があったのですね!
ずっとわからず困っていたので、ご教示いただき大変助かりました、、

ありがとうございました…!
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン



統計情報

総メンバー数は75,694名です
総投稿数は104,547件です

投稿数ランキング

1
seasoft
7333
2
468
3217
3
AMUAMU
2712
4
nanasess
2205
5
umebius
2085
6
yuh
1664
7
red
1547
8
h_tanaka
1189
9
tsuji
942
10
fukap
907
11
shutta
835
12
tao_s
794
13 ramrun 789
14 karin 689
15 sumida 641
16
homan
633
17 DELIGHT 572
18
patapata
502
19
flealog
485
20 tonton 437


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.