EC-CUBEでは受注登録画面で商品追加の際、商品検索に非公開や廃止ステータスの商品もヒットしてしまいます。
非公開の商品は受注に追加したい場合もあるので表示されてよいと思いますが、廃止ステータスの商品は表示したくない場合も多いのではないでしょうか。
この記事では受注画面の商品検索時に廃止ステータスの商品を除外するカスタマイズ方法をご紹介します。
カスタマイズ方法
EccubeEvents::ADMIN_ORDER_EDIT_SEARCH_PRODUCT_SEARCHイベントをフックしましょう。
Customizeディレクトリに次のようなファイルを置いてください。
ファイル名:app/Customize/Event/AdminOrderProductSearchListener.php
<?php /* * This file is part of EC-CUBE * * Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved. * * http://www.ec-cube.co.jp/ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ /** * @see https://umebius.com/eccube/admin_order_search_product_status/ */ namespace Customize\Event; use Eccube\Entity\Master\ProductStatus; use Eccube\Event\EccubeEvents; use Eccube\Event\EventArgs; use Symfony\Component\EventDispatcher\EventSubscriberInterface; class AdminOrderProductSearchListener implements EventSubscriberInterface { /** * {@inheritdoc} */ public static function getSubscribedEvents() { return [ EccubeEvents::ADMIN_ORDER_EDIT_SEARCH_PRODUCT_SEARCH => 'index', ]; } public function index(EventArgs $event) { $qb = $event->getArgument('qb'); $qb ->andWhere('p.Status <> :STATUS_DISPLAY_ABOLISHED') ->setParameter('STATUS_DISPLAY_ABOLISHED', ProductStatus::DISPLAY_ABOLISHED); } }
他の方法は?
ProductRepositoryの拡張としてQueryKey::PRODUCT_SEARCH_ADMINというイベントを使う方法もあります。
ただ、QueryKey::PRODUCT_SEARCH_ADMINをフックすると「商品一覧」ページにも影響が出てしまうので、URL等の情報によって処理を分岐させる必要があり、やや難易度が高くなっています。
そのため今回はレポジトリのイベントではなく、EccubeEvents::ADMIN_ORDER_EDIT_SEARCH_PRODUCT_SEARCHイベントをフックする方法をご紹介しました。
EC-CUBEに関するお問い合わせ
[重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。