app/Plugin/ApexOrderItemOption/Event/ProductEvent.php line 80

Open in your IDE?
  1. <?php
  2. namespace Plugin\ApexOrderItemOption\Event;
  3. use Eccube\Event\TemplateEvent;
  4. use Plugin\ApexOrderItemOption\Repository\ProductOptionRepository;
  5. use Plugin\ApexOrderItemOption\Service\ProductOptionService;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. class ProductEvent implements EventSubscriberInterface
  8. {
  9.     private $productOptionRepository;
  10.     private $productOptionService;
  11.     public function __construct(
  12.         ProductOptionRepository $productOptionRepository,
  13.         ProductOptionService $productOptionService
  14.     ){
  15.         $this->productOptionRepository $productOptionRepository;
  16.         $this->productOptionService $productOptionService;
  17.     }
  18.     /**
  19.      * @return array
  20.      */
  21.     public static function getSubscribedEvents()
  22.     {
  23.         return [
  24.             'Product/list.twig' => 'onTemplateProductList',
  25.             'Product/detail.twig' => 'onTemplateProductDetail',
  26.         ];
  27.     }
  28.     public function onTemplateProductList(TemplateEvent $event)
  29.     {
  30.         $parameters $event->getParameters();
  31.         $Products $parameters['pagination'];
  32.         $source $event->getSource();
  33.         // カート追加のフォームが存在しない場合は処理を行わない
  34.         if(!preg_match('/url\(\'product_add_cart\'/',$source$result)){
  35.             return;
  36.         }
  37.         $optionParameters $this->productOptionService->getOptionParameters($Products);
  38.         $parameters array_merge($parameters$optionParameters);
  39.         $parameters['ProductOptions'] = $this->productOptionRepository->getListByProducts($Products);
  40.         $event->setParameters($parameters);
  41.         $twig 'Product/option_css.twig';
  42.         $event->addAsset($twig);
  43.         $twig '@ApexOrderItemOption/default/Product/option_js.twig';
  44.         $event->addSnippet($twig);
  45.         $twig '@ApexOrderItemOption/default/Product/list_js.twig';
  46.         $event->addSnippet($twig);
  47.         if(!preg_match('/include\(\s*\'Product\/option\.twig/',$source$result)){
  48.             if(preg_match("/\<div\sclass\=\"ec\-numberInput\"\>/",$source$result)){
  49.                 $search $result[0];
  50.                 $replace "{{ include('Product/option.twig') }}" $search;
  51.                 $source str_replace($search$replace$source);
  52.             }
  53.         }
  54.         if(!preg_match('/include\(\s*\'Product\/option\_description\.twig/',$source$result)){
  55.             if(preg_match("/\<div\sclass\=\"ec\-modal\"\>/",$source$result)){
  56.                 $search $result[0];
  57.                 $replace "{{ include('Product/option_description.twig') }}" $search;
  58.                 $source str_replace($search$replace$source);
  59.             }
  60.         }
  61.         $event->setSource($source);
  62.     }
  63.     public function onTemplateProductDetail(TemplateEvent $event)
  64.     {
  65.         $parameters $event->getParameters();
  66.         $Product $parameters['Product'];
  67.         $Products = [$Product];
  68.         $optionParameters $this->productOptionService->getOptionParameters($Products);
  69.         $parameters array_merge($parameters$optionParameters);
  70.         $parameters['ProductOptions'] = $Product->getProductOptions();
  71.         $event->setParameters($parameters);
  72.         $twig 'Product/option_css.twig';
  73.         $event->addAsset($twig);
  74.         $twig '@ApexOrderItemOption/default/Product/option_js.twig';
  75.         $event->addSnippet($twig);
  76.         $twig '@ApexOrderItemOption/default/Product/detail_js.twig';
  77.         $event->addSnippet($twig);
  78.         $source $event->getSource();
  79.         if(!preg_match('/include\(\s*\'Product\/option\.twig/',$source$result)){
  80.             if(preg_match("/\<div\sclass\=\"ec\-numberInput\"\>/",$source$result)){
  81.                 $search $result[0];
  82.                 $replace "{{ include('Product/option.twig') }}" $search;
  83.                 $source str_replace($search$replace$source);
  84.             }
  85.         }
  86.         if(!preg_match('/include\(\s*\'Product\/option\_description\.twig/',$source$result)){
  87.             if(preg_match("/\<div\sclass\=\"ec\-modal\"\>/",$source$result)){
  88.                 $search $result[0];
  89.                 $replace "{{ include('Product/option_description.twig') }}" $search;
  90.                 $source str_replace($search$replace$source);
  91.             }
  92.         }
  93.         $event->setSource($source);
  94.     }
  95. }