app/Customize/Service/CategoryService.php line 250

Open in your IDE?
  1. <?php
  2. /**
  3.  * @version EC=CUBE4
  4.  * @copyright 株式会社 翔 kakeru.co.jp
  5.  * @author
  6.  * 2022年08月19日作成
  7.  *
  8.  * app/Customize/Service/CategoryService.php
  9.  *
  10.  *
  11.  * カテゴリーサービス
  12.  *
  13.  *
  14.  *                               C= C= C= ┌(;・_・)┘トコトコ
  15.  ******************************************************/
  16. namespace Customize\Service;
  17. use Lm\Service\Db\SqlService;
  18. class CategoryService extends LmAbstractService
  19. {
  20.     const CATEGORY_LIST_PAGING_COUNT_IN_PAGER_PC 5;
  21.     const CATEGORY_LIST_PAGING_COUNT_IN_PAGER_SP 3;
  22.     /**
  23.      * @var LmHelper $lmHelper
  24.      */
  25.     protected $lmHelper;
  26.     /**
  27.      * @param LmHelper $lmHelper
  28.      */
  29.     public function __construct(LmHelper $lmHelper)
  30.     {
  31.         $this->lmHelper $lmHelper;
  32.     }
  33.     public function getCategory($ct null$mc null$mcMc null)
  34.     {
  35.         return $this->getCached(function () use ($ct$mc$mcMc) {
  36.             //
  37.             $query = (new SqlService())
  38.                 ->Select('T.*, T1.*')
  39.                 ->Table('category_table')
  40.                 ->Join('main_category_table''T1.main_category_id = T.category_main_category');
  41.             if (!empty($mcMc)) {
  42.                 $query->Set('T1.main_category_main_category_webname'$mcMc);
  43.             }
  44.             if (!empty($mc)) {
  45.                 $query->Set('T1.main_category_webname'$mc);
  46.             }
  47.             if (!empty($ct)) {
  48.                 $query->Set('T.category_webname'$ct);
  49.             }
  50.             //
  51.             $result $query->Find();
  52.             //
  53.             return $result;
  54.         });
  55.     }
  56.     /**
  57.      * @param $ct
  58.      * @param $mc
  59.      * @param $mcMc
  60.      * @return array
  61.      */
  62.     public function getBreadCrumbs($ct null$mc null$mcMc null)
  63.     {
  64.         //
  65.         $category $this->getCategory($ct$mc$mcMc);
  66.         //
  67.         $BreadCrumbs = [];
  68.         //
  69.         foreach ([
  70.                 [
  71.                     'f' => $ct,
  72.                     'fn' => 'category',
  73.                 ],
  74.                 [
  75.                     'f' => $mc,
  76.                     'fn' => 'main_category',
  77.                 ],
  78.                 [
  79.                     'f' => $mcMc,
  80.                     'fn' => 'main_category_main_category',
  81.                 ],
  82.             ] as $i => $obj) {
  83.             for ($j 0$j <= $i$j++) {
  84.                 if (!empty($obj['f'])) {
  85.                     if (!isset($BreadCrumbs[$i]['label'])) {
  86.                         $BreadCrumbs[$i]['label'] = $category["{$obj['fn']}_name"];
  87.                     }
  88.                     if (!isset($BreadCrumbs[$j]['href'])) {
  89.                         $BreadCrumbs[$j]['href'] = "/{$category["{$obj['fn']}_webname"]}";
  90.                     } else {
  91.                         $BreadCrumbs[$j]['href'] = "/{$category["{$obj['fn']}_webname"]}{$BreadCrumbs[$j]['href']}";
  92.                     }
  93.                 }
  94.             }
  95.         }
  96.         //
  97.         return $BreadCrumbs;
  98.     }
  99.     /**
  100.      * Moved from front/app/html/application/modules/default/controllers/commons/getcategorydata.php#getPagerData
  101.      *
  102.      * @param $main_category_name
  103.      * @param $category_name
  104.      * @param $display_count
  105.      * @param $item_count
  106.      * @param $item_num_from
  107.      * @param $item_num_to
  108.      * @param $disp
  109.      * @param $type
  110.      * @param false $is_sp
  111.      * @return array
  112.      */
  113.     public function getPagerData($main_category_name$category_name$display_count$item_count$item_num_from$item_num_to$disp$type$is_sp false)
  114.     {
  115.         $pager_data = array(
  116.             'prev_link' => false,
  117.             'pager' => array(),
  118.             'next_link' => false
  119.         );
  120.         $page_list = array();
  121.         $ellipses_pager = array(
  122.             'num' => '...',
  123.             'link' => false,
  124.             'is_ellipses' => true
  125.         );
  126.         $base_link $category_name === 'allItem' $main_category_name "{$main_category_name}/{$category_name}";
  127.         if ($item_num_from 1) {
  128.             $no max(0, ($item_num_from $display_count) - 1);
  129.             $pager_data['prev_link'] = "/{$base_link}/?no={$no}&disp={$disp}&type={$type}";
  130.         }
  131.         if (($item_num_from $display_count) <= $item_count) {
  132.             $no $item_num_from $display_count 1;
  133.             $pager_data['next_link'] = "/{$base_link}/?no={$no}&disp={$disp}&type={$type}";
  134.         }
  135.         $current_idx 0;
  136.         $idx 0;
  137.         $current_num = (int)floor($item_num_to $display_count);
  138.         // 最後のページだったら+1する
  139.         if ($item_num_to $display_count$current_num += 1;
  140.         for ($i 1$i <= $item_count$i += $display_count) {
  141.             $no = ($i 1);
  142.             $num intval($i $display_count) + 1;
  143.             $is_current $num === $current_num;
  144.             $pager = array(
  145.                 'num' => $num,
  146.                 'link' => "/{$base_link}/?no={$no}&disp={$disp}&type={$type}",
  147.                 'is_current' => $is_current,
  148.                 'idx' => $idx
  149.             );
  150.             $page_list[] = $pager;
  151.             if ($is_current$current_idx $idx;
  152.             $idx++;
  153.         }
  154.         $CATEGORY_LIST_PAGING_COUNT_IN_PAGER $is_sp self::CATEGORY_LIST_PAGING_COUNT_IN_PAGER_SP self::CATEGORY_LIST_PAGING_COUNT_IN_PAGER_PC;
  155.         // ページング数がCATEGORY_LIST_PAGING_COUNT_IN_PAGER以下だったらページャーの調整不要
  156.         if (count($page_list) <= $CATEGORY_LIST_PAGING_COUNT_IN_PAGER) {
  157.             $pager_data['pager'] = $page_list;
  158.             return $pager_data;
  159.         }
  160.         /**
  161.          * ページャーから不要なページを除去する。
  162.          * ページャーが連続する数はCATEGORY_LIST_PAGING_COUNT_IN_PAGERで定義。
  163.          * 仕様は以下(例は10ページのケース)。
  164.          *
  165.          * 先頭ページ選択中
  166.          * [1] [2] [3] [4] [5]...[10]
  167.          *
  168.          * 中間ページ選択中
  169.          * [1]...[3] [4] [5] [6] [7]...[10]
  170.          *
  171.          * 最終ページ選択中
  172.          * [1]...[6] [7] [8] [9] [10]
  173.          */
  174.         // 最初と最後のページ
  175.         $page_count count($page_list);
  176.         $first $page_list[0];
  177.         $last  $page_list[$page_count 1];
  178.         // CATEGORY_LIST_PAGING_COUNT_IN_PAGERで現在のページからの表示範囲を取得
  179.         $dist_num floor($CATEGORY_LIST_PAGING_COUNT_IN_PAGER 2);
  180.         $offset $current_idx $dist_num;
  181.         if ($offset 0) {
  182.             $offset 0;
  183.         } else if (($offset $CATEGORY_LIST_PAGING_COUNT_IN_PAGER) > $page_count) {
  184.             $offset -= ($offset $CATEGORY_LIST_PAGING_COUNT_IN_PAGER) - $page_count;
  185.         }
  186.         $pager_data['pager'] = array_slice($page_list$offset$CATEGORY_LIST_PAGING_COUNT_IN_PAGER);
  187.         // ページャの最初と最後と、$first、$lastを比較
  188.         $pager_first $pager_data['pager'][0];
  189.         $pager_last  $pager_data['pager'][count($pager_data['pager']) - 1];
  190.         // first
  191.         if ($first['num'] !== $pager_first['num']) {
  192.             $pager_data['pager'] = array_merge(array($first$ellipses_pager), $pager_data['pager']);
  193.         }
  194.         // last
  195.         if ($last['num'] !== $pager_last['num']) {
  196.             $pager_data['pager'] = array_merge($pager_data['pager'], array($ellipses_pager$last));
  197.         }
  198.         return $pager_data;
  199.     }
  200.     function getCategoryImageUrl($categoryId)
  201.     {
  202.         return 'https://' $this->lmHelper->getConfig('CFIMG_DOMAIN') . '/category_images/' $categoryId '.webp';
  203.     }
  204.     function getGoodsImageUrlByCatetoryId($categoryId)
  205.     {
  206.         $goods = (new SqlService())
  207.             ->Select('goods_id')
  208.             ->Table('goods_table')
  209.             ->Join('goods_category_table''T1.gc_goods = T.goods_id''INNER')
  210.             ->Join('category_table''T2.category_id = T1.gc_category''INNER')
  211.             ->Join('goods_price_table''T3.gp_goods = T.goods_id')
  212.             ->Join('rank_table''T4.rank_goods = T.goods_id')
  213.             ->Set('T.goods_status'1)
  214.             ->Set('T.goods_ddate'null)
  215.             ->Set('T2.category_id'$categoryId)
  216.             ->GroupBy('T.goods_id, T4.rank_money')
  217.             ->OrderBy('ISNULL(T4.rank_money), T4.rank_money DESC, MIN(T3.gp_price2)')
  218.             ->Limit(1)
  219.             ->Find();
  220.         if (empty($goods['goods_id'])) {
  221.             return null;
  222.         }
  223.         return 'https://' $this->lmHelper->getConfig('CFIMG_DOMAIN') . '/goods.img/'
  224.             substr($goods['goods_id'], -1) . '/' $goods['goods_id'] . "/main_bsum.jpg";
  225.     }
  226.     /**
  227.      * Get Main category group data by id
  228.      *
  229.      * @param $mainCategoryId
  230.      * @return array|null
  231.      */
  232.     public function getMainCategoryGroupById($mainCategoryId)
  233.     {
  234.         $mainCategories = (new SqlService())
  235.             ->Sql("SELECT main_category_webname AS mc, category_webname AS ct, main_category_id, category_id
  236.             , category_group_noshowdb, category_group_only_main
  237.             , main_category_name, category_name
  238.             FROM main_category_table
  239.             INNER JOIN category_group_table ON  category_group_id = main_category_group
  240.             LEFT JOIN category_table ON  main_category_id = category_main_category
  241.             WHERE main_category_webname = :mainCategoryId")
  242.             ->Param('mainCategoryId'$mainCategoryId)
  243.             ->Limit(1)
  244.             ->Fetch();
  245.         if (empty($mainCategories)) {
  246.             return null;
  247.         }
  248.         return $mainCategories;
  249.     }
  250.     /**
  251.      * Get Main category by id
  252.      *
  253.      * @param $mainCategoryId
  254.      * @return array|null
  255.      */
  256.     public function getMainCategory($mainCategoryId)
  257.     {
  258.         $mainCategories = (new SqlService())
  259.             ->Sql("SELECT category_group_noshowdb,main_category_group FROM main_category_table
  260.             LEFT JOIN category_group_table ON category_group_id = main_category_group
  261.             WHERE main_category_id = :main_category_id")
  262.             ->Param('main_category_id'$mainCategoryId)
  263.             ->Limit(1)
  264.             ->Fetch();
  265.         if (empty($mainCategories)) {
  266.             return null;
  267.         }
  268.         return $mainCategories;
  269.     }
  270. }