app/Plugin/HsdDiscountRate42/Event.php line 38

Open in your IDE?
  1. <?php
  2. namespace Plugin\HsdDiscountRate42;
  3. use Eccube\Event\TemplateEvent;
  4. use Eccube\Event\EventArgs;
  5. use Plugin\HsdDiscountRate42\Repository\HsdDiscountRate42ConfigRepository;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. class Event implements EventSubscriberInterface
  8. {
  9.     /**
  10.      * @var HsdDiscountRate42ConfigRepository
  11.      */
  12.     protected $configRepository;
  13.     /**
  14.      * ConfigController constructor.
  15.      *
  16.      * @param HsdDiscountRate42ConfigRepository $configRepository
  17.      */
  18.     public function __construct(HsdDiscountRate42ConfigRepository $configRepository)
  19.     {
  20.         $this->configRepository $configRepository;
  21.     }
  22.     /**
  23.      * @return array
  24.      */
  25.     public static function getSubscribedEvents()
  26.     {
  27.         return [
  28.             'Product/detail.twig' => 'showDiscountRate',
  29.             'Product/list.twig' => 'showDiscountRateList',
  30.         ];
  31.     }
  32.     public function showDiscountRateList(TemplateEvent $event){
  33.         $twig '@HsdDiscountRate42/default/Product/discount_rate42_show_list.twig';
  34.         $event->addSnippet($twig);
  35.         $config $this->configRepository->get();
  36.         $parameters $event->getParameters();
  37.         $product_class null;
  38.         $discount_data = array();
  39.         $pr_num 0;
  40.         foreach($parameters['pagination'] as $product){
  41.             $discount_rate_1 110// 最小の割引
  42.             $discount_rate_2 0// 最大の割引
  43.             $has_product_class 0;
  44.             $product_id $product->getId();
  45.             $tmp_ritu = array();
  46.             if( $product->hasProductClass() ){
  47.                 /*
  48.                  * 規格あり
  49.                  */
  50.                 $has_product_class 1;
  51.                 $product_classes $product->getProductClasses();
  52.                 foreach($product_classes as $pc){
  53.                     /*
  54.                     if( !empty($pc->getPrice01()) && !empty($pc->getPrice02()) ){
  55.                         $tmp = floatval($pc->getPrice02()) / floatval($pc->getPrice01());
  56.                         $tmp_b = ( 1.0 - $tmp ) * 100.0;
  57.                         if( $tmp_b < $discount_rate_1 ){
  58.                             $discount_rate_1 = $tmp_b;
  59.                         }
  60.                         if( $tmp_b > $discount_rate_2 ){
  61.                             $discount_rate_2 = $tmp_b;
  62.                         }
  63.                     }
  64.                     */
  65.                     /*
  66.                      * 規格の組み合わせから割引率を計算するように変更
  67.                      */
  68.                     $product_class_id $pc->getId();
  69.                     $tmp_b 0.0;
  70.                     if( !empty($pc->getPrice01()) && !empty($pc->getPrice02()) ){
  71.                         $tmp floatval($pc->getPrice02()) / floatval($pc->getPrice01());
  72.                         $tmp_b = ( 1.0 $tmp ) * 100.0;
  73.                     }
  74.                     $tmp_ritu[] = $product_class_id ':' round($tmp_b);
  75.                 }
  76.             }else{
  77.                 /*
  78.                  * 規格なし
  79.                  */
  80.                 if( !empty($product->getPrice01Min()) && !empty($product->getPrice02Min()) ){
  81.                     $tmp floatval($product->getPrice02Min()) / floatval($product->getPrice01Min());
  82.                     $discount_rate_1 = ( 1.0 $tmp ) * 100.0;
  83.                 }else{
  84.                     $discount_rate_1 0// 最小の割引に0(%)を設定
  85.                 }
  86.             }
  87.             $discount_data[$pr_num]['discount_rate_1'] = round($discount_rate_1);
  88.             $discount_data[$pr_num]['discount_rate_2'] = round($discount_rate_2);
  89.             $discount_data[$pr_num]['has_product_class'] = $has_product_class;
  90.             $discount_data[$pr_num]['product_id'] = $product_id;
  91.             $discount_data[$pr_num]['product_class_id_ritu'] = implode(','$tmp_ritu); // product_class ごとの割引率
  92.             $pr_num++;
  93.         }
  94.         $parameters['discount_rate'] = $discount_data;
  95.         if($config != null){
  96.             // 割引の前に表示するテキスト
  97.             if( method_exists($config'getBefTxt') ){
  98.                 $parameters['bef_txt'] = $config->getBefTxt();
  99.             }else{
  100.                 $parameters['bef_txt'] = '';
  101.             }
  102.             // 割引の後に表示するテキスト
  103.             if( method_exists($config'getAftTxt') ){
  104.                 $parameters['aft_txt'] = $config->getAftTxt();
  105.             }else{
  106.                 $parameters['aft_txt'] = 'OFF';
  107.             }
  108.             // 割引のフォントの大きさ(%)
  109.             if( method_exists($config'getShowSizeList') ){
  110.                 $parameters['font_rate'] = $config->getShowSizeList();
  111.             }else{
  112.                 $parameters['font_rate'] = '50';
  113.             }
  114.             // フォント色
  115.             if( method_exists($config'getShowColor') ){
  116.                 $parameters['font_color'] = $config->getShowColor();
  117.             }else{
  118.                 $parameters['font_color'] = '#ffffff'// 白
  119.             }
  120.             // 背景色
  121.             if( method_exists($config'getBackColor') ){
  122.                 $parameters['back_color'] = $config->getBackColor();
  123.             }else{
  124.                 $parameters['back_color'] = '#ff0000'// 赤
  125.             }
  126.             // 割引表示をする/しない
  127.             if( method_exists($config'getIsShow') ){
  128.                 $parameters['is_show'] = $config->getIsShow();
  129.             }else{
  130.                 $parameters['is_show'] = 1// 割引表示をする
  131.             }
  132.             // 商品一覧に表示をする/しない
  133.             if( method_exists($config'getIsListpage') ){
  134.                 $parameters['is_listpage'] = $config->getIsListpage();
  135.             }else{
  136.                 $parameters['is_listpage'] = 1// 一覧に表示する
  137.             }
  138.         }else{
  139.             $parameters['bef_txt'] = '';
  140.             $parameters['aft_txt'] = 'OFF';
  141.             $parameters['font_rate'] = '50';
  142.             $parameters['font_color'] = '#ffffff'// 白
  143.             $parameters['back_color'] = '#ff0000'// 赤
  144.             $parameters['is_show'] = 1// 割引表示をする
  145.             $parameters['is_listpage'] = 1// 一覧に表示する
  146.         }
  147.         // 割引の後に表示するテキスト
  148.         $event->setParameters($parameters);
  149.     }
  150.     public function showDiscountRate(TemplateEvent $event){
  151.         $twig '@HsdDiscountRate42/default/Product/discount_rate42_show.twig';
  152.         $event->addSnippet($twig);
  153.         $config $this->configRepository->get();
  154.         $parameters $event->getParameters();
  155.         $product $parameters['Product'];
  156.         $product_class null;
  157.         $discount_rate_1 110// 最小の値引
  158.         $discount_rate_2 0// 最大の値引
  159.         $has_product_class 0;
  160.         $product_id $product->getId();
  161.         $tmp_ritu = array();
  162.         if( $product->hasProductClass() ){
  163.             /*
  164.              * 規格あり
  165.              */
  166.             $has_product_class 1;
  167.             $product_classes $product->getProductClasses();
  168.             foreach($product_classes as $pc){
  169.                 /*
  170.                 if( !empty($pc->getPrice01()) && !empty($pc->getPrice02()) ){
  171.                     $tmp = floatval($pc->getPrice02()) / floatval($pc->getPrice01());
  172.                     $tmp_b = ( 1.0 - $tmp ) * 100.0;
  173.                     if( $tmp_b < $discount_rate_1 ){
  174.                         $discount_rate_1 = $tmp_b;
  175.                     }
  176.                     if( $tmp_b > $discount_rate_2 ){
  177.                         $discount_rate_2 = $tmp_b;
  178.                     }
  179.                 }
  180.                 */
  181.                 /*
  182.                  * 規格の組み合わせから割引率を計算するように変更
  183.                  */
  184.                 $product_class_id $pc->getId();
  185.                 $tmp_b 0.0;
  186.                 if( !empty($pc->getPrice01()) && !empty($pc->getPrice02()) ){
  187.                     $tmp floatval($pc->getPrice02()) / floatval($pc->getPrice01());
  188.                     $tmp_b = ( 1.0 $tmp ) * 100.0;
  189.                 }
  190.                 $tmp_ritu[] = $product_class_id ':' round($tmp_b);
  191.             }
  192.         }else{
  193.             /*
  194.              * 規格なし
  195.              */
  196.             if( !empty($product->getPrice01Min()) && !empty($product->getPrice02Min()) ){
  197.                 $tmp floatval($product->getPrice02Min()) / floatval($product->getPrice01Min());
  198.                 $discount_rate_1 = ( 1.0 $tmp ) * 100.0;
  199.             }else{
  200.                 $discount_rate_1 0// 最小の割引に0(%)を設定
  201.             }
  202.         }
  203.         $parameters['discount_rate_1'] = round($discount_rate_1);
  204.         $parameters['discount_rate_2'] = round($discount_rate_2);
  205.         $parameters['has_product_class'] = $has_product_class;
  206.         $parameters['product_id'] = $product_id;
  207.         $parameters['product_class_id_ritu'] = implode(','$tmp_ritu); // product_class ごとの割引率
  208.         /*
  209.          * パラメータのデフォルト設定
  210.          */
  211.         if($config != null){
  212.             // 表示位置
  213.             if( method_exists($config'getShowAddr') ){
  214.                 $parameters['show_addr'] = $config->getShowAddr();
  215.             }else{
  216.                 $parameters['show_addr'] = 3// 販売価格の右
  217.             }
  218.             // 割引の前に表示するテキスト
  219.             if( method_exists($config'getBefTxt') ){
  220.                 $parameters['bef_txt'] = $config->getBefTxt();
  221.             }else{
  222.                 $parameters['bef_txt'] = '';
  223.             }
  224.             // 割引の後に表示するテキスト
  225.             if( method_exists($config'getAftTxt') ){
  226.                 $parameters['aft_txt'] = $config->getAftTxt();
  227.             }else{
  228.                 $parameters['aft_txt'] = 'OFF';
  229.             }
  230.             // 割引のフォントの大きさ(%)
  231.             if( method_exists($config'getShowSize') ){
  232.                 $parameters['font_rate'] = $config->getShowSize();
  233.             }else{
  234.                 $parameters['font_rate'] = '100';
  235.             }
  236.             // フォント色
  237.             if( method_exists($config'getShowColor') ){
  238.                 $parameters['font_color'] = $config->getShowColor();
  239.             }else{
  240.                 $parameters['font_color'] = '#ffffff'// 白
  241.             }
  242.             // 背景色
  243.             if( method_exists($config'getBackColor') ){
  244.                 $parameters['back_color'] = $config->getBackColor();
  245.             }else{
  246.                 $parameters['back_color'] = '#ff0000'// 赤
  247.             }
  248.             // 割引表示をする/しない
  249.             if( method_exists($config'getIsShow') ){
  250.                 $parameters['is_show'] = $config->getIsShow();
  251.             }else{
  252.                 $parameters['is_show'] = 1// 割引表示をする
  253.             }
  254.         }else{
  255.             $parameters['show_addr'] = 3// 販売価格の右
  256.             $parameters['bef_txt'] = '';
  257.             $parameters['aft_txt'] = 'OFF';
  258.             $parameters['font_rate'] = '100';
  259.             $parameters['font_color'] = '#ffffff'// 白
  260.             $parameters['back_color'] = '#ff0000'// 赤
  261.             $parameters['is_show'] = 1// 割引表示をする
  262.         }
  263.         $event->setParameters($parameters);
  264.     }
  265. }