app/template/default/Product/detail.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. {% block stylesheet %}
  11.     <style>
  12.         .slick-slider {
  13.             margin-bottom: 30px;
  14.         }
  15.         .slick-dots {
  16.             position: absolute;
  17.             bottom: -45px;
  18.             display: block;
  19.             width: 100%;
  20.             padding: 0;
  21.             list-style: none;
  22.             text-align: center;
  23.         }
  24.         .slick-dots li {
  25.             position: relative;
  26.             display: inline-block;
  27.             width: 20px;
  28.             height: 20px;
  29.             margin: 0 5px;
  30.             padding: 0;
  31.             cursor: pointer;
  32.         }
  33.         .slick-dots li button {
  34.             font-size: 0;
  35.             line-height: 0;
  36.             display: block;
  37.             width: 20px;
  38.             height: 20px;
  39.             padding: 5px;
  40.             cursor: pointer;
  41.             color: transparent;
  42.             border: 0;
  43.             outline: none;
  44.             background: transparent;
  45.         }
  46.         .slick-dots li button:hover,
  47.         .slick-dots li button:focus {
  48.             outline: none;
  49.         }
  50.         .slick-dots li button:hover:before,
  51.         .slick-dots li button:focus:before {
  52.             opacity: 1;
  53.         }
  54.         .slick-dots li button:before {
  55.             content: " ";
  56.             line-height: 20px;
  57.             position: absolute;
  58.             top: 0;
  59.             left: 0;
  60.             width: 12px;
  61.             height: 12px;
  62.             text-align: center;
  63.             opacity: .25;
  64.             background-color: black;
  65.             border-radius: 50%;
  66.         }
  67.         .slick-dots li.slick-active button:before {
  68.             opacity: .75;
  69.             background-color: black;
  70.         }
  71.         .slick-dots li button.thumbnail img {
  72.             width: 0;
  73.             height: 0;
  74.         }
  75. /*=========▽ Youtube表示のためのCSS ▽===============*/
  76. .youtube{
  77.   position:relative;
  78.   padding-bottom: 56.25%;
  79.   padding-top: 25px;
  80.   height: 0;
  81. }
  82.  
  83. .youtube iframe{
  84.   position:absolute;
  85.   top:0;
  86.   right:0;
  87.   width:100%;
  88.   height:100%;
  89. }
  90. /*========= △Youtube表示のためのCSS △===============*/
  91. /*=========▽ プロ会員専用通知CSS▽===============*/
  92. .custom_shop_desc{
  93.   position:relative;
  94.   top:0;
  95.   right:0;
  96.   width:40%;
  97.   margin:auto;
  98. }
  99. /*========= △プロ会員専用通知CSS△===============*/
  100. /*=========▽ 折りたたむメニュー▽===============*/
  101. details[open] summary ~ * {
  102.   animation: open 0.5s ease-in-out;
  103. }
  104. @keyframes open {
  105.   0%   { height: 0; }
  106.   100% { height: 100%; }
  107. }
  108. details[open] p {
  109.   animation: grow 0.8s ease-in-out;
  110. }
  111. @keyframes grow {
  112.   0%   { opacity: 0; }
  113.   100% { opacity: 1; }
  114. }
  115. details summary:after {
  116.   content: "+";
  117.   color: black;
  118.   position: absolute;
  119.   font-size: 1.75rem;
  120.   line-height: 0;
  121.   margin-top: 1.25rem;
  122.   right: 0;
  123.   font-weight: 200;
  124.   transform-origin: center 17%;
  125.   font-size: 2rem;
  126.   display:inline-block;
  127.   height:1rem;
  128.   transition: 800ms linear;
  129. }
  130. details[open] summary:after {
  131.   transform: rotate(945deg);
  132. }
  133. details summary::-webkit-details-marker {
  134.   display: none;
  135. }
  136. details summary {
  137.   width: 100%;
  138.   padding: 0.1rem 0;
  139.   border-top: 0.1px solid black;
  140.   position: relative;
  141.   cursor: pointer;
  142.   font-size: 1.75rem;
  143.   font-weight: 300;
  144.   list-style: none;
  145. }
  146. details summary {
  147.   outline: 0;
  148. }
  149. details p {
  150.   font-size: 1.5rem;
  151.   margin: 0 0 0rem;
  152.   padding-top: 0rem;
  153. }
  154. }
  155. section {
  156.   padding-top: 1em;
  157.   width: 50%;
  158.   margin: auto;
  159. }
  160. .custom_jiasuan_jifen{
  161.   color:#c80be5 !important;
  162.   font-size: 1em;
  163.   padding-left: 0 !important;
  164.   display: inline-block;
  165.     padding: 0 0.3em;
  166.     font-weight: bold;
  167. }
  168. /*========= △折りたたむメニュー△===============*/
  169. #payment-request-button{
  170.     display: none !important;
  171. }
  172.     </style>
  173. {% endblock %}
  174. {% block javascript %}
  175.     <script>
  176.         eccube.classCategories = {{ class_categories_as_json(Product)|raw }};
  177.         // 規格2に選択肢を割り当てる。
  178.         function fnSetClassCategories(form, classcat_id2_selected) {
  179.             var $form = $(form);
  180.             var product_id = $form.find('input[name=product_id]').val();
  181.             var $sele1 = $form.find('select[name=classcategory_id1]');
  182.             var $sele2 = $form.find('select[name=classcategory_id2]');
  183.             eccube.setClassCategories($form, product_id, $sele1, $sele2, classcat_id2_selected);
  184.         }
  185.         {% if form.classcategory_id2 is defined %}
  186.         fnSetClassCategories(
  187.             $('#form1'), {{ form.classcategory_id2.vars.value|json_encode|raw }}
  188.         );
  189.         {% elseif form.classcategory_id1 is defined %}
  190.         eccube.checkStock($('#form1'), {{ Product.id }}, {{ form.classcategory_id1.vars.value|json_encode|raw }}, null);
  191.         {% endif %}
  192.     </script>
  193.     <script>
  194.         $(function() {
  195.             // bfcache無効化
  196.             $(window).bind('pageshow', function(event) {
  197.                 if (event.originalEvent.persisted) {
  198.                     location.reload(true);
  199.                 }
  200.             });
  201.             $('.item_visual').slick({
  202.                 dots: false,
  203.                 arrows: false,
  204.                 responsive: [{
  205.                     breakpoint: 768,
  206.                     settings: {
  207.                         dots: true
  208.                     }
  209.                 }]
  210.             });
  211.             $('.slideThumb').on('click', function() {
  212.                 var index = $(this).attr('data-index');
  213.                 $('.item_visual').slick('slickGoTo', index, false);
  214.             })
  215.         });
  216.     </script>
  217.     <script>
  218.         $(function() {
  219.             // 获取所有具有 class="product-option-select" 的 select 标签
  220.             const selects = document.querySelectorAll('.product-option-select');
  221.             // 检查是否所有 select 标签都选择了选项
  222.             function areAllOptionsSelected() {
  223.                 for (let select of selects) {
  224.                     if (select.value === "") { // 检查是否有未选择的选项
  225.                         return false;
  226.                     }
  227.                 }
  228.                 return true;
  229.             }
  230.             // 绑定一个事件监听器,监控选项的变化
  231.             selects.forEach(select => {
  232.                 select.addEventListener('change', function() {
  233.                     if (areAllOptionsSelected()) {
  234.                         console.log('所有选项都已选择');
  235.                     } else {
  236.                         console.log('还有选项未选择');
  237.                     }
  238.                 });
  239.             });
  240.             $('.add-cart').on('click', function(event) {
  241.                 {% if form.classcategory_id1 is defined %}
  242.                 // 規格1フォームの必須チェック
  243.                 if ($('#classcategory_id1').val() == '__unselected' || $('#classcategory_id1').val() == '') {
  244.                     $('#classcategory_id1')[0].setCustomValidity('{{ '項目が選択されていません'|trans }}');
  245.                     return true;
  246.                 } else {
  247.                     $('#classcategory_id1')[0].setCustomValidity('');
  248.                 }
  249.                 {% endif %}
  250.                 {% if form.classcategory_id2 is defined %}
  251.                 // 規格2フォームの必須チェック
  252.                 if ($('#classcategory_id2').val() == '__unselected' || $('#classcategory_id2').val() == '') {
  253.                     $('#classcategory_id2')[0].setCustomValidity('{{ '項目が選択されていません'|trans }}');
  254.                     return true;
  255.                 } else {
  256.                     $('#classcategory_id2')[0].setCustomValidity('');
  257.                 }
  258.                 {% endif %}
  259.                 if (!areAllOptionsSelected()) {
  260.                     alert('未選択の項目があります!');
  261.                     return false;
  262.                 }
  263.                 // 個数フォームのチェック
  264.                 if ($('#quantity').val() < 1) {
  265.                     $('#quantity')[0].setCustomValidity('{{ '1以上で入力してください。'|trans }}');
  266.                     return true;
  267.                 } else {
  268.                     $('#quantity')[0].setCustomValidity('');
  269.                 }
  270.                 event.preventDefault();
  271.                 $form = $('#form1');
  272.                 $.ajax({
  273.                     url: $form.attr('action'),
  274.                     type: $form.attr('method'),
  275.                     data: $form.serialize(),
  276.                     dataType: 'json',
  277.                     beforeSend: function(xhr, settings) {
  278.                         // Buttonを無効にする
  279.                         $('.add-cart').prop('disabled', true);
  280.                     }
  281.                 }).done(function(data) {
  282.                     // レスポンス内のメッセージをalertで表示
  283.                     $.each(data.messages, function() {
  284.                         $('#ec-modal-header').html(this);
  285.                     });
  286.                     
  287.                     if ('{{user_login}}' == "N") {
  288.                         var cartUrl = '{{ url('shopping_nonmember') }}';
  289.                         window.location.href = cartUrl;
  290.                     }
  291.                     else{
  292.                         $('.ec-modal').show();
  293.                     }
  294.                     // カートブロックを更新する
  295.                     $.ajax({
  296.                         url: "{{ url('block_cart') }}",
  297.                         type: 'GET',
  298.                         dataType: 'html'
  299.                     }).done(function(html) {
  300.                         $('.ec-headerRole__cart').html(html);
  301.                     });
  302.                 }).fail(function(data) {
  303.                     alert('{{ 'カートへの追加に失敗しました。'|trans }}');
  304.                 }).always(function(data) {
  305.                     // Buttonを有効にする
  306.                     $('.add-cart').prop('disabled', false);
  307.                 });
  308.             });
  309.         });
  310.         $('.ec-modal-overlay, .ec-modal .ec-inlineBtn--cancel').on('click', function() {
  311.             $('.ec-modal').hide()
  312.         });
  313.     </script>
  314. {% endblock %}
  315. {% block main %}
  316.     <div class="ec-productRole">
  317.         <div class="ec-grid2">
  318.             <div class="ec-grid2__cell">
  319.                 <div class="ec-sliderItemRole">
  320.                     <div class="item_visual">
  321.                         {% for ProductImage in Product.ProductImage %}
  322.                             <div class="slide-item"><img src="{{ asset(ProductImage, 'save_image') }}"></div>
  323.                         {% else %}
  324.                             <div class="slide-item"><img src="{{ asset(''|no_image_product, 'save_image') }}"/></div>
  325.                         {% endfor %}
  326.                     </div>
  327.                     <div class="item_nav">
  328.                         {% for ProductImage in Product.ProductImage %}
  329.                             <div class="slideThumb" data-index="{{ loop.index0 }}"><img src="{{ asset(ProductImage, 'save_image') }}"></div>
  330.                         {% endfor %}
  331.                     </div>
  332.                 </div>
  333.             </div>
  334.             <div class="ec-grid2__cell">
  335.                 <div class="ec-productRole__profile">
  336.                     {# 商品名 #}
  337.                     <div class="ec-productRole__title">
  338.                         <h2 class="ec-headingTitle">{{ Product.name }}</h2>
  339.                     </div>
  340.                     {# タグ #}
  341.                     <ul class="ec-productRole__tags">
  342.                         {% for Tag in Product.Tags %}
  343.                             <li class="ec-productRole__tag tag_{{ Tag.id }}">{{ Tag }}</li>
  344.                         {% endfor %}
  345.                     </ul>
  346.                     {# 関連カテゴリ #}
  347.                     {% if Product.ProductCategories is not empty %}
  348.                         <div class="ec-productRole__category">
  349.                             <div>{{ '関連カテゴリ'|trans }}</div>
  350.                             {% for ProductCategory in Product.ProductCategories %}
  351.                                 <ul>
  352.                                     <li>
  353.                                         {% for Category in ProductCategory.Category.path %}
  354.                                             <a href="{{ url('product_list') }}?category_id={{ Category.id }}">{{ Category.name }}</a>
  355.                                         {%- if loop.last == false %}
  356.                                             <span>></span>
  357.                                         {% endif -%}
  358.                                         {% endfor %}
  359.                                     </li>
  360.                                 </ul>
  361.                             {% endfor %}
  362.                         </div>
  363.                     {% endif %}
  364.                         </div>
  365.                         
  366.                     {# 商品コード #}
  367.                     {# {% if Product.code_min is not empty %}
  368.                         <div class="ec-productRole__code">
  369.                             {{ '商品コード'|trans }}: <span class="product-code-default">{{ Product.code_min }}
  370.                             {% if Product.code_min != Product.code_max %} ~ {{ Product.code_max }}{% endif %}</span>
  371.                         </div>
  372.                     {% endif %} #}
  373.                         
  374.                     {# 通常価格 #}
  375.                     {% if Product.hasProductClass -%}
  376.                         <div class="ec-productRole__priceRegular">
  377.                             {% if Product.getPrice01Min is not null and Product.getPrice01IncTaxMin == Product.getPrice01IncTaxMax %}
  378.                                 <span class="ec-productRole__priceRegularPrice">{{ '通常価格'|trans }}:<span class="price01-default">{{ Product.getPrice01IncTaxMin|price }}</span></span>
  379.                                 <span class="ec-productRole__priceRegularTax">{{ '税込'|trans }}</span>
  380.                             {% elseif Product.getPrice01Min is not null and Product.getPrice01Max is not null %}
  381.                                 <span class="ec-productRole__priceRegularPrice">{{ '通常価格'|trans }}:<span class="price01-default">{{ Product.getPrice01IncTaxMin|price }}~ {{ Product.getPrice01IncTaxMax|price }}</span></span>
  382.                                 <span class="ec-productRole__priceRegularTax">{{ '税込'|trans }}</span>
  383.                             {% endif %}
  384.                         </div>
  385.                     {% else %}
  386.                         {% if Product.getPrice01Max is not null %}
  387.                             <span class="ec-productRole__priceRegularPrice">{{ '通常価格'|trans }}:{{ Product.getPrice01IncTaxMin|price }}</span>
  388.                             <span class="ec-productRole__priceRegularTax">{{ '税込'|trans }}</span>
  389.                         {% endif %}
  390.                     {% endif %}
  391.                     {# 販売価格 #}
  392.                     <div class="ec-productRole__price">
  393.                         {% if Product.hasProductClass -%}
  394.                             {% if Product.getPrice02IncTaxMin == Product.getPrice02IncTaxMax %}
  395.                                 <div class="ec-price">
  396.                                     <span style="font-size: 1em;font-weight: bold;    color: #F74B57;line-height: 1.6;">販売価格:</span>
  397.                                     <span class="ec-price__price price02-default">{{ Product.getPrice02IncTaxMin|price }}</span>
  398.                                     <span class="ec-price__tax">{{ '税込'|trans }}</span>
  399.                                 </div>
  400.                             {# 商户会员显示折扣价格 #}
  401.                             {% if is_shop %}
  402.                                 {% if Product.getShopDiscount =='Y' %}
  403.                                     {% set discount_price = (100-discount)/100 * Product.getPrice02IncTaxMin %}
  404.                                     <div class="ec-price">
  405.                                         <span class="ec-price__price price02-default">割引価格:{{ discount_price|price }}</span>
  406.                                         <span class="ec-price__tax">{{ '税込'|trans }}</span>
  407.                                     </div>
  408.                                 {% else %}{# 非折扣商品显示'プロ会員値引き対象外商品'#}
  409.                                     <div class="ec-price">
  410.                                         <span class="ec-price__price price02-default">プロ会員値引き対象外商品</span>
  411.                                     </div>
  412.                                 {% endif %}
  413.                             {% elseif points_rate != 0 %}{#  非商户会员情况下,显示积分 #}
  414.                                 {% set points = (points_rate/100) * Product.getPrice02Min %}
  415.                                     <div class="ec-price">
  416.                                         <span class="custom_jiasuan_jifen">加算ポイント:{{ points|round(0,'common')|number_format }}pt</span>
  417.                                     </div>
  418.                             {% endif %}
  419.                             {% else %}
  420.                                 <div class="ec-price">
  421.                                     <span style="font-size: 1em;font-weight: bold;    color: #F74B57;line-height: 1.6;">販売価格:</span>
  422.                                     <span class="ec-price__price price02-default">{{ Product.getPrice02IncTaxMin|price }} ~ {{ Product.getPrice02IncTaxMax|price }}</span>
  423.                                     <span class="ec-price__tax">{{ '税込'|trans }}</span>
  424.                                 </div>
  425.                                 {# 商户会员显示折扣价格 #}
  426.                                 {% if is_shop %}
  427.                                     {% if Product.getShopDiscount =='Y' %}
  428.                                         {% set discount_price1 = (100-discount)/100 * Product.getPrice02IncTaxMin %}
  429.                                         {% set discount_price2 = (100-discount)/100 * Product.getPrice02IncTaxMax %}
  430.                                         <div class="ec-price">
  431.                                             <span class="ec-price__price price02-default">割引価格:{{ discount_price1|price }} ~ {{ discount_price1|price }}</span>
  432.                                             <span class="ec-price__tax">{{ '税込'|trans }}</span>
  433.                                         </div>
  434.                                     {% else %}{# 非折扣商品显示'プロ会員値引き対象外商品'#}
  435.                                         <div class="ec-price">
  436.                                             <span class="ec-price__price price02-default">プロ会員値引き対象外商品</span>
  437.                                         </div>
  438.                                     {% endif %}
  439.                                 {% elseif points_rate != 0 %} {#  非商户会员情况下,显示积分 #}
  440.                                     {% set points1 = (points_rate/100) * Product.getPrice02Min %}
  441.                                     {% set points2 = (points_rate/100) * Product.getPrice02Max %}
  442.                                         <div class="ec-price">
  443.                                             <span class="custom_jiasuan_jifen">加算ポイント:{{ points1|round(0,'common')|number_format }} ~ {{ points2|round(0,'common')|number_format }}pt</span>
  444.                                         </div>                               
  445.                                 {% endif %}
  446.                             {% endif %}
  447.                         {% else %}
  448.                             <div class="ec-price">
  449.                                 <span style="font-size: 1em;font-weight: bold;    color: #F74B57;line-height: 1.6;">販売価格:</span>
  450.                                 <span class="ec-price__price">{{ Product.getPrice02IncTaxMin|price }}{{ '税込'|trans }}</span>
  451.                                 <span class="ec-price__tax"></span>
  452.                             </div>
  453.                             {# 商户会员显示折扣价格 #}
  454.                             {% if is_shop %}
  455.                                 {% if Product.getShopDiscount =='Y' %}
  456.                                     {% set discount_price = (100-discount)/100 * Product.getPrice02IncTaxMin %}
  457.                                     <div class="ec-price">
  458.                                         <span class="ec-price__price price02-default">割引価格:{{ discount_price|price }}</span>
  459.                                         <span class="ec-price__tax">{{ '税込'|trans }}</span>
  460.                                     </div>
  461.                                 {% else %}{# 非折扣商品显示'プロ会員値引き対象外商品'#}
  462.                                     <div class="ec-price">
  463.                                         <span class="ec-price__price price02-default">プロ会員値引き対象外商品</span>
  464.                                     </div>
  465.                                 {% endif %}
  466.                             {% elseif points_rate != 0 %}{#  非商户会员情况下,显示积分 #}
  467.                                 {% set points = (points_rate/100) * Product.getPrice02Min %}
  468.                                     <div class="ec-price">
  469.                                         <span class="custom_jiasuan_jifen">加算ポイント:{{ points|round(0,'common')|number_format }}pt</span>
  470.                                     </div>
  471.                             {% endif %}
  472.                         {% endif %}
  473.                     </div>
  474.                     <form action="{{ url('product_add_cart', {id:Product.id}) }}" method="post" id="form1" name="form1">
  475.                         {% if Product.stock_find %}
  476.                             <div class="ec-productRole__actions">
  477.                                 {% if form.classcategory_id1 is defined %}
  478.                                     <div class="ec-select">
  479.                                         {{ form_label(form.classcategory_id1) }}
  480.                                         {{ form_widget(form.classcategory_id1) }}
  481.                                         {{ form_errors(form.classcategory_id1) }}
  482.                                     </div>
  483.                                     {% if form.classcategory_id2 is defined %}
  484.                                         <div class="ec-select">
  485.                                             {{ form_label(form.classcategory_id2) }}
  486.                                             {{ form_widget(form.classcategory_id2) }}
  487.                                             {{ form_errors(form.classcategory_id2) }}
  488.                                         </div>
  489.                                     {% endif %}
  490.                                 {% endif %}
  491.                                 <div class="ec-numberInput"><span>{{ '数量'|trans }}</span>
  492.                                     {{ form_widget(form.quantity) }}
  493.                                     {{ form_errors(form.quantity) }}
  494.                                 </div>
  495.                             </div>
  496.                             <div class="ec-productRole__btn custom_add_cart">
  497.                                 <button type="submit" class="ec-blockBtn--action add-cart">
  498.                                     {{ 'カートに入れる'|trans }}   
  499.                                 </button>
  500.                             </div>
  501.                         {% else %}
  502.                             <div class="ec-productRole__btn ">
  503.                                 <button type="button" class="ec-blockBtn--action" disabled="disabled">
  504.                                     {{ 'ただいま品切れ中です。'|trans }}
  505.                                 </button>
  506.                             </div>
  507.                         {% endif %} 
  508.                         {{ form_rest(form) }}
  509.                     </form>
  510.                     <div class="ec-modal">
  511.                         <div class="ec-modal-overlay">
  512.                             <div class="ec-modal-wrap">
  513.                                 <span class="ec-modal-close"><span class="ec-icon"><img src="{{ asset('assets/icon/cross-dark.svg') }}" alt=""/></span></span>
  514.                                 <div id="ec-modal-header" class="text-center">{{ 'カートに追加しました。'|trans }}</div>
  515.                                 <div class="ec-modal-box">
  516.                                     <div class="ec-role">
  517.                                         <span class="ec-inlineBtn--cancel">{{ 'お買い物を続ける'|trans }}</span>
  518.                                         <a href="{{ url('cart') }}" class="ec-inlineBtn--action">{{ 'カートへ進む'|trans }}</a>
  519.                                     </div>
  520.                                 </div>
  521.                             </div>
  522.                         </div>
  523.                     </div>
  524.                     {% if BaseInfo.option_favorite_product %}
  525.                         <form action="{{ url('product_add_favorite', {id:Product.id}) }}" method="post">
  526.                             <div class="ec-productRole__btn">
  527.                                 {% if is_favorite == false %}
  528.                                     <button type="submit" id="favorite" class="ec-blockBtn--cancel">
  529.                                         {{ 'お気に入りに追加'|trans }}
  530.                                         {% if favorite_count %}
  531.                                             <span class="favorite-count" data-prefix="件">{{ favorite_count }}件</span>
  532.                                         {% endif %}
  533.                                     </button>
  534.                                 {% else %}
  535.                                     <button type="submit" id="favorite" class="ec-blockBtn--cancel"
  536.                                             disabled="disabled">{{ 'お気に入りに追加済です。'|trans }}
  537.                                     </button>
  538.                                 {% endif %}
  539.                             </div>
  540.                         </form>
  541.                     {% endif %}
  542.                     {% if is_shop == false %}
  543.                         <div class="ec-productRole__description">{{ Product.description_detail|raw|nl2br }}</div>
  544.                     {% else %}
  545.                         <div class="ec-productRole__description custom_shop_detail">{{ Product.description_detail|raw|nl2br }}</div>
  546.                     {% endif %}
  547.                     {% if Product.freearea %}
  548.                         {% if is_shop == false %}
  549.                             <!-- <div class="ec-productRole__description">{{ include(template_from_string(Product.freearea)) }}</div> -->
  550.                             <div class="ec-productRole__description">{{ Product.freearea|raw|nl2br }}</div>
  551.                         {% else %}
  552.                             <!-- <div class="ec-productRole__description custom_shop_detail">{{ include(template_from_string(Product.freearea)) }}</div> -->
  553.                             <div class="ec-productRole__description custom_shop_detail">{{ Product.freearea|raw|nl2br }}</div>
  554.                         {% endif %}
  555.                     {% endif %}
  556.                 </div>
  557.            </div>
  558.      </div>
  559.     </div>
  560. {% endblock %}