app/Plugin/KokokaraSelect/EventSubscriber/ProductEventSubscriber.php line 45

Open in your IDE?
  1. <?php
  2. /**
  3.  * Copyright(c) 2020 SYSTEM_KD
  4.  * Date: 2020/05/17
  5.  */
  6. namespace Plugin\KokokaraSelect\EventSubscriber;
  7. use Eccube\Entity\Product;
  8. use Eccube\Event\EventArgs;
  9. use Eccube\Event\TemplateEvent;
  10. use Plugin\KokokaraSelect\Config\ConfigSetting;
  11. use Plugin\KokokaraSelect\Service\KsService;
  12. use Plugin\KokokaraSelect\Service\PlgConfigService\ConfigService;
  13. use Plugin\KokokaraSelect\Service\TwigRenderService\EventSubscriber\TwigRenderTrait;
  14. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  15. class ProductEventSubscriber implements EventSubscriberInterface
  16. {
  17.     use TwigRenderTrait;
  18.     /** @var ConfigService */
  19.     protected $configService;
  20.     /** @var KsService */
  21.     protected $ksService;
  22.     public function __construct(
  23.         ConfigService $configService,
  24.         KsService $ksService
  25.     )
  26.     {
  27.         $this->configService $configService;
  28.         $this->ksService $ksService;
  29.     }
  30.     /**
  31.      * @param TemplateEvent $event
  32.      * @throws \Twig_Error_Loader
  33.      * @throws \Twig_Error_Runtime
  34.      * @throws \Twig_Error_Syntax
  35.      */
  36.     public function onProductListTemplate(TemplateEvent $event)
  37.     {
  38.         $source $event->getSource();
  39.         // カートボタン
  40.         $searchKey '<div class="ec-productRole__btn">';
  41.         if ($this->configService->isKeyBool(ConfigSetting::SETTING_KEY_CART_BUTTON_VIEW)) {
  42.             $replaceTemplate '@KokokaraSelect\default\Product\replace_list_cart_btn.twig';
  43.         } else {
  44.             $replaceTemplate '@KokokaraSelect\default\Product\replace_list_cart.twig';
  45.         }
  46.         $source $this->templateReplace($source$searchKey$replaceTemplate);
  47.         // 数量選択
  48.         $searchKey '<div class="ec-numberInput">';
  49.         $replaceTemplate '@KokokaraSelect\default\Product\replace_list_quantity.twig';
  50.         $event->setSource($this->templateReplace($source$searchKey$replaceTemplate));
  51.     }
  52.     /**
  53.      * 商品詳細テンプレート
  54.      *
  55.      * @param TemplateEvent $event
  56.      */
  57.     public function onProductDetailTemplate(TemplateEvent $event)
  58.     {
  59.         /** @var Product $product */
  60.         $product $event->getParameter('Product');
  61.         if ($this->ksService->isKsProduct($product)) {
  62.             $ksProduct $product->getKsProduct();
  63.             if ($ksProduct->isDirectSelect()) {
  64.                 // 固定セット商品の明細表示
  65.                 $this->initRenderService($event);
  66.                 $this->createInsertBuilder()
  67.                     ->find('.ec-productRole__price')
  68.                     ->setTargetId('kokokara_select_items')
  69.                     ->setInsertModeAfter();
  70.                 $this->addTwigRenderSnippet('@KokokaraSelect\default\Product\detail_add.twig');
  71.                 $event->addSnippet('@KokokaraSelect\default\Product\detail_add_css.twig');
  72.             }
  73.         }
  74.     }
  75.     /**
  76.      * @param TemplateEvent $event
  77.      * @throws \Twig_Error_Loader
  78.      * @throws \Twig_Error_Runtime
  79.      * @throws \Twig_Error_Syntax
  80.      */
  81.     public function onCartInRecommendTemplate(TemplateEvent $event)
  82.     {
  83.         $source $event->getSource();
  84.         $searchKey '<div class="cart_in_recommend_btn">';
  85.         if ($this->configService->isKeyBool(ConfigSetting::SETTING_KEY_CART_BUTTON_VIEW)) {
  86.             $replaceTemplate '@KokokaraSelect\default\Product\replace_cart_in_recommend_btn.twig';
  87.         } else {
  88.             $replaceTemplate '@KokokaraSelect\default\Product\replace_cart_in_recommend.twig';
  89.         }
  90.         $event->setSource($this->templateReplace($source$searchKey$replaceTemplate));
  91.     }
  92.     /**
  93.      * @param $source
  94.      * @param $searchKey
  95.      * @param $replaceTemplate
  96.      * @return string|string[]
  97.      * @throws \Twig_Error_Loader
  98.      * @throws \Twig_Error_Runtime
  99.      * @throws \Twig_Error_Syntax
  100.      */
  101.     private function templateReplace($source$searchKey$replaceTemplate)
  102.     {
  103.         $replace $this->twigRenderService->readTemplate($replaceTemplate, [], false);
  104.         $source str_replace($searchKey$replace$source);
  105.         return $source;
  106.     }
  107.     /**
  108.      * タイムセール連携
  109.      *
  110.      * @param EventArgs $event
  111.      */
  112.     public function onPinpointSaleHelperHookRoute(EventArgs $event)
  113.     {
  114.         $hookRoute $event->getArgument('hookRoute');
  115.         $hookRoute['kokokara_select_list'] = 1;
  116.         $hookRoute['kokokara_select_list_edit'] = 1;
  117.         $hookRoute['product_select_add_cart'] = 1;
  118.         $event->setArgument('hookRoute'$hookRoute);
  119.     }
  120.     public static function getSubscribedEvents()
  121.     {
  122.         return [
  123.             // 商品一覧テンプレート
  124.             'Product/list.twig' => ['onProductListTemplate'],
  125.             // 商品詳細テンプレート
  126.             'Product/detail.twig' => ['onProductDetailTemplate'],
  127.             // カートイン時レコメンド
  128.             '@CartInRecommend/default/Product/recommend.twig' => ['onCartInRecommendTemplate'],
  129.             // タイムセール
  130.             'pinpoint_sale.helper.hook_route' => ['onPinpointSaleHelperHookRoute'],
  131.         ];
  132.     }
  133. }