バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > 子カテゴリーに属する商品数をカウント(非公開商品は除外したい)

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
hahamoe
投稿日時: 2023/10/25 15:40
対応状況: −−−
半人前
登録日: 2023/10/25
居住地:
投稿: 17
子カテゴリーに属する商品数をカウント(非公開商品は除外したい)
はじめまして。
EC-CUBE4.2で子カテゴリーを表示し、各カテゴリーに登録されている商品数を表示しています。

商品数を表示することはできたのですが、非公開商品までカウントされてしまいます。

非公開商品を除外するにはどうすれば良いのでしょうか?

アドバイスいただけると幸いです。


{{ repository('Eccube\\Entity\\Category').find(cate.id).ProductCategories|length }}
※商品数は上記コードで表示してみました。
mcontact
投稿日時: 2023/10/25 16:13
対応状況: −−−
登録日: 2022/1/22
居住地:
投稿: 1296
Re: 子カテゴリーに属する商品数をカウント(非公開商品は除外したい)
まったく同じ様な投稿が、下記にあります。
https://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=27849&forum=11&post_id=110460#forumpost110460


----------------
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
EC-CUBEインテグレートパートナー【ゴールド】ランク
M&I Works
URL: https://miworks.biz/
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

h_tanaka
投稿日時: 2023/10/25 17:56
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1646
Re: 子カテゴリーに属する商品数をカウント(非公開商品は除外したい)
ProductCategories は商品カテゴリーですので、
商品カテゴリーからさらに商品情報を取得し、商品の公開ステータスを判定する必要があります。
twig 側で処理しようとするとループ処理が重くなるので、 Repository で商品数を取得する方が良いと思います。

それでもページ表示のたびに商品数をSQLでカウントすることになるので、あらかじめ商品数をカテゴリに保存しておくほうが良いです。
詳しくは mcontact さんの挙げられているリンク先を参照してください。


----------------
EC-CUBE 《プラチナ》ランクパートナー
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

shinra
投稿日時: 2023/12/8 18:29
対応状況: −−−
一人前
登録日: 2017/9/2
居住地:
投稿: 124
Re: 子カテゴリーに属する商品数をカウント(非公開商品は除外したい)
一例ですが、バッチで定期的に商品カウントしてカテゴリに保存する場合です

ProductRepository
public function countPublicProductsByCategory($categoryId)
{
    $qb = $this->createQueryBuilder('p')
        ->select('count(p.id)')
        ->innerJoin('p.ProductCategories', 'pct')
        ->where('pct.id = :categoryId')
        ->andWhere('p.Status = :status')
        ->setParameter('categoryId', $categoryId)
        ->setParameter('status', ProductStatus::PUBLIC)
        ->getQuery();

    return $qb->getSingleScalarResult();
}


CategoryEntity
/**
 * @ORM\Column(name="product_count", type="integer", nullable=true)
 */
private $productCount;

public function getProductCount()
{
    return $this->productCount;
}

public function setProductCount($productCount)
{
    $this->productCount = $productCount;
}


CategoryRepository
public function updateProductCount($categoryId, $count)
{
    $category = $this->find($categoryId);
    $category->setProductCount($count);
    $this->em->persist($category);
    $this->em->flush();
}


UpdateCategoryProductCountCommand.php
class UpdateCategoryProductCountCommand extends Command
{
    protected static $defaultName = 'eccube:update-category-product-count';

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $categories = $this->categoryRepository->findAll();
        foreach ($categories as $category) {
            $count = $this->productRepository->countPublicProductsByCategory($category->getId());
            $this->categoryRepository->updateProductCount($category->getId(), $count);
        }

    }
}


上記のコマンドを追加したら

bin/console eccube:update-category-product-count


で定期的に処理させます

コードは実際に動作するか確認していませんので、適宜必要な個所は仕様に合わせて調整して下さい
hahamoe
投稿日時: 2023/12/20 17:18
対応状況: −−−
半人前
登録日: 2023/10/25
居住地:
投稿: 17
Re: 子カテゴリーに属する商品数をカウント(非公開商品は除外したい)
返答が遅くなり、大変申し訳ありません!
サンプルコードまでありがとうございます!

今回はjavascriptで無理やり対応しました。
こちらの方法も試させていただきたいと思います!
この度はご対応ありがとうございました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,974名です
総投稿数は110,019件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1296
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

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

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