app/template/default/Product/list.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. {% extends 'default_frame.twig' %}
  9. {% set body_class = 'product_page' %}
  10. {% set category = app.request.get('category_id') %}
  11. {% set categoryId = app.request.get('category_id')|default(0) %}
  12. {% block javascript %}
  13.     <script>
  14.         eccube.productsClassCategories = {
  15.             {% for Product in pagination %}
  16.             "{{ Product.id|escape('js') }}": {{ class_categories_as_json(Product)|raw }}{% if loop.last == false %}, {% endif %}
  17.             {% endfor %}
  18.         };
  19.         $(function() {
  20.             // 表示件数を変更
  21.             $('.disp-number').change(function() {
  22.                 var dispNumber = $(this).val();
  23.                 $('#disp_number').val(dispNumber);
  24.                 $('#pageno').val(1);
  25.                 $("#form1").submit();
  26.             });
  27.             // 並び順を変更
  28.             $('.order-by').change(function() {
  29.                 var orderBy = $(this).val();
  30.                 $('#orderby').val(orderBy);
  31.                 $('#pageno').val(1);
  32.                 $("#form1").submit();
  33.             });
  34.             $('.add-cart').on('click', function(e) {
  35.                 var $form = $(this).parents('li').find('form');
  36.                 // 個数フォームのチェック
  37.                 var $quantity = $form.parent().find('.quantity');
  38.                 if ($quantity.val() < 1) {
  39.                     $quantity[0].setCustomValidity('{{ '1以上で入力してください。'|trans }}');
  40.                     setTimeout(function() {
  41.                         loadingOverlay('hide');
  42.                     }, 100);
  43.                     return true;
  44.                 } else {
  45.                     $quantity[0].setCustomValidity('');
  46.                 }
  47.                 e.preventDefault();
  48.                 $.ajax({
  49.                     url: $form.attr('action'),
  50.                     type: $form.attr('method'),
  51.                     data: $form.serialize(),
  52.                     dataType: 'json',
  53.                     beforeSend: function(xhr, settings) {
  54.                         // Buttonを無効にする
  55.                         $('.add-cart').prop('disabled', true);
  56.                     }
  57.                 }).done(function(data) {
  58.                     // レスポンス内のメッセージをalertで表示
  59.                     $.each(data.messages, function() {
  60.                         $('#ec-modal-header').text(this);
  61.                     });
  62.                     $('.ec-modal').show()
  63.                     // カートブロックを更新する
  64.                     $.ajax({
  65.                         url: '{{ url('block_cart') }}',
  66.                         type: 'GET',
  67.                         dataType: 'html'
  68.                     }).done(function(html) {
  69.                         $('.ec-headerRole__cart').html(html);
  70.                     });
  71.                 }).fail(function(data) {
  72.                     alert('{{ 'カートへの追加に失敗しました。'|trans }}');
  73.                 }).always(function(data) {
  74.                     // Buttonを有効にする
  75.                     $('.add-cart').prop('disabled', false);
  76.                 });
  77.             });
  78.         });
  79.         $('.ec-modal-wrap').on('click', function(e) {
  80.             // モーダル内の処理は外側にバブリングさせない
  81.             e.stopPropagation();
  82.         });
  83.         $('.ec-modal-overlay, .ec-modal, .ec-modal-close, .ec-inlineBtn--cancel').on('click', function() {
  84.             $('.ec-modal').hide()
  85.         });
  86.     </script>
  87.     {% if categoryId == 8 %}
  88.     <script src="/html/user_data/assets/js/itemload/category-top.js"></script>
  89.     {% endif %}
  90. {% endblock %}
  91. {% block main %}
  92.     {% if search_form.category_id.vars.errors|length > 0 %}
  93.         <div class="ec-searchnavRole">
  94.             <p class="errormsg text-danger">{{ 'ご指定のカテゴリは存在しません'|trans }}</p>
  95.         </div>
  96.     {% else %}
  97. {% if categoryId == 8 %}
  98. <script>
  99. $(function(){
  100.     $('.category-search-btn').click(navToggle);
  101.     $('.category-search__tab a').click(changeTab);
  102. });
  103. function changeTab(){
  104.     var id = $(this).attr('href');
  105.     $('.category-search__tab').removeClass('active');
  106.     $('.category-search-block').hide();
  107.     $(this).addClass('active');
  108.     $(id).show();
  109.     return false;
  110. }
  111. function navToggle(){
  112.     if($(this).hasClass('open')){
  113.         $('.category-search-wrap').addClass('hide');
  114.         $(this).removeClass('open');    
  115.     }else{
  116.         $('.category-search-wrap').removeClass('hide');
  117.         $(this).addClass('open');
  118.     }
  119.     return false;
  120. }
  121. </script>
  122. <!--<div class="category-search-wrap hide">
  123. <button class="category-search-btn">開く</button>
  124. <div class="category-search">
  125. <ul class="category-search__tab">
  126. <li><a href="#type">種類</a></li>
  127. <li><a href="#area">地域</a></li>
  128. <li><a href="#breed">品種</a></li>
  129. <li><a href="#category">カテゴリー</a></li>
  130. <li><a href="#scene">シーン別</a></li>
  131. <li><a href="#price">値段から</a></li>
  132. </ul>
  133. <div id="type" class="active category-search-block">
  134. <ul class="category-search__list">
  135. {% set Categories = repository('Eccube\\Entity\\Category').getList(repository('Eccube\\Entity\\Category').find(8)) %}
  136. {% macro tree(Category) %}
  137. {% from _self import tree %}
  138. <li>
  139. <a href="{{ url('product_list') }}?category_id={{ Category.id }}">
  140. {{ Category.name }}
  141. </a>
  142. {% if Category.children|length > 0 %}
  143. <ul>
  144. {% for ChildCategory in Category.children %}
  145. <li>
  146. {{ tree(ChildCategory) }}
  147. </li>
  148. {% endfor %}
  149. </ul>
  150. {% endif %}
  151. </li>
  152. {% endmacro %}
  153. {# @see https://github.com/bolt/bolt/pull/2388 #}
  154. {% from _self import tree %}
  155. {% for Category in Categories %}
  156. <li>
  157. {{ tree(Category) }}
  158. </li>
  159. {% endfor %}
  160. </ul>
  161. </div>
  162. <div id="area" class="category-search-block">
  163. <ul class="category-search__list">
  164. {% set Categories = repository('Eccube\\Entity\\Category').getList(repository('Eccube\\Entity\\Category').find(21)) %}
  165. {% macro tree(Category) %}
  166. {% from _self import tree %}
  167. <li>
  168. <a href="{{ url('product_list') }}?category_id={{ Category.id }}">
  169. {{ Category.name }}
  170. </a>
  171. </li>
  172. {% endmacro %}
  173. {# @see https://github.com/bolt/bolt/pull/2388 #}
  174. {% from _self import tree %}
  175. {% for Category in Categories %}
  176. <li>
  177. {{ tree(Category) }}
  178. </li>
  179. {% endfor %}
  180. </ul>
  181. </div>
  182. <div id="breed" class="category-search-block">
  183. <ul class="category-search__list">
  184. <li><a href="#">品種</a></li>
  185. <li><a href="#">品種</a></li>
  186. <li><a href="#">品種</a></li>
  187. <li><a href="#">品種</a></li>
  188. <li><a href="#">品種</a></li>
  189. </ul>
  190. </div>
  191. <div id="category" class="category-search-block">
  192. <ul class="category-search__list">
  193. <li><a href="#">カテゴリ</a></li>
  194. <li><a href="#">カテゴリ</a></li>
  195. <li><a href="#">カテゴリ</a></li>
  196. <li><a href="#">カテゴリ</a></li>
  197. <li><a href="#">カテゴリ</a></li>
  198. </ul>
  199. </div>
  200. <div id="scene" class="category-search-block">
  201. <ul class="category-search__list">
  202. <li><a href="#">フランス</a></li>
  203. <li><a href="#">フランス</a></li>
  204. <li><a href="#">フランス</a></li>
  205. <li><a href="#">フランス</a></li>
  206. <li><a href="#">フランス</a></li>
  207. </ul>
  208. </div>
  209. <div id="price" class="category-search-block">
  210. <ul class="category-search__list">
  211. <li><a href="#">1000円〜2000円</a></li>
  212. <li><a href="#">1000円〜2000円</a></li>
  213. <li><a href="#">1000円〜2000円</a></li>
  214. <li><a href="#">1000円〜2000円</a></li>
  215. <li><a href="#">1000円〜2000円</a></li>
  216. </ul>
  217. </div>
  218. </div>
  219. </div>--><!-- /.category-search-wrap-->
  220. {% endif %}
  221.         <div class="product-container layout-container contents wine-{{categoryId}}">
  222. <!-- test -->
  223. <!--
  224. {% set Categories = repository('Eccube\\Entity\\Category').getList(repository('Eccube\\Entity\\Category').find(8)) %}
  225. {% macro tree(Category) %}
  226. {% from _self import tree %}
  227. <a href="{{ url('product_list') }}?category_id={{ Category.id }}">
  228. {{ Category.name }}
  229. </a>
  230. {% if Category.children|length > 0 %}
  231. <ul>
  232. {% for ChildCategory in Category.children %}
  233. <li>
  234. {{ tree(ChildCategory) }}
  235. </li>
  236. {% endfor %}
  237. </ul>
  238. {% endif %}
  239. {% endmacro %}
  240. {# @see https://github.com/bolt/bolt/pull/2388 #}
  241. {% from _self import tree %}
  242. <div class="ec-categoryNaviRole">
  243. <div class="ec-itemNav">
  244. <ul class="ec-itemNav__nav">
  245. {% for Category in Categories %}
  246. <li>
  247. {{ tree(Category) }}
  248. </li>
  249. {% endfor %}
  250. </ul>
  251. </div>
  252. </div>
  253. -->
  254. <!-- testend -->
  255.         {% if categoryId == 8 %}
  256.             <ol class="topic-path">
  257.             <li>white wine</li>
  258.             </ol>
  259.             <h1 class="wine-list__page-title">WINE LIST</h1>
  260.             <p class="wine-list__area">
  261.             Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , 
  262.             </p>
  263.             <div class="wine-list__nav-wrap">
  264.             <ul class="wine-list__nav">
  265.             <li><a href="https://wineshop.salond.jp/products/list?category_id=10"><span>赤ワイン</span></a></li>
  266.             <li><a href="https://wineshop.salond.jp/products/list?category_id=13"><span>白ワイン</span></a></li>
  267.             <li><a href="https://wineshop.salond.jp/products/list?category_id=14"><span>スパークリング</span></a></li>
  268.             <li><a href="https://wineshop.salond.jp/products/list?category_id=15"><span>ロゼ</span></a></li>
  269.             <li><a href="https://wineshop.salond.jp/products/list?category_id=16"><span>オレンジ</span></a></li>
  270.             </ul>
  271.             </div>
  272.             <section class="product-recommend">
  273.             <h2 class="product-recommend__title">今月のおすすめ</h2>
  274.             <section id="recommend"></section>
  275.             <!-- /.product-recommend --></section>
  276.         {% elseif categoryId == 10 %}
  277.             <ol class="topic-path">
  278.             <li><a href="https://wineshop.salond.jp/products/list?category_id=8">wine list</a></li>
  279.             <li>red wine</li>
  280.             </ol>
  281.             <div class="cat-catch">
  282.             <div class="wine-list__page-title is-sp">WINE LIST</div>
  283.             <h1 class="cat-catch__title is-pc">赤ワイン</h1>
  284.             <p class="cat-catch__area">
  285.             Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , 
  286.             </p>
  287.             <div class="cat-catch__photo-sp is-sp"></div>
  288.             <div class="cat-catch__box-sp is-sp"></div>
  289.             <p class="cat-catch__lede">
  290.             今日は重たいワインで酔いたい
  291.             </p>
  292.             <p class="cat-catch__area-sp is-sp">
  293.             Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , 
  294.             </p>
  295.             <!-- /.cat-catch--></div>
  296.         {% elseif categoryId == 13 %}
  297.             <ol class="topic-path">
  298.             <li><a href="https://wineshop.salond.jp/products/list?category_id=8">wine list</a></li>
  299.             <li>white wine</li>
  300.             </ol>
  301.             <div class="cat-catch">
  302.             <h1 class="wine-list__page-title is-sp">WINE LIST</h1>
  303.             <h1 class="cat-catch__title is-pc">白ワイン</h1>
  304.             <p class="cat-catch__area">
  305.             Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , 
  306.             </p>
  307.             <div class="cat-catch__photo-sp is-sp"></div>
  308.             <div class="cat-catch__box-sp is-sp"></div>
  309.             <p class="cat-catch__lede">
  310.             頑張ってパスタでも作ろうかな
  311.             </p>
  312.             <p class="cat-catch__area-sp is-sp">
  313.             Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , 
  314.             </p>
  315.             <!-- /.cat-catch--></div>
  316.         {% elseif categoryId == 14 %}
  317.             <ol class="topic-path">
  318.             <li><a href="https://wineshop.salond.jp/products/list?category_id=8">wine list</a></li>
  319.             <li>sparkling</li>
  320.             </ol>
  321.             <div class="cat-catch">
  322.             <div class="wine-list__page-title is-sp">WINE LIST</div>
  323.             <h1 class="cat-catch__title is-pc">スパークリングワイン</h1>
  324.             <p class="cat-catch__area">
  325.             Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , 
  326.             </p>
  327.             <div class="cat-catch__photo-sp is-sp"></div>
  328.             <div class="cat-catch__box-sp is-sp"></div>
  329.             <p class="cat-catch__lede">
  330.             とりあえず乾杯しよう
  331.             </p>
  332.             <p class="cat-catch__area-sp is-sp">
  333.             Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , 
  334.             </p>
  335.             <!-- /.cat-catch--></div>
  336.         {% elseif categoryId == 15 %}
  337.             <ol class="topic-path">
  338.             <li><a href="https://wineshop.salond.jp/products/list?category_id=8">wine list</a></li>
  339.             <li>rose</li>
  340.             </ol>
  341.             <div class="cat-catch">
  342.             <div class="wine-list__page-title is-sp">WINE LIST</div>
  343.             <h1 class="cat-catch__title is-pc">ロゼ</h1>
  344.             <p class="cat-catch__area">
  345.             Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , 
  346.             </p>
  347.             <div class="cat-catch__photo-sp is-sp"></div>
  348.             <div class="cat-catch__box-sp is-sp"></div>
  349.             <p class="cat-catch__lede">
  350.             女子力高いよね
  351.             </p>
  352.             <p class="cat-catch__area-sp is-sp">
  353.             Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , 
  354.             </p>
  355.             <!-- /.cat-catch--></div>
  356.         {% elseif categoryId == 16 %}
  357.             <ol class="topic-path">
  358.             <li><a href="https://wineshop.salond.jp/products/list?category_id=8">wine list</a></li>
  359.             <li>rose</li>
  360.             </ol>
  361.             <div class="cat-catch">
  362.             <div class="wine-list__page-title is-sp">WINE LIST</div>
  363.             <h1 class="cat-catch__title is-pc">ロゼ</h1>
  364.             <p class="cat-catch__area">
  365.             Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , 
  366.             </p>
  367.             <div class="cat-catch__photo-sp is-sp"></div>
  368.             <div class="cat-catch__box-sp is-sp"></div>
  369.             <p class="cat-catch__lede">
  370.             オレンジワインってぶどうなんだって
  371.             </p>
  372.             <p class="cat-catch__area-sp is-sp">
  373.             Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , Gamay , Cinsault , Lambrusco , Nebbiolo , Primitivo , Pinot Noir , 
  374.             </p>
  375.             <!-- /.cat-catch--></div>
  376.        {% else %}
  377.         
  378.        {% endif %}
  379.        <div class="ec-searchnavRole">
  380.             <form name="form1" id="form1" method="get" action="?">
  381.                 {% for item in search_form %}
  382.                     <input type="hidden" id="{{ item.vars.id }}"
  383.                            name="{{ item.vars.full_name }}"
  384.                            {% if item.vars.value is not empty %}value="{{ item.vars.value }}" {% endif %}/>
  385.                 {% endfor %}
  386.             </form>
  387.             <div class="ec-searchnavRole__topicpath">
  388.                 <ol class="ec-topicpath">
  389.                     <li class="ec-topicpath__item"><a href="{{ url('product_list') }}">{{ '全て'|trans }}</a>
  390.                     </li>
  391.                     {% if Category is not null %}
  392.                         {% for Path in Category.path %}
  393.                             <li class="ec-topicpath__divider">|</li>
  394.                             <li class="ec-topicpath__item{% if loop.last %}--active{% endif %}"><a
  395.                                         href="{{ url('product_list') }}?category_id={{ Path.id }}">{{ Path.name }}</a>
  396.                             </li>
  397.                         {% endfor %}
  398.                     {% endif %}
  399.                     {% if search_form.vars.value and search_form.vars.value.name %}
  400.                         <li class="ec-topicpath__divider">|</li>
  401.                         <li class="ec-topicpath__item">{{ '「%name%」の検索結果'|trans({ '%name%': search_form.vars.value.name }) }}</li>
  402.                     {% endif %}
  403.                 </ol>
  404.             </div>
  405.             <div class="ec-searchnavRole__infos">
  406.                 <div class="ec-searchnavRole__counter">
  407.                     {% if pagination.totalItemCount > 0 %}
  408.                         {{ '<span class="ec-font-bold">%count%件</span><span>の商品が見つかりました</span>'|trans({ '%count%': pagination.totalItemCount })|raw }}
  409.                     {% else %}
  410.                         <span>{{ 'お探しの商品は見つかりませんでした'|trans }}</span>
  411.                     {% endif %}
  412.                 </div>
  413.                 {% if pagination.totalItemCount > 0 %}
  414.                     <div class="ec-searchnavRole__actions">
  415.                         <div class="ec-select">
  416.                             {{ form_widget(search_form.disp_number, {'id': '', 'attr': {'class': 'disp-number'}}) }}
  417.                             {{ form_widget(search_form.orderby, {'id': '', 'attr': {'class': 'order-by'}}) }}
  418.                         </div>
  419.                     </div>
  420.                 {% endif %}
  421.             </div>
  422.         </div>
  423.         {% if pagination.totalItemCount > 0 %}
  424.             <ul class="product-list">
  425.             {% for Product in pagination %}
  426.                 {% if Product.ProductCategories is not empty %}
  427.                     {% set categoryIds = [] %}
  428.                     {% for ProductCategory in Product.ProductCategories %}
  429.                         {% set categoryIds = categoryIds|merge([ProductCategory.CategoryId]) %}
  430.                     {% endfor %}
  431.                     <li class="type-{{ categoryIds|join(' type-') }}">
  432.                 {% else %}
  433.                     <li>
  434.                 {% endif %}
  435.                     <a href="{{ url('product_detail', {'id': Product.id}) }}">
  436.                         <div class="product-list__pic"><img class="" src="{{ asset(Product.main_list_image|no_image_product, 'save_image') }}" alt="{{ Product.name }}" {% if loop.index > 5 %} loading="lazy"{% endif %}></div>
  437.                         <p class="product-list__title">
  438.                             {{ Product.name }}
  439.                         </p>
  440.                         <span class="product-list__price">
  441.                                     {% if Product.hasProductClass %}
  442.                                         {% if Product.getPrice02Min == Product.getPrice02Max %}
  443.                                             {{ Product.getPrice02IncTaxMin|price }}
  444.                                         {% else %}
  445.                                             {{ Product.getPrice02IncTaxMin|price }} ~ {{ Product.getPrice02IncTaxMax|price }}
  446.                                         {% endif %}
  447.                                     {% else %}
  448.                                         {{ Product.getPrice02IncTaxMin|price }}
  449.                                     {% endif %}
  450.                          <span>(税込み)</span></span>
  451.                     </a>
  452.                 </li>
  453.             {% endfor %}
  454.             <!-- /.product-list-wrap --></ul>
  455.         <!-- /.product-container --></div>
  456.         {% endif %}
  457.         
  458.         {% include "Block/pagination.twig" with {'pages': pagination.paginationData} %}
  459.          <!--<div class="ec-pagerRole">
  460.             {% include "pager.twig" with {'pages': pagination.paginationData} %}
  461.         </div>-->
  462.         
  463.     {% endif %}
  464.     
  465.     {{ include('Block/subsc.twig') }}
  466. {% endblock %}