app/template/default/Block/category_nav_pc.twig line 1

Open in your IDE?
  1. {#
  2. This file is part of EC-CUBE
  3. Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved.
  4. http://www.ec-cube.co.jp/
  5. For the full copyright and license information, please view the LICENSE
  6. file that was distributed with this source code.
  7. #}
  8. {% block javascript %}
  9. <script>
  10.     {% if category_id is defined %}
  11.     $(function() {
  12.         function getQueryString (url)
  13.         {
  14.             if (url !== undefined && url === '') {
  15.                 return [];
  16.             }
  17.             var vars = [], hash;
  18.             var path = url === undefined ? window.location.href : $('<a href="'+ url +'"/>').get(0).href;
  19.             if (path.indexOf('?') >= 0 && path.length != path.indexOf('?') + 1) {
  20.                 var hashes = path.indexOf('#') >= 0
  21.                 ? path.slice(path.indexOf('?') + 1, path.indexOf('#')).split('&')
  22.                 : path.slice(path.indexOf('?') + 1).split('&');
  23.                 for(var i = 0; i < hashes.length; i++) {
  24.                     hash = hashes[i].split('=');
  25.                     vars.push(hash[0]);
  26.                     vars[hash[0]] = hash[1];
  27.                 }
  28.             }
  29.             return vars;
  30.         }
  31.         function escapeRegExp (str)
  32.         {
  33.             return str.replace(/([.*+?^=!:${}()|[\]\/\\])/g, "\\$1");
  34.         }
  35.         let currentQueries = [];
  36.         currentQueries.push('category_id');
  37.         currentQueries['category_id'] = {{ category_id }};
  38.         $('.ec-itemNav__nav li a')
  39.             .removeClass('current')
  40.             .each(function(){
  41.                 var nav = $(this).attr('href');
  42.                 var navQueries = getQueryString(nav);  //ナビゲーションhrefのクエリストリングをパース
  43.                 console.log(nav, navQueries);
  44.                 console.log(currentQueries);
  45.             if (currentQueries.length > 0) {
  46.                 for (var i = 0; i < currentQueries.length; i++) {
  47.                     //最初のクエリストリングのみ調査
  48.                     if ($.inArray(currentQueries[i], navQueries) >= 0 &&
  49.                         currentQueries[currentQueries[i]] == navQueries[currentQueries[i]])
  50.                     {
  51.                         $(this).addClass('current');
  52.                         $(this).parents('.category_child').css('display','block');
  53.                         return false;  //break
  54.                     }
  55.                 }
  56.             } else {
  57.                 if (currentURI.match(new RegExp('^'+ escapeRegExp(nav) +'$', 'i'))) {
  58.                     $(this).addClass('current');
  59.                     $(this).parents('.category_child').css('display','block');
  60.                     return false;  //break
  61.                 }
  62.             }
  63.         });
  64.         $('.ec-headerCategoryArea .ec-itemNav__nav li a')
  65.             .removeClass('current')
  66.             .each(function(){
  67.                 var nav = $(this).attr('href');
  68.                 var navQueries = getQueryString(nav);  //ナビゲーションhrefのクエリストリングをパース
  69.                 if (currentQueries.length > 0) {
  70.                     for (var i = 0; i < currentQueries.length; i++) {
  71.                         //最初のクエリストリングのみ調査
  72.                         if ($.inArray(currentQueries[i], navQueries) >= 0 &&
  73.                             currentQueries[currentQueries[i]] == navQueries[currentQueries[i]])
  74.                         {
  75.                             $(this).addClass('current');
  76.                             $(this).parents('.category_child').css('display','block');
  77.                             return false;  //break
  78.                         }
  79.                     }
  80.                 } else {
  81.                     if (currentURI.match(new RegExp('^'+ escapeRegExp(nav) +'$', 'i'))) {
  82.                         $(this).addClass('current');
  83.                         $(this).parents('.category_child').css('display','block');
  84.                         return false;  //break
  85.                     }
  86.                 }
  87.             });
  88.         });
  89.     {% endif %}
  90. </script>
  91. <script>
  92.     $(function() {
  93.         $('.ec-categoryNaviRole .ec-itemNav__nav li > a').on('click', function() {
  94.             $categoryItem = $(this).parent('.haschild');
  95.             $categoryList = $categoryItem.children('.category_child');
  96.             $childrenIcon = $(this).children('.only-opend');
  97.             if ($categoryList.length > 0){
  98.                 if ($categoryList.css('display') == 'none') {
  99.                     $categoryList.slideDown(300);
  100.                     $childrenIcon.addClass('active');
  101.                 } else {
  102.                     $categoryList.slideUp(250);
  103.                     $childrenIcon.removeClass('active');
  104.                 }
  105.                 return false;
  106.             }
  107.         });
  108.     });
  109. </script>
  110. {% endblock %}
  111. {% set Categories = repository('Eccube\\Entity\\Category').getList() %}
  112. {% macro tree(Category) %}
  113.     {% from _self import tree %}
  114.     <a href="{{ url('product_list') }}?category_id={{ Category.id }}">
  115.         {{ Category.name }}
  116.         {% if Category.children|length == 0 %}
  117.             <img src="{{ asset('assets/icon/icon_arrow_red.svg') }}" class="ec-itemNav__iconlink" alt="矢印アイコン">
  118.         {% else %}
  119.             <img src="{{ asset('assets/icon/icon_add.svg') }}" class="ec-itemNav__iconlink only-opend" alt="プラスアイコン">
  120.             <img src="{{ asset('assets/icon/icon_minus.svg') }}" class="ec-itemNav__iconlink" alt="マイナスアイコン">
  121.         {% endif %}
  122.     </a>
  123.     {% if Category.children|length > 0 %}
  124.         <ul style="display: none;" class="category_child">
  125.             <li>
  126.                 <a id="category_all" href="{{ url('product_list') }}?category_id={{ Category.id }}">
  127.                     <span>すべて</span>
  128.                     <img src="{{ asset('assets/icon/icon_arrow_red.svg') }}" class="ec-itemNav__iconlink" alt="矢印アイコン">
  129.                 </a>
  130.             </li>
  131.             {% for ChildCategory in Category.children %}
  132.                 <li>
  133.                     {{ tree(ChildCategory) }}
  134.                 </li>
  135.             {% endfor %}
  136.         </ul>
  137.     {% endif %}
  138. {% endmacro %}
  139. {# @see https://github.com/bolt/bolt/pull/2388 #}
  140. {% from _self import tree %}
  141. <div class="ec-categoryNaviRole">
  142.     <div class="ec-headerCategoryArea__heading">
  143.         <p>{{ 'カテゴリから探す'|trans }}</p>
  144.         <span class="ec-headerCategoryArea__toggle">すべて開く</span>
  145.     </div>
  146.     <div class="ec-itemNav">
  147.         <ul class="ec-itemNav__nav">
  148.             {% for Category in Categories %}
  149.                 <li>
  150.                     {{ tree(Category) }}
  151.                 </li>
  152.             {% endfor %}
  153.         </ul>
  154.     </div>
  155. </div>