app/template/default/Cart/index.twig line 1

Open in your IDE?
  1. {% extends 'default_frame.twig' %}
  2. {% set body_class = 'cart_page' %}
  3. {% block main %}
  4.   <div class="ec-registerRole">
  5.     <div class="kaso_h1title">
  6.       <p>Shopping Cart</p>
  7.       <h1>ショッピングカート</h1>
  8.     </div>
  9.     <div class="ec-cartRole">
  10.       <div class="ec-cartRole__progress">
  11.         <ul class="ec-progress">
  12.           {% set step = 1 %}
  13.           <li class="ec-progress__item is-complete">
  14.             <div class="ec-progress__number">{{ step }}{% set step = step + 1 %}
  15.             </div>
  16.             <div class="ec-progress__label">{{ 'カートの商品'|trans }}
  17.             </div>
  18.           </li>
  19.           {% if is_granted('ROLE_USER') == false %}
  20.             <li class="ec-progress__item">
  21.               <div class="ec-progress__number">{{ step }}{% set step = step + 1 %}
  22.               </div>
  23.               <div class="ec-progress__label">{{ 'お客様情報'|trans }}
  24.               </div>
  25.             </li>
  26.           {% endif %}
  27.           <li class="ec-progress__item">
  28.             <div class="ec-progress__number">{{ step }}{% set step = step + 1 %}
  29.             </div>
  30.             <div class="ec-progress__label">{{ 'ご注文手続き'|trans }}
  31.             </div>
  32.           </li>
  33.           <li class="ec-progress__item">
  34.             <div class="ec-progress__number">{{ step }}{% set step = step + 1 %}
  35.             </div>
  36.             <div class="ec-progress__label">{{ 'ご注文内容確認'|trans }}
  37.             </div>
  38.           </li>
  39.           <li class="ec-progress__item">
  40.             <div class="ec-progress__number">{{ step }}{% set step = step + 1 %}
  41.             </div>
  42.             <div class="ec-progress__label">{{ '完了'|trans }}
  43.             </div>
  44.           </li>
  45.         </ul>
  46.       </div>
  47.       {% set productStr = app.session.flashbag.get('eccube.front.request.product') %}
  48.       {% for error in app.session.flashbag.get('eccube.front.request.error') %}
  49.         {% set idx = loop.index0 %}
  50.         <div class="ec-cartRole__error">
  51.           <div class="ec-alert-warning">
  52.             <div class="ec-alert-warning__icon"><img src="{{ asset('assets/icon/exclamation-white.svg') }}"></div>
  53.             <div class="ec-alert-warning__text">
  54.               {% if productStr[idx] is defined %}
  55.                 {{ error|trans({'%product%':productStr[idx]})|nl2br }}
  56.               {% else %}
  57.                 {{ error|trans|nl2br }}
  58.               {% endif %}
  59.             </div>
  60.           </div>
  61.         </div>
  62.       {% endfor %}
  63.       {% for error in app.session.flashbag.get('eccube.front.cart.error') %}
  64.         <div class="ec-cartRole__error">
  65.           <div class="ec-alert-warning">
  66.             <div class="ec-alert-warning__icon"><img src="{{ asset('assets/icon/exclamation-white.svg') }}"></div>
  67.             <div class="ec-alert-warning__text">
  68.               {{ error|trans|nl2br }}
  69.             </div>
  70.           </div>
  71.         </div>
  72.       {% endfor %}
  73.       {% if totalQuantity > 0 %}
  74.         <div class="ec-cartRole__totalText">
  75.           <p>
  76.             {% if hasNegotiatedItems %}
  77.               <span style="color: #666; text-decoration: line-through;">{{ totalPrice|price }}</span><br>
  78.               {{ '商品の合計金額は「<strong style="color: #28a745;">%price%</strong>」です。'|trans({ '%price%': negotiatedTotalPrice|price })|raw }}
  79.               <span style="color: #28a745; font-size: 0.9em;"><i class="fa-solid fa-circle-check"></i> 交渉価格適用</span>
  80.             {% else %}
  81.               {{ '商品の合計金額は「<strong>%price%</strong>」です。'|trans({ '%price%': totalPrice|price })|raw }}
  82.             {% endif %}
  83.           </p>
  84.         </div>
  85.         {% if Carts|length > 1 %}
  86.           <div class="ec-cartRole__error">
  87.             <div class="ec-alert-warning">
  88.               <div class="ec-alert-warning__text">
  89.                 {{ '同時購入できない商品がカートに含まれています。'|trans|nl2br }}
  90.               </div>
  91.             </div>
  92.           </div>
  93.         {% endif %}
  94.         <form name="form" id="form_cart" class="ec-cartRole" method="post" action="{{ url('cart') }}">
  95.           {% for CartIndex,Cart in Carts %}
  96.             {% set cartKey = Cart.cart_key %}
  97.             {% for error in app.session.flashbag.get('eccube.front.cart.' ~ cartKey ~ '.request.error') %}
  98.               <div class="ec-cartRole__error">
  99.                 <div class="ec-alert-warning">
  100.                   <div class="ec-alert-warning__icon"><img src="{{ asset('assets/icon/exclamation-white.svg') }}"></div>
  101.                   <div class="ec-alert-warning__text">
  102.                     {{ error|trans|nl2br }}
  103.                   </div>
  104.                 </div>
  105.               </div>
  106.             {% endfor %}
  107.             <div class="ec-cartRole__cart">
  108.               <div class="ec-cartTable">
  109.                 <ol class="ec-cartHeader">
  110.                   <li class="ec-cartHeader__label">{{ '削除'|trans }}</li>
  111.                   <li class="ec-cartHeader__label">{{ '商品内容'|trans }}</li>
  112.                   <li class="ec-cartHeader__label">{{ '数量'|trans }}</li>
  113.                   <li class="ec-cartHeader__label">{{ '小計'|trans }}</li>
  114.                 </ol>
  115.                 {% for CartItem in Cart.CartItems %}
  116.                   {% set ProductClass = CartItem.ProductClass %}
  117.                   {% set Product = ProductClass.Product %}
  118.                   <ul class="ec-cartRow">
  119.                     <li class="ec-cartRow__delColumn">
  120.                       <a
  121.                         href="{{ url('cart_handle_item', {'operation': 'remove', 'productClassId': ProductClass.id }) }}" {{ csrf_token_for_anchor() }}
  122.                         class="ec-icon" data-method="put" data-message="カートから商品を削除してもよろしいですか?">
  123.                         <img src="{{ asset('assets/icon/cross.svg') }}" alt="delete">
  124.                       </a>
  125.                     </li>
  126.                     <li class="ec-cartRow__contentColumn">
  127.                       <div class="ec-cartRow__img">
  128.                         <a target="_blank" href="{{ url('product_detail', {id : Product.id} ) }}">
  129.                           <img src="{{ asset(Product.MainListImage|no_image_product, 'save_image') }}"
  130.                                alt="{{ Product.name }}"/>
  131.                         </a>
  132.                       </div>
  133.                       <div class="ec-cartRow__summary">
  134.                         <div class="ec-cartRow__name">
  135.                           <a target="_blank"
  136.                              href="{{ url('product_detail', {id : Product.id} ) }}">{{ Product.name }}</a>
  137.                           {% if ProductClass.ClassCategory1 and ProductClass.ClassCategory1.id %}
  138.                             <br>{{ ProductClass.ClassCategory1.ClassName.name }}:{{ ProductClass.ClassCategory1 }}
  139.                           {% endif %}
  140.                           {% if ProductClass.ClassCategory2 and ProductClass.ClassCategory2.id %}
  141.                             <br>{{ ProductClass.ClassCategory2.ClassName.name }}:{{ ProductClass.ClassCategory2 }}
  142.                           {% endif %}
  143.                         </div>
  144.                         {% if negotiationPrices[Product.id] is defined %}
  145.                           <div class="ec-cartRow__unitPrice" style="font-weight: bold; color: #28a745;">
  146.                             <i class="fa-solid fa-circle-check"></i> 価格交渉成立<br>
  147.                             <span style="color: #666; text-decoration: line-through;">{{ CartItem.price|price }}</span><br>
  148.                             <span style="color: #28a745;">交渉価格:{{ negotiationPrices[Product.id]|price }}</span>
  149.                           </div>
  150.                           <div class="ec-cartRow__sutbtotalSP">
  151.                             {{ '小計:'|trans }}<span style="color: #666; text-decoration: line-through;">{{ CartItem.total_price|price }}</span><br>
  152.                             <span style="color: #28a745; font-weight: bold;">→ {{ negotiatedSubtotals[Product.id]|price }}</span>
  153.                           </div>
  154.                         {% else %}
  155.                           <div class="ec-cartRow__unitPrice">{{ CartItem.price|price }}</div>
  156.                           <div class="ec-cartRow__sutbtotalSP">{{ '小計:'|trans }}{{ CartItem.total_price|price }}</div>
  157.                         {% endif %}
  158.                       </div>
  159.                     </li>
  160.                     <li class="ec-cartRow__amountColumn">
  161.                       <div class="ec-cartRow__amount">{{ CartItem.quantity|number_format }}</div>
  162.                       <div class="ec-cartRow__amountSP">{{ '数量:'|trans }}{{ CartItem.quantity|number_format }}</div>
  163.                       <div class="ec-cartRow__amountUpDown">
  164.                         {% if CartItem.quantity > 1 %}
  165.                           <a
  166.                             href="{{ url('cart_handle_item', {'operation': 'down', 'productClassId': ProductClass.id}) }}" {{ csrf_token_for_anchor() }}
  167.                             class="ec-cartRow__amountDownButton load-overlay" data-method="put" data-confirm="false">
  168.                             <span class="ec-cartRow__amountDownButton__icon"><img
  169.                                 src="{{ asset('assets/icon/minus-dark.svg') }}" alt="reduce"></span>
  170.                           </a>
  171.                         {% else %}
  172.                           <div class="ec-cartRow__amountDownButtonDisabled">
  173.                             <span class="ec-cartRow__amountDownButton__icon"><img
  174.                                 src="{{ asset('assets/icon/minus.svg') }}" alt="reduce"></span>
  175.                           </div>
  176.                         {% endif %}
  177.                         <a
  178.                           href="{{ url('cart_handle_item', {'operation': 'up', 'productClassId': ProductClass.id}) }}" {{ csrf_token_for_anchor() }}
  179.                           class="ec-cartRow__amountUpButton load-overlay" data-method="put" data-confirm="false">
  180.                           <span class="ec-cartRow__amountUpButton__icon"><img
  181.                               src="{{ asset('assets/icon/plus-dark.svg') }}" alt="increase"></span>
  182.                         </a>
  183.                       </div>
  184.                     </li>
  185.                     <li class="ec-cartRow__subtotalColumn">
  186.                       {% if negotiationPrices[Product.id] is defined %}
  187.                         <div class="ec-cartRow__sutbtotal">
  188.                           <span style="color: #666; text-decoration: line-through; font-size: 0.9em;">{{ CartItem.total_price|price }}</span><br>
  189.                           <span style="color: #28a745; font-weight: bold;">{{ negotiatedSubtotals[Product.id]|price }}</span>
  190.                         </div>
  191.                       {% else %}
  192.                         <div class="ec-cartRow__sutbtotal">{{ CartItem.total_price|price }}</div>
  193.                       {% endif %}
  194.                     </li>
  195.                   </ul>
  196.                 {% endfor %}
  197.               </div>
  198.             </div>
  199.             <div class="ec-cartRole__progress">
  200.               {% if BaseInfo.delivery_free_amount and BaseInfo.delivery_free_quantity %}
  201.                 <br/>
  202.                 {% if is_delivery_free[cartKey] %}
  203.                   {{ '現在送料無料です。'|trans }}
  204.                 {% else %}
  205.                   {{ 'あと「<strong>%price%</strong>」または「<strong>%quantity%個</strong>」のお買い上げで<strong class="ec-color-red">送料無料</strong>になります。'|trans({ '%price%': least[cartKey]|price, '%quantity%': quantity[cartKey]|number_format })|raw }}
  206.                 {% endif %}
  207.               {% elseif BaseInfo.delivery_free_amount %}
  208.                 <br/>
  209.                 {% if is_delivery_free[cartKey] %}
  210.                   {{ '現在送料無料です。'|trans }}
  211.                 {% else %}
  212.                   {{ 'あと「<strong>%price%</strong>」のお買い上げで<strong class="ec-color-red">送料無料</strong>になります。'|trans({ '%price%': least[cartKey]|price })|raw }}
  213.                 {% endif %}
  214.               {% elseif BaseInfo.delivery_free_quantity %}
  215.                 <br/>
  216.                 {% if is_delivery_free[cartKey] %}
  217.                   {{ '現在送料無料です。'|trans }}
  218.                 {% else %}
  219.                   {{ 'あと「<strong>%quantity%個</strong>」のお買い上げで<strong class="ec-color-red">送料無料</strong>になります。'|trans({ '%quantity%': quantity[cartKey]|number_format })|raw }}
  220.                 {% endif %}
  221.               {% endif %}
  222.             </div>
  223.             <div class="ec-cartRole__actions">
  224.               <div class="ec-cartRole__total">
  225.                 {% if hasNegotiatedItems and negotiatedCartTotals[cartKey] is defined and negotiatedCartTotals[cartKey] != Cart.totalPrice %}
  226.                   {{ '合計:'|trans }}<span style="color: #666; text-decoration: line-through; font-size: 0.9em;">{{ Cart.totalPrice|price }}</span><br>
  227.                   <span class="ec-cartRole__totalAmount" style="color: #28a745;">
  228.                     <i class="fa-solid fa-circle-check"></i> {{ negotiatedCartTotals[cartKey]|price }}
  229.                   </span>
  230.                 {% else %}
  231.                   {{ '合計:'|trans }}<span class="ec-cartRole__totalAmount">{{ Cart.totalPrice|price }}</span>
  232.                 {% endif %}
  233.               </div>
  234.               <a class="ec-blockBtn--action"
  235.                  href="{{ path('cart_buystep', {'cart_key':cartKey}) }}">{{ 'レジに進む'|trans }}</a>
  236.               {% if loop.last %}
  237.                 {% if app.session.get('header_footer_layout') == 'plaza' %}
  238.                   <a class="ec-blockBtn--cancel"
  239.                      href="{{ path('plaza_product_list') }}">{{ 'お買い物を続ける'|trans }}</a>
  240.                 {% else %}
  241.                   <a class="ec-blockBtn--cancel" href="{{ path('homepage') }}">{{ 'お買い物を続ける'|trans }}</a>
  242.                 {% endif %}
  243.               {% endif %}
  244.             </div>
  245.           {% endfor %}
  246.         </form>
  247.       {% else %}
  248.         {% for CartIndex,Cart in Carts %}
  249.           {% set cartKey = Cart.cart_key %}
  250.           {% for error in app.session.flashbag.get('eccube.front.cart.' ~ cartKey ~ '.request.error') %}
  251.             <div class="ec-cartRole__error">
  252.               <div class="ec-alert-warning">
  253.                 <div class="ec-alert-warning__icon"><img src="{{ asset('assets/icon/exclamation-white.svg') }}"></div>
  254.                 <div class="ec-alert-warning__text">
  255.                   {{ error|trans|nl2br }}
  256.                 </div>
  257.               </div>
  258.             </div>
  259.           {% endfor %}
  260.         {% endfor %}
  261.         <div class="ec-role">
  262.           <div class="ec-off3Grid">
  263.             <div class="ec-off3Grid__cell">
  264.               <div class="ec-alert-warning">
  265.                 <div class="ec-alert-warning__icon"><img src="{{ asset('assets/icon/exclamation-white.svg') }}"></div>
  266.                 <div class="ec-alert-warning__text">{{ '現在カート内に商品はございません。'|trans }}</div>
  267.               </div>
  268.             </div>
  269.           </div>
  270.         </div>
  271.       {% endif %}
  272.     </div>
  273.   </div>
  274. {% endblock %}