app/template/default/Product/detail.twig line 1

Open in your IDE?
  1. {% extends 'default_frame.twig' %}
  2. {% set body_class = 'product_page' %}
  3. {% block stylesheet %}
  4.   <link rel="stylesheet" href="/css/sm.css?v=26" media="screen and (max-width:640px)"/>
  5.   <link rel="stylesheet" href="/css/pc.css?v=50" media="screen and (min-width:641px)"/>
  6.   <link rel="stylesheet" href="/css/product_detail.css"/>
  7.   <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox.css" />
  8.   <style>/* Fancybox全体を最前面に */
  9.     .fancybox__container   { z-index: 2147483640 !important; }
  10.     #syousai_img .none{
  11.       display: none;
  12.     }
  13.     /* 再入荷通知ボタン */
  14.     .btns.restock a {
  15.       background-color: #ff6b6b !important;
  16.       border-color: #ff6b6b !important;
  17.       color: #fff !important;
  18.     }
  19.     .btns.restock a:hover {
  20.       background-color: #ee5a5a !important;
  21.       border-color: #ee5a5a !important;
  22.     }
  23.     .btns.restock-registered a {
  24.       background-color: #6c757d !important;
  25.       border-color: #6c757d !important;
  26.       color: #fff !important;
  27.     }
  28.     .btns.restock-registered a:hover {
  29.       background-color: #5a6268 !important;
  30.       border-color: #545b62 !important;
  31.     }
  32.   </style>
  33. {% endblock %}
  34. {% block javascript %}
  35. <script src="https://cdn.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox.umd.js"></script>
  36. <script>
  37.   eccube.classCategories = {{ class_categories_as_json(Product)|raw }};
  38.       // 規格2に選択肢を割り当てる。
  39.       function fnSetClassCategories(form, classcat_id2_selected) {
  40.           var $form = $(form);
  41.           var product_id = $form.find('input[name=product_id]').val();
  42.           var $sele1 = $form.find('select[name=classcategory_id1]');
  43.           var $sele2 = $form.find('select[name=classcategory_id2]');
  44.           eccube.setClassCategories($form, product_id, $sele1, $sele2, classcat_id2_selected);
  45.       }
  46.       {% if form.classcategory_id2 is defined %}
  47.       fnSetClassCategories(
  48.           $('#form1'),{{ form.classcategory_id2.vars.value|json_encode|raw }}
  49.       );
  50.       {% elseif form.classcategory_id1 is defined %}
  51.       eccube.checkStock($('#form1'), {{ Product.id }}, {{ form.classcategory_id1.vars.value|json_encode|raw }}, null);
  52.       {% endif %}
  53.   </script>
  54.   <script>
  55.       $(function () {
  56.           // bfcache無効化
  57.           $(window).bind('pageshow', function (event) {
  58.               if (event.originalEvent.persisted) {
  59.                   location.reload(true);
  60.               }
  61.           });
  62.           // Core Web Vital の Cumulative Layout Shift(CLS)対策のため
  63.           // img タグに width, height が付与されている.
  64.           // 630px 未満の画面サイズでは縦横比が壊れるための対策
  65.           // see https://github.com/EC-CUBE/ec-cube/pull/5023
  66.           $('.ec-grid2__cell').hide();
  67.           var removeSize = function () {
  68.               $('.slide-item').height('');
  69.               $('.slide-item img')
  70.                   .removeAttr('width')
  71.                   .removeAttr('height')
  72.                   .removeAttr('style');
  73.           };
  74.           var slickInitial = function (slick) {
  75.               $('.ec-grid2__cell').fadeIn(1500);
  76.               var baseHeight = $(slick.target).height();
  77.               var baseWidth = $(slick.target).width();
  78.               var rate = baseWidth / baseHeight;
  79.               $('.slide-item').height(baseHeight * rate); // 余白を削除する
  80.               // transform を使用することでCLSの影響を受けないようにする
  81.               $('.slide-item img')
  82.                   .css(
  83.                       {
  84.                           'transform-origin': 'top left',
  85.                           'transform': 'scaleY(' + rate + ')',
  86.                           'transition': 'transform .1s'
  87.                       }
  88.                   );
  89.               // 正しいサイズに近くなったら属性を解除する
  90.               setTimeout(removeSize, 500);
  91.           };
  92.           $('.item_visual').on('init', slickInitial);
  93.           // リサイズ時は CLS の影響を受けないため属性を解除する
  94.           $(window).resize(removeSize);
  95.           $('.item_visual').slick({
  96.               dots: false,
  97.               arrows: false,
  98.               responsive: [{
  99.                   breakpoint: 768,
  100.                   settings: {
  101.                       dots: true
  102.                   }
  103.               }]
  104.           });
  105.           $('.slideThumb').on('click', function () {
  106.               var index = $(this).attr('data-index');
  107.               $('.item_visual').slick('slickGoTo', index, false);
  108.           })
  109.       });
  110.   </script>
  111.   <script>
  112.       $(function () {
  113.           $('.add-cart').on('click', function (event) {
  114.             {% if form.classcategory_id1 is defined %}
  115.               // 規格1フォームの必須チェック
  116.               if ($('#classcategory_id1').val() == '__unselected' || $('#classcategory_id1').val() == '') {
  117.                   $('#classcategory_id1')[0].setCustomValidity('{{ '項目を選択してください'|trans }}');
  118.                   return true;
  119.               } else {
  120.                   $('#classcategory_id1')[0].setCustomValidity('');
  121.               }
  122.             {% endif %}
  123.             {% if form.classcategory_id2 is defined %}
  124.               // 規格2フォームの必須チェック
  125.               if ($('#classcategory_id2').val() == '__unselected' || $('#classcategory_id2').val() == '') {
  126.                   $('#classcategory_id2')[0].setCustomValidity('{{ '項目を選択してください'|trans }}');
  127.                   return true;
  128.               } else {
  129.                   $('#classcategory_id2')[0].setCustomValidity('');
  130.               }
  131.             {% endif %}
  132.               // 個数フォームのチェック
  133.               if ($('#quantity').val() < 1) {
  134.                   $('#quantity')[0].setCustomValidity('{{ '1以上で入力してください。'|trans }}');
  135.                   return true;
  136.               } else {
  137.                   $('#quantity')[0].setCustomValidity('');
  138.               }
  139.               event.preventDefault();
  140.               $form = $('#form1');
  141.               $.ajax({
  142.                   url: $form.attr('action'),
  143.                   type: $form.attr('method'),
  144.                   data: $form.serialize(),
  145.                   dataType: 'json',
  146.                   beforeSend: function (xhr, settings) {
  147.                       // Buttonを無効にする
  148.                       $('.add-cart').prop('disabled', true);
  149.                   }
  150.               }).done(function (data) {
  151.                   // レスポンス内のメッセージをalertで表示
  152.                   $.each(data.messages, function () {
  153.                       $('#ec-modal-header').text(this);
  154.                   });
  155.                   $('.ec-modal').show()
  156.                   // カートブロックを更新する
  157.                   $.ajax({
  158.                       url: "{{ url('block_cart') }}",
  159.                       type: 'GET',
  160.                       dataType: 'html'
  161.                   }).done(function (html) {
  162.                       $('.ec-headerRole__cart').html(html);
  163.                   });
  164.               }).fail(function (data) {
  165.                   alert('{{ 'カートへの追加に失敗しました。'|trans }}');
  166.               }).always(function (data) {
  167.                   // Buttonを有効にする
  168.                   $('.add-cart').prop('disabled', false);
  169.               });
  170.           });
  171.       });
  172.       $('.ec-modal-wrap').on('click', function (e) {
  173.           // モーダル内の処理は外側にバブリングさせない
  174.           e.stopPropagation();
  175.       });
  176.       $('.ec-modal-overlay, .ec-modal, .ec-modal-close, .ec-inlineBtn--cancel').on('click', function () {
  177.           $('.ec-modal').hide()
  178.       });
  179.   </script>
  180.   <script type="application/ld+json">
  181.     {
  182.     "@context": "https://schema.org/",
  183.     "@type": "Product",
  184.     "name": "{{ Product.name }}",
  185.     "image": [
  186.     {% for img in Product.ProductImage %}
  187.       "{{ app.request.schemeAndHttpHost }}{{ asset(img, 'save_image') }}"{% if not loop.last %},{% endif %}
  188.     {% else %}
  189.       "{{ app.request.schemeAndHttpHost }}{{ asset(''|no_image_product, 'save_image') }}"
  190.     {% endfor %}
  191.     ],
  192.     "description": "{{ Product.description_list | default(Product.description_detail) | replace({'\n': '', '\r': ''}) | slice(0,300) }}
  193.     ",
  194.     {% if Product.code_min %}
  195.       "sku": "{{ Product.code_min }}",
  196.     {% endif %}
  197.     "offers": {
  198.     "@type": "Offer",
  199.     "url": "{{ url('product_detail', {'id': Product.id}) }}",
  200.     "priceCurrency": "{{ eccube_config.currency }}",
  201.     "price": "{{ Product.getPrice02IncTaxMin ? Product.getPrice02IncTaxMin : 0 }}",
  202.     "availability": "{{ Product.stock_find ? "InStock" : "OutOfStock" }}"
  203.     }
  204.     }
  205.   </script>
  206.   <script>
  207.       $(function () {
  208.           $("#syosuai_wrap dl dt#syousai_img p img").on("click", function () {
  209.               let src = $(this).attr("src");
  210.               $("#main_img").attr("src", src);
  211.           });
  212.       });
  213.       function doSubmit() {
  214.           $("#form1").submit();
  215.       }
  216.       function doFavorite() {
  217.           $("#form2").submit();
  218.       }
  219.       $(function () {
  220.         $('.ec-layoutRole__mainBottom').insertAfter('.syousai_txt');
  221.       });
  222.       function do_contact_product(){
  223.         $("#contact_product").submit();
  224.       }
  225.       function changeImage(src){
  226.         $("#main_img").attr("src", src);
  227.       }
  228.       // 再入荷通知の登録・解除
  229.       function handleRestockAction(productId, type) {
  230.         var action = type === 1 ? "登録" : "解除";
  231.         if (confirm("再入荷通知を" + action + "しますか?")) {
  232.           location.href = "{{ url('product_restock', {'id': 0}) }}".replace('/0', '/' + productId) + "?type=" + type;
  233.         }
  234.       }
  235.       // 数量変更時にリクエスト予約フォームに反映
  236.       $(function(){
  237.         $("#quantity").on("change", function(){
  238.           var val = $(this).val();
  239.           $("#reserve_num").val(val);
  240.         });
  241.       });
  242.   </script>
  243.     <script>
  244.     //カート固定
  245.     (function () {
  246.       const cart = document.getElementById('cartfix');
  247.       const cartbox = document.getElementById('cartbox');
  248.       const wrap = document.querySelector('.ec-layoutRole__contents');
  249.       function syncCartboxHeight() {
  250.         cartbox.style.height = 'auto'; // 焼き付いた高さを解除してから実寸を測る (縦白紙バグ対策)
  251.         cartbox.style.height = wrap.offsetHeight + 'px';
  252.       }
  253.       function onScroll() {
  254.         const screenWidth = window.innerWidth;
  255.         const distanceFromBottom =
  256.           wrap.offsetHeight - window.scrollY - cart.offsetHeight;
  257.         syncCartboxHeight();
  258.         if (screenWidth > 640) {
  259.           if (window.scrollY < 60) {
  260.             cart.style.position = 'sticky';
  261.             cart.style.top = '214px';
  262.             cart.style.bottom = 'auto';
  263.             cart.style.padding = '20px';
  264.           }
  265.           else if (distanceFromBottom <= 60) {
  266.             cart.style.position = 'absolute';
  267.             cart.style.top = 'auto';
  268.             cart.style.bottom = '68px';
  269.             cart.style.padding = '20px';
  270.           }
  271.           else {
  272.             cart.style.position = 'sticky';
  273.             cart.style.top = '214px';
  274.             cart.style.bottom = 'auto';
  275.             cart.style.padding = '20px';
  276.           }
  277.         }
  278.         else {
  279.           cart.style.position = 'relative';
  280.           cart.style.top = 'auto';
  281.           cart.style.bottom = 'auto';
  282.           cartbox.style.height = 'auto';
  283.         }
  284.       }
  285.       syncCartboxHeight();
  286.       window.addEventListener('scroll', onScroll);
  287.       window.addEventListener('resize', syncCartboxHeight);
  288.       window.addEventListener('load', syncCartboxHeight); // 画像/スライダー確定後に再同期
  289.     })();
  290.     </script>
  291. <link rel="stylesheet" href="/css/slider-pro/slider-pro.min.css" media="screen"/>
  292. <script src="/js/jquery.sliderPro.js"></script>
  293. <script type="text/javascript">
  294.   $(function(){
  295.     doSlider();
  296.   });
  297.   function doSlider(){
  298.     $('#palace_img_area').sliderPro({
  299.       width:850,
  300.       height: 850,
  301.       thumbnailWidth :80,
  302.       thumbnailHeight:80,
  303.       thumbnailPointer :true,
  304.       fade: true,
  305.       arrows: true,
  306.       fadeArrows:false,
  307.       thumbnailArrows:true,
  308.       fadeThumbnailArrows:false,
  309.       buttons: false,
  310.       fullScreen: false,
  311.       thumbnailArrows: true,
  312.       autoHeight: true,
  313.       autoplay: false
  314.     });
  315.   }
  316.   </script>
  317. {% endblock %}
  318. {% block main %}
  319.   {% set id = Product.id %}
  320.     <div id="syosuai_wrap">
  321.       <dl>
  322.         <dt id="syousai_img">
  323.           <!--//商品画像-->
  324.           <div id="palace_img_area" class="slider-pro">
  325.             <div class="sp-slides">
  326.               {% for ProductImage in Product.ProductImage %}
  327.                 <div class="sp-slide">
  328.                   <a href="{{ asset(ProductImage, 'save_image') }}" data-fancybox="gallery">
  329.                     <img src="{{ asset(ProductImage, 'save_image') }}" loading="lazy" alt="#"></a>
  330.                 </div>
  331.               {% endfor %}
  332.             </div>
  333.             <div class="sp-thumbnails">
  334.               {% for ProductImage in Product.ProductImage %}
  335.                 <img class="sp-thumbnail" src="{{ asset(ProductImage, 'save_image') }}" alt="#"/>
  336.               {% endfor %}
  337.             </div>
  338.           </div>
  339.           <!--//商品画像-->
  340.         </dt>
  341.         <dd id="syousai_txt">
  342.           <h1>{{ Product.name }}</h1>
  343.           {% if (htEx[1] is defined and htEx[1]) or
  344.             (htEx[50] is defined and htEx[50]) or
  345.             (htEx[3] is defined and htEx[3]) or
  346.             (htEx[28] is defined and htEx[28])
  347.           %}
  348.             <h2>
  349.               {% if htEx[1] is defined and htEx[1] %}
  350.                 {% if htEx[1] == "未鑑定" %}
  351.                   <span>未鑑定</span>
  352.                 {% else %}
  353.                   <span>{{ htEx[1] }}</span>
  354.                 {% endif %}
  355.               {% endif %}
  356.               {% if htEx[50] is defined and htEx[50] %}<span>{{ htEx[50] }}</span>{% endif %}
  357.               {% if htEx[3] is defined and htEx[3] and htEx[3] != "---" %}<span>グレード:{{ htEx[3] }}</span>{% endif %}
  358.               {% if htEx[28] is defined and htEx[28] == "有り" %}<span>専用BOX付き</span>{% endif %}
  359.             </h2>
  360.           {% endif %}
  361.           <p class="clear"></p>
  362.           <table border="0" cellspacing="0" cellpadding="0" class="item_spec_table">
  363.             <tbody>
  364.             <tr>
  365.               <th>品番</th>
  366.               <td>{{ Product.id }}</td>
  367.             </tr>
  368.             {% if htEx[1] is defined and htEx[1] and htEx[2] is defined and htEx[2] %}
  369.               <tr>
  370.                 <th>鑑定番号</th>
  371.                 <td>
  372.                   {% if htEx[1] == "PCGS" %}
  373.                     <img src="/img/pcgslogo.png" class="type_logo" alt="PCGS">
  374.                     <a href="https://www.pcgsasia.com/cert/{{ htEx[2] }}?l=ja"
  375.                        target="_blank">{{ htEx[2] }}</a>
  376.                   {% elseif htEx[1] == "NGC" and htEx[3] is defined %}
  377.                     <img src="/img/ngc.jpg" class="type_logo" alt="NGC">
  378.                     <a href="https://www.ngccoin.com/certlookup/{{ htEx[2] }}/{{ htEx[3]|replace({' ': ''}) }}/"
  379.                        target="_blank">{{ htEx[2] }}</a>
  380.                   {% endif %}
  381.                 </td>
  382.               </tr>
  383.             {% endif %}
  384.             {% if htEx[3] is defined and htEx[3] and htEx[3] != "---" %}
  385.               <tr>
  386.                 <th>グレード数</th>
  387.                 <td>{{ htEx[3] }}</td>
  388.               </tr>
  389.             {% endif %}
  390.             {% if htEx[20] is defined and htEx[20] %}
  391.               <tr>
  392.                 <th>タイプ</th>
  393.                 <td>{{ htEx[20] }}</td>
  394.               </tr>
  395.             {% endif %}
  396.             {% if htEx[34] is defined and htEx[34] %}
  397.               <tr>
  398.                 <th>発行限定数</th>
  399.                 <td>{{ htEx[34] }}</td>
  400.               </tr>
  401.             {% endif %}
  402.             {% if htEx[51] is defined and htEx[51] %}
  403.               <tr>
  404.                 <th>最大発行数</th>
  405.                 <td>{{ htEx[51] }}</td>
  406.               </tr>
  407.             {% endif %}
  408.             {% if htEx[45] is defined and htEx[45] %}
  409.               <tr>
  410.                 <th>世界現存数</th>
  411.                 <td>{{ htEx[45] }}</td>
  412.               </tr>
  413.             {% endif %}
  414.             {% if htEx[35] is defined and htEx[35] %}
  415.               <tr>
  416.                 <th>重量</th>
  417.                 <td>{{ htEx[35] }}</td>
  418.               </tr>
  419.             {% endif %}
  420.             {% if htEx[36] is defined and htEx[36] %}
  421.               <tr>
  422.                 <th>直径</th>
  423.                 <td>{{ htEx[36] }}</td>
  424.               </tr>
  425.             {% endif %}
  426.             {% if htEx[50] is defined and htEx[50] %}
  427.               <tr>
  428.                 <th>品位</th>
  429.                 <td>{{ htEx[50] }}</td>
  430.               </tr>
  431.             {% endif %}
  432.             {% if htEx[37] is defined and htEx[37] %}
  433.               <tr>
  434.                 <th>表面</th>
  435.                 <td>{{ htEx[37] }}</td>
  436.               </tr>
  437.             {% endif %}
  438.             {% if htEx[38] is defined and htEx[38] %}
  439.               <tr>
  440.                 <th>表面</th>
  441.                 <td>{{ htEx[38] }}</td>
  442.               </tr>
  443.             {% endif %}
  444.             {% if htEx[39] is defined and htEx[39] %}
  445.               <tr>
  446.                 <th>エッジの刻銘</th>
  447.                 <td>{{ htEx[39] }}</td>
  448.               </tr>
  449.             {% endif %}
  450.             {% if htEx[46] is defined and htEx[46] %}
  451.               <tr>
  452.                 <th>発送元</th>
  453.                 <td>{{ htEx[46] }}</td>
  454.               </tr>
  455.             {% endif %}
  456.             <tr>
  457.               <th>納期</th>
  458.               <td>
  459.                 {% if htEx[47] is defined and htEx[47] %}
  460.                   {{ htEx[47] }}
  461.                 {% else %}
  462.                   <a href="javascript:do_contact_product()">お問い合わせ</a>ください
  463.                 {% endif %}
  464.               </td>
  465.             </tr>
  466.             </tbody>
  467.           </table>
  468.           {% if htEx[60] is defined and htEx[60] %}
  469.             <div id="shop_voice">
  470.               <div class="voice_area">{{ htEx[60] }}</div>
  471.             </div>
  472.           {% endif %}
  473.         </dd>
  474.         <dt id="cartbox">
  475.           <div id="cartfix">
  476.               {% set s_name = Product.Status.name %}
  477.               {% if Product.stock_find %}
  478.                 {% if s_name == "非公開" %}
  479.                   <ul id="zaiko">
  480.                     <li>在庫有り</li>
  481.                     <li></li>
  482.                   </ul>
  483.                 {% elseif s_name == "予約品(公開)" %}
  484.                 <p class="yoyaku"><span>予約品</span></p>
  485.                 {% if htEx[55] is defined and htEx[55] %}
  486.                   <p class="meyasu_price">目安価格:</p>
  487.                   <p class="yen note-sans meyasu_price"><span>¥</span>{{ htEx[55]|number_format }}<em>(税込)</em></p>
  488.                 {% endif %}
  489.                   {% elseif s_name == "取り置き(公開)" %}
  490.                   <p class="meyasu">一般価格:<s>¥ {{ Product.getPrice02IncTaxMin|number_format }}</s><em>(税込)</em></p>
  491.                   {% if member_price %}
  492.                   <p class="meyasu red">会員価格:</p>
  493.                   <p class="yen noto-sans red"><span>¥</span>{{ member_price|number_format }} <em>(税込)</em></p>
  494.                   {% endif %}
  495.                   <p id="item_tag"><span id="torioki">取り置き中</span>
  496.                     {% if product_disp_date is defined %}
  497.                     <b>{{ product_disp_date }}</b>
  498.                     {% endif %}
  499.                   </p>
  500.                   <p id="yoyaku_txt">取り置き中です<br>お問い合わせ下さい</p>
  501.                   {% elseif Product.getPrice02IncTaxMin == 0 %}
  502.                   <p id="item_tag"><b>誠にお手数ですが、お問合せお願い申し上げます。<br>こちらの商品は現在価格が確定しておりませんので、確定次第ご案内申し上げます。</b>
  503.                   </p>
  504.                   <p id="yoyaku_txt"></p>
  505.                 {% else %}
  506.                   <p class="meyasu">一般価格:<s>¥ {{ Product.getPrice02IncTaxMin|number_format }}</s><em>(税込)</em></p>
  507.                   {% if member_price %}
  508.                   <p class="meyasu red">会員価格:</p>
  509.                   <p class="yen noto-sans red"><span>¥</span>{{ member_price|number_format }} <em>(税込)</em></p>
  510.                   {% endif %}
  511.                   {% if jigane_flg %}
  512.                   <ul id="zaiko"><li>在庫有り</li>
  513.                     <li>{% if Product.getStockFind == true %}残り {{ Product.getStockMax }}点{% endif %}
  514.                       {% if htEx[64] is defined and htEx[64] == "117" %}
  515.                         <small>(入荷予定あり)</small>
  516.                       {% endif %}
  517.                     </li>
  518.                   </ul>
  519.                   {% endif %}
  520.                 {% endif %}
  521.               {% else %}
  522.                 {% if s_name == "取り置き(公開)" %}
  523.                   <p class="meyasu">一般価格:<s>¥ {{ Product.getPrice02IncTaxMin|number_format }}</s><em>(税込)</em></p>
  524.                   {% if member_price %}
  525.                     <p class="meyasu red">会員価格:</p>
  526.                     <p class="yen noto-sans red"><span>¥</span>{{ member_price|number_format }} <em>(税込)</em></p>
  527.                   {% endif %}
  528.                 {% endif %}
  529.               {% endif %}
  530.             <form action="{{ url('product_add_cart', {id:Product.id}) }}" method="post" id="form1" name="form1">
  531.               {% if form.quantity is defined %}
  532.                 {% if s_name == "非売品" %}
  533.                 {% elseif s_name == "取り置き(公開)"  %}
  534.                 {% elseif s_name == "予約品(公開)" %}
  535.                   <div id="quantity_area">
  536.                     <table border="0" cellspacing="0" cellpadding="0">
  537.                       <tbody>
  538.                       <tr>
  539.                         <th>数量:</th>
  540.                         <td>
  541.                           {{ form_widget(form.quantity) }}
  542.                           {{ form_errors(form.quantity) }}
  543.                         </td>
  544.                       </tr>
  545.                       </tbody>
  546.                     </table>
  547.                   </div>
  548.                 {% elseif Product.getPrice02IncTaxMin == 0 %}
  549.                 {% else %}
  550.                   <div id="quantity_area">
  551.                     <table border="0" cellspacing="0" cellpadding="0">
  552.                       <tbody>
  553.                       <tr>
  554.                         <th>数量:</th>
  555.                         <td>
  556.                           {{ form_widget(form.quantity) }}
  557.                           {{ form_errors(form.quantity) }}
  558.                         </td>
  559.                       </tr>
  560.                       </tbody>
  561.                     </table>
  562.                   </div>
  563.                 {% endif %}
  564.               {% endif %}
  565.               {% if jigane_flg and product_type_id == "3" %}
  566.                 <div class="no_credit">
  567.                   <b>こちらの商品はクレジットカード決済に対応しておりません。</b>
  568.                 </div>
  569.               {% endif %}
  570.               {% if s_name == "公開" %}
  571.                 <div class="tojitsu">
  572.                   <b>当日出荷対応品</b><br>
  573.                   <span>平日13時迄入金確認分</span>
  574.                 </div>
  575.                 <style>
  576.                   .tojitsu {
  577.                     background-color: red;
  578.                     padding: 10px 0 6px 0;
  579.                     margin: 10px auto;
  580.                     text-align: center;
  581.                     color: white;
  582.                     width: 90%;
  583.                     line-height: 140%;
  584.                     border-radius: 5px;
  585.                     -moz-border-radius: 5px;
  586.                     -webkit-border-radius: 5px;
  587.                   }
  588.                   .tojitsu b {
  589.                     font-size: 20px;
  590.                   }
  591.                   .tojitsu span {
  592.                     font-size: 13px;
  593.                   }
  594.                 </style>
  595.                 <div class="soryomuryo">
  596.                   <dl>
  597.                     <dt><img src="/img/truck-solid-full.svg" alt="送料無料"></dt>
  598.                     <dd><b>送料無料</b><br><span>最短翌日届け</span></dd>
  599.                   </dl>
  600.                 </div>
  601.                 <style>
  602.                   .soryomuryo {
  603.                     display: table;
  604.                     background-color: white;
  605.                     border: 1px solid red;
  606.                     width: 90%;
  607.                     border-radius: 5px;
  608.                     -moz-border-radius: 5px;
  609.                     -webkit-border-radius: 5px;
  610.                     margin: 10px auto;
  611.                   }
  612.                   .soryomuryo dl {
  613.                     display: table-row;
  614.                   }
  615.                   .soryomuryo dl dt,
  616.                   .soryomuryo dl dd {
  617.                     display: table-cell;
  618.                     vertical-align: top;
  619.                     text-align: left;
  620.                   }
  621.                   .soryomuryo dl dt {
  622.                     width: 90px;
  623.                   }
  624.                   .soryomuryo dl dt img {
  625.                     width: 50px;
  626.                     height: auto;
  627.                     margin: 5px 0 -5px 35px;
  628.                   }
  629.                   .soryomuryo dl dd {
  630.                     padding: 9px 0px 0px 0px;
  631.                   }
  632.                   .soryomuryo dl dd b {
  633.                     color: red;
  634.                     font-size: 22px;
  635.                   }
  636.                   .soryomuryo dl dd span {
  637.                     font-size: 12px;
  638.                     display: block;
  639.                     margin-top: -8px;
  640.                   }
  641.                   @media screen and (max-width:640px) {
  642.                     .soryomuryo dl dt img {
  643.                       margin-left: 85px !important;
  644.                     }
  645.                     .soryomuryo dl dt {
  646.                       width: 140px;
  647.                     }
  648.                   }
  649.                 </style>
  650.               {% endif %}
  651.               {% if Product.stock_find %}
  652.                 <div class="ec-productRole__actions">
  653.                   {% if form.classcategory_id1 is defined %}
  654.                     <div class="ec-select">
  655.                       {{ form_row(form.classcategory_id1) }}
  656.                       {{ form_errors(form.classcategory_id1) }}
  657.                     </div>
  658.                     {% if form.classcategory_id2 is defined %}
  659.                       <div class="ec-select">
  660.                         {{ form_row(form.classcategory_id2) }}
  661.                         {{ form_errors(form.classcategory_id2) }}
  662.                       </div>
  663.                     {% endif %}
  664.                   {% endif %}
  665.                 </div>
  666.                 {% if s_name == "非売品" %}
  667.                 {% elseif s_name == "取り置き(公開)" %}
  668.                 {% elseif s_name == "予約品(公開)" %}
  669.                   {# リクエスト予約ボタン(カートボタンの代わり) #}
  670.                 {% elseif Product.getPrice02IncTaxMin == 0 %}
  671.                 {% else %}
  672.                   <p class="btns ye"><a href="javascript:void(0)" onclick="doSubmit()">
  673.                       <i class="fa-solid fa-cart-shopping"></i> カートに入れる</a></p>
  674.                 {% endif %}
  675.               {% else %}
  676.                 <p class="btns ye"><a href="javascript:void(0)" disabled="disabled"><i
  677.                       class="fa-solid fa-cart-shopping"></i> ただいま品切れ中です。</a></p>
  678.                 {# 再入荷通知ボタン #}
  679.                 {% if restock_disp_flg is defined and restock_disp_flg == 1 %}
  680.                   {% if restock_regist_flg is defined and restock_regist_flg == 1 %}
  681.                     <p class="btns restock-registered"><a href="javascript:void(0)" onclick="handleRestockAction({{ Product.id }}, 2)"><i class="fa-solid fa-bell-slash"></i> 再入荷通知を解除</a></p>
  682.                   {% else %}
  683.                     <p class="btns restock"><a href="javascript:void(0)" onclick="handleRestockAction({{ Product.id }}, 1)"><i class="fa-solid fa-bell"></i> 再入荷通知を登録</a></p>
  684.                   {% endif %}
  685.                 {% endif %}
  686.               {% endif %}
  687.               {{ form_rest(form) }}
  688.             </form>
  689.             {% if s_name == "予約品(公開)" %}
  690.               {# リクエスト予約フォーム #}
  691.               <form name="product_reserve" id="product_reserve" action="{{ url('plugin_pia_product_reserve') }}" method="post">
  692.                 <input type="hidden" name="id" value="{{ Product.id }}">
  693.                 <input type="hidden" id="reserve_num" name="num" value="1">
  694.                 <p class="btns ye"><button type="submit"><i class="fa-solid fa-calendar-check"></i> 予約する</button></p>
  695.               </form>
  696.             {% endif %}
  697.             {# お気に入り: form1外に移動(2026-08-20)。予約品では予約ボタンの下に表示 #}
  698.               {% if BaseInfo.option_favorite_product %}
  699.                 {% if is_favorite == false %}
  700.                   <p class="btns or"><a href="javascript:void(0)" onclick="doFavorite()"><i
  701.                         class="fa-solid fa-star"></i> お気に入りに追加</a></p>
  702.                 {% else %}
  703.                   <p class="btns or"><a href="javascript:void(0)" disabled="disabled"><i
  704.                         class="fa-solid fa-star"></i>
  705.                       お気に入りに追加済みです。</a></p>
  706.                 {% endif %}
  707.               {% endif %}
  708.             <form name="contact_product" id="contact_product" action="/product_contact" method="post">
  709.               <input type="hidden" name="id" value="{{ Product.id }}">
  710.               <div class="btn_area">
  711.                 <ul class="row">
  712.                   <li><button type="submit" id="item-mail">商品についてのお問い合わせ</button></li>
  713.                 </ul>
  714.               </div>
  715.             </form>
  716.               <p class="btm_txt"><a href="/user_data/delivery">配送・送料・返品について</a></p>
  717.             {% if s_name == "予約品(公開)" %}
  718.               <div class="can kaigai">
  719.                 <p>海外受注生産の為、ご注文後のキャンセルができません。<br>
  720.                   また、ご注文確定後でも入手が確約できない場合がございますので、何卒ご了承の程お願い申し上げます。
  721.                 </p></div>
  722.               <div class="yoyaku_txt2">
  723.                 ご予約後、価格や納期についてご連絡申し上げます。
  724.                 数に限りがございますので、ご連絡時点で予約が終了している可能性があることを予めご了承ください。
  725.               </div>
  726.             {% endif %}
  727.             <div class="ec-modal">
  728.               <div class="ec-modal-overlay">
  729.                 <div class="ec-modal-wrap">
  730.                 <span class="ec-modal-close"><span class="ec-icon"><img src="{{ asset('assets/icon/cross-dark.svg') }}"
  731.                                                                         alt=""/></span></span>
  732.                   <div id="ec-modal-header"
  733.                        class="text-center">{{ 'カートに追加しました。'|trans }}</div>
  734.                   <div class="ec-modal-box">
  735.                     <div class="ec-role">
  736.                       <span class="ec-inlineBtn--cancel">{{ 'お買い物を続ける'|trans }}</span>
  737.                       <a href="{{ url('cart') }}"
  738.                          class="ec-inlineBtn--action">{{ 'カートへ進む'|trans }}</a>
  739.                     </div>
  740.                   </div>
  741.                 </div>
  742.               </div>
  743.             </div>
  744.             {% if BaseInfo.option_favorite_product %}
  745.               <form action="{{ url('product_add_favorite', {id:Product.id}) }}" id="form2"
  746.                     method="post"></form>
  747.             {% endif %}
  748.           </div><!-- cartfix -->
  749.         </dt>
  750.       </dl>
  751.     </div><!-- syosuai_wrap -->
  752.     <div id="syousai_btm">
  753.       <dl>
  754.         <dt id="left">
  755.           <div class="syousai_txt">
  756.             <dl>
  757.               <dt><h3>商品詳細</h3></dt>
  758.               <dd>
  759.                 {{ Product.description_detail|raw }}
  760.               </dd>
  761.             </dl>
  762.           </div><!-- syousai_txt -->
  763.         </dt><!-- left -->
  764.         <dd></dd>
  765.       </dl>
  766.     </div><!-- syousai_btm -->
  767. {% endblock %}