要望や症状
EC-CUBEのマイページにおいて、お客様が決済処理中の注文を確認できないという要望があります。
理由や原因
EC-CUBE 4系では、マイページのご注文履歴で決済処理中や購入処理中の注文を自動的に非表示にする仕様になっています。
そのため、マイページのご注文履歴では、決済処理中(OrderStatus::PENDING、id:7)の注文が表示されません。管理画面の受注一覧では該当のコードを修正することで表示可能ですが、フロント画面のマイページでは表示されない状態となっています。
解決策
MypageControllerの処理で有効化されている「incomplete_order_status_hidden」フィルターを無効化し、決済処理中の注文も表示されるようにカスタマイズします。
1. EventListenerクラスの作成
src/Customize/EventListener/MypageEventListener.phpを作成します。
<?php
namespace Customize\EventListener;
use Eccube\Event\EccubeEvents;
use Eccube\Event\EventArgs;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Doctrine\ORM\EntityManagerInterface;
class MypageEventListener implements EventSubscriberInterface
{
/**
* @var EntityManagerInterface
*/
private $entityManager;
public function __construct(EntityManagerInterface $entityManager)
{
$this->entityManager = $entityManager;
}
/**
* @return array
*/
public static function getSubscribedEvents()
{
return [
EccubeEvents::FRONT_MYPAGE_MYPAGE_INDEX_SEARCH => 'onMypageIndexSearch',
];
}
/**
* マイページ注文履歴の検索処理でフィルターを無効化
*
* @param EventArgs $event
*/
public function onMypageIndexSearch(EventArgs $event)
{
// 決済処理中の注文を非表示にするフィルターを無効化
$filters = $this->entityManager->getFilters();
if ($filters->isEnabled('incomplete_order_status_hidden')) {
$filters->disable('incomplete_order_status_hidden');
}
}
}
2. サービス定義の追加
app/config/eccube/services.yamlにEventListenerを登録します。
services:
Customize\EventListener\MypageEventListener:
tags:
- { name: kernel.event_subscriber }
arguments:
- '@doctrine.orm.entity_manager'
3. キャッシュクリア
設定を反映させるため、管理画面の「コンテンツ管理」→「キャッシュ管理」からキャッシュをクリアします。
注意事項
このカスタマイズにより、決済が完了していない注文もお客様に表示されるようになります。お客様が混乱しないよう、注文ステータスの表示を分かりやすくするなど、UI面での配慮も併せて検討することをお勧めします。