var/cache/dev/twig/fb/fb86ea173e040ecda452e609909ed565.php line 42

Open in your IDE?
  1. <?php
  2. use Twig\Environment;
  3. use Twig\Error\LoaderError;
  4. use Twig\Error\RuntimeError;
  5. use Twig\Extension\SandboxExtension;
  6. use Twig\Markup;
  7. use Twig\Sandbox\SecurityError;
  8. use Twig\Sandbox\SecurityNotAllowedTagError;
  9. use Twig\Sandbox\SecurityNotAllowedFilterError;
  10. use Twig\Sandbox\SecurityNotAllowedFunctionError;
  11. use Twig\Source;
  12. use Twig\Template;
  13. /* __string_template__a541c069667438736670b3fc45308553 */
  14. class __TwigTemplate_671aa04cbabb44be726760a98097c8cf extends \Eccube\Twig\Template
  15. {
  16.     private $source;
  17.     private $macros = [];
  18.     public function __construct(Environment $env)
  19.     {
  20.         parent::__construct($env);
  21.         $this->source $this->getSourceContext();
  22.         $this->blocks = [
  23.             'stylesheet' => [$this'block_stylesheet'],
  24.             'javascript' => [$this'block_javascript'],
  25.             'main' => [$this'block_main'],
  26.         ];
  27.         $this->sandbox $this->env->getExtension('\Twig\Extension\SandboxExtension');
  28.         $this->checkSecurity();
  29.     }
  30.     protected function doGetParent(array $context)
  31.     {
  32.         // line 11
  33.         return "default_frame.twig";
  34.     }
  35.     protected function doDisplay(array $context, array $blocks = [])
  36.     {
  37.         $macros $this->macros;
  38.         $__internal_5a27a8ba21ca79b61932376b2fa922d2 $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  39.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template""__string_template__a541c069667438736670b3fc45308553"));
  40.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  41.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template""__string_template__a541c069667438736670b3fc45308553"));
  42.         // line 13
  43.         $context["body_class"] = "product_page";
  44.         // line 11
  45.         $this->parent $this->loadTemplate("default_frame.twig""__string_template__a541c069667438736670b3fc45308553"11);
  46.         $this->parent->display($contextarray_merge($this->blocks$blocks));
  47.         
  48.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  49.         
  50.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  51.     }
  52.     // line 15
  53.     public function block_stylesheet($context, array $blocks = [])
  54.     {
  55.         $macros $this->macros;
  56.         $__internal_5a27a8ba21ca79b61932376b2fa922d2 $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  57.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""stylesheet"));
  58.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  59.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""stylesheet"));
  60.         // line 16
  61.         echo "    <style>
  62.         .slick-slider {
  63.             margin-bottom: 30px;
  64.         }
  65.         .slick-dots {
  66.             position: absolute;
  67.             bottom: -45px;
  68.             display: block;
  69.             width: 100%;
  70.             padding: 0;
  71.             list-style: none;
  72.             text-align: center;
  73.         }
  74.         .slick-dots li {
  75.             position: relative;
  76.             display: inline-block;
  77.             width: 20px;
  78.             height: 20px;
  79.             margin: 0 5px;
  80.             padding: 0;
  81.             cursor: pointer;
  82.         }
  83.         .slick-dots li button {
  84.             font-size: 0;
  85.             line-height: 0;
  86.             display: block;
  87.             width: 20px;
  88.             height: 20px;
  89.             padding: 5px;
  90.             cursor: pointer;
  91.             color: transparent;
  92.             border: 0;
  93.             outline: none;
  94.             background: transparent;
  95.         }
  96.         .slick-dots li button:hover,
  97.         .slick-dots li button:focus {
  98.             outline: none;
  99.         }
  100.         .slick-dots li button:hover:before,
  101.         .slick-dots li button:focus:before {
  102.             opacity: 1;
  103.         }
  104.         .slick-dots li button:before {
  105.             content: \" \";
  106.             line-height: 20px;
  107.             position: absolute;
  108.             top: 0;
  109.             left: 0;
  110.             width: 12px;
  111.             height: 12px;
  112.             text-align: center;
  113.             opacity: .25;
  114.             background-color: black;
  115.             border-radius: 50%;
  116.         }
  117.         .slick-dots li.slick-active button:before {
  118.             opacity: .75;
  119.             background-color: black;
  120.         }
  121.         .slick-dots li button.thumbnail img {
  122.             width: 0;
  123.             height: 0;
  124.         }
  125.     </style>
  126. ";
  127.         
  128.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  129.         
  130.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  131.     }
  132.     // line 95
  133.     public function block_javascript($context, array $blocks = [])
  134.     {
  135.         $macros $this->macros;
  136.         $__internal_5a27a8ba21ca79b61932376b2fa922d2 $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  137.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""javascript"));
  138.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  139.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""javascript"));
  140.         // line 96
  141.         echo "    <script>
  142.         eccube.classCategories = ";
  143.         // line 97
  144.         echo $this->extensions['Eccube\Twig\Extension\EccubeExtension']->getClassCategoriesAsJson($this->sandbox->ensureToStringAllowed((isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'97$this->source); })()), 97$this->source));
  145.         echo ";
  146.         // 規格2に選択肢を割り当てる。
  147.         function fnSetClassCategories(form, classcat_id2_selected) {
  148.             var \$form = \$(form);
  149.             var product_id = \$form.find('input[name=product_id]').val();
  150.             var \$sele1 = \$form.find('select[name=classcategory_id1]');
  151.             var \$sele2 = \$form.find('select[name=classcategory_id2]');
  152.             eccube.setClassCategories(\$form, product_id, \$sele1, \$sele2, classcat_id2_selected);
  153.         }
  154.         ";
  155.         // line 108
  156.         if (twig_get_attribute($this->env$this->source, ($context["form"] ?? null), "classcategory_id2", [], "any"truetruetrue108)) {
  157.             // line 109
  158.             echo "        fnSetClassCategories(
  159.             \$('#form1'), ";
  160.             // line 110
  161.             echo json_encode($this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->sourcetwig_get_attribute($this->env$this->sourcetwig_get_attribute($this->env$this->source, (isset($context["form"]) || array_key_exists("form"$context) ? $context["form"] : (function () { throw new RuntimeError('Variable "form" does not exist.'110$this->source); })()), "classcategory_id2", [], "any"falsefalsetrue110), "vars", [], "any"falsefalsetrue110), "value", [], "any"falsefalsetrue110), 110$this->source));
  162.             echo "
  163.         );
  164.         ";
  165.         } elseif (twig_get_attribute($this->env$this->source,         // line 112
  166. ($context["form"] ?? null), "classcategory_id1", [], "any"truetruetrue112)) {
  167.             // line 113
  168.             echo "        eccube.checkStock(\$('#form1'), ";
  169.             echo twig_escape_filter($this->env$this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'113$this->source); })()), "id", [], "any"falsefalsetrue113), 113$this->source), "html"nulltrue);
  170.             echo ", ";
  171.             echo json_encode($this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->sourcetwig_get_attribute($this->env$this->sourcetwig_get_attribute($this->env$this->source, (isset($context["form"]) || array_key_exists("form"$context) ? $context["form"] : (function () { throw new RuntimeError('Variable "form" does not exist.'113$this->source); })()), "classcategory_id1", [], "any"falsefalsetrue113), "vars", [], "any"falsefalsetrue113), "value", [], "any"falsefalsetrue113), 113$this->source));
  172.             echo ", null);
  173.         ";
  174.         }
  175.         // line 115
  176.         echo "    </script>
  177.     <script>
  178.         \$(function() {
  179.             // bfcache無効化
  180.             \$(window).bind('pageshow', function(event) {
  181.                 if (event.originalEvent.persisted) {
  182.                     location.reload(true);
  183.                 }
  184.             });
  185.             // Core Web Vital の Cumulative Layout Shift(CLS)対策のため
  186.             // img タグに width, height が付与されている.
  187.             // 630px 未満の画面サイズでは縦横比が壊れるための対策
  188.             // see https://github.com/EC-CUBE/ec-cube/pull/5023
  189.             \$('.ec-grid2__cell').hide();
  190.             var removeSize = function () {
  191.                 \$('.slide-item').height('');
  192.                 \$('.slide-item img')
  193.                     .removeAttr('width')
  194.                     .removeAttr('height')
  195.                     .removeAttr('style');
  196.             };
  197.             var slickInitial = function(slick) {
  198.                 \$('.ec-grid2__cell').fadeIn(1500);
  199.                 var baseHeight = \$(slick.target).height();
  200.                 var baseWidth = \$(slick.target).width();
  201.                 var rate = baseWidth / baseHeight;
  202.                 \$('.slide-item').height(baseHeight * rate); // 余白を削除する
  203.                 // transform を使用することでCLSの影響を受けないようにする
  204.                 \$('.slide-item img')
  205.                     .css(
  206.                         {
  207.                             'transform-origin': 'top left',
  208.                             'transform': 'scaleY(' + rate + ')',
  209.                             'transition': 'transform .1s'
  210.                         }
  211.                     );
  212.                 // 正しいサイズに近くなったら属性を解除する
  213.                 setTimeout(removeSize, 500);
  214.             };
  215.             \$('.item_visual').on('init', slickInitial);
  216.             // リサイズ時は CLS の影響を受けないため属性を解除する
  217.             \$(window).resize(removeSize);
  218.             \$('.item_visual').slick({
  219.                 dots: false,
  220.                 arrows: false,
  221.                 responsive: [{
  222.                     breakpoint: 768,
  223.                     settings: {
  224.                         dots: true
  225.                     }
  226.                 }]
  227.             });
  228.             \$('.slideThumb').on('click', function() {
  229.                 var index = \$(this).attr('data-index');
  230.                 \$('.item_visual').slick('slickGoTo', index, false);
  231.             })
  232.         });
  233.     </script>
  234.     <script>
  235.         \$(function() {
  236.             \$('.add-cart').on('click', function(event) {
  237.                 var \$form = \$('#form1');
  238.                 // ── 画像登録必須チェック ──
  239.                 var missing = false;
  240.                 \$form.find('input[type=\"hidden\"][required]').each(function() {
  241.                     if (!\$.trim(\$(this).val())) {
  242.                         alert('画像登録が必要です');
  243.                         missing = true;
  244.                         return false;
  245.                     }
  246.                 });
  247.                 if (missing) {
  248.                     event.preventDefault();
  249.                     return false;
  250.                 }
  251.                 ";
  252.         // line 195
  253.         if (twig_get_attribute($this->env$this->source, ($context["form"] ?? null), "classcategory_id1", [], "any"truetruetrue195)) {
  254.             // line 196
  255.             echo "                // 規格1フォームの必須チェック
  256.                 if (\$('#classcategory_id1').val() == '__unselected' || \$('#classcategory_id1').val() == '') {
  257.                     \$('#classcategory_id1')[0].setCustomValidity('";
  258.             // line 198
  259.             echo twig_escape_filter($this->env$this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("項目が選択されていません"), "html"nulltrue);
  260.             echo "');
  261.                     return true;
  262.                 } else {
  263.                     \$('#classcategory_id1')[0].setCustomValidity('');
  264.                 }
  265.                 ";
  266.         }
  267.         // line 204
  268.         echo "
  269.                 ";
  270.         // line 205
  271.         if (twig_get_attribute($this->env$this->source, ($context["form"] ?? null), "classcategory_id2", [], "any"truetruetrue205)) {
  272.             // line 206
  273.             echo "                // 規格2フォームの必須チェック
  274.                 if (\$('#classcategory_id2').val() == '__unselected' || \$('#classcategory_id2').val() == '') {
  275.                     \$('#classcategory_id2')[0].setCustomValidity('";
  276.             // line 208
  277.             echo twig_escape_filter($this->env$this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("項目が選択されていません"), "html"nulltrue);
  278.             echo "');
  279.                     return true;
  280.                 } else {
  281.                     \$('#classcategory_id2')[0].setCustomValidity('');
  282.                 }
  283.                 ";
  284.         }
  285.         // line 214
  286.         echo "
  287.                 // 個数フォームのチェック
  288.                 if (\$('#quantity').val() < 1) {
  289.                     \$('#quantity')[0].setCustomValidity('";
  290.         // line 217
  291.         echo twig_escape_filter($this->env$this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("1以上で入力してください。"), "html"nulltrue);
  292.         echo "');
  293.                     return true;
  294.                 } else {
  295.                     \$('#quantity')[0].setCustomValidity('');
  296.                 }
  297.                 event.preventDefault();
  298.                 \$form = \$('#form1');
  299.                 \$.ajax({
  300.                     url: \$form.attr('action'),
  301.                     type: \$form.attr('method'),
  302.                     data: \$form.serialize(),
  303.                     dataType: 'json',
  304.                     beforeSend: function(xhr, settings) {
  305.                         // Buttonを無効にする
  306.                         \$('.add-cart').prop('disabled', true);
  307.                     }
  308.                 }).done(function(data) {
  309.                     // レスポンス内のメッセージをalertで表示
  310.                     \$.each(data.messages, function() {
  311.                         \$('#ec-modal-header').text(this);
  312.                     });
  313.                     \$('.ec-modal').show()
  314.                     // カートブロックを更新する
  315.                     \$.ajax({
  316.                         url: \"";
  317.         // line 244
  318.         echo $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getUrl("block_cart");
  319.         echo "\",
  320.                         type: 'GET',
  321.                         dataType: 'html'
  322.                     }).done(function(html) {
  323.                         \$('.ec-headerRole__cart').html(html);
  324.                     });
  325.                 }).fail(function(data) {
  326.                     alert('";
  327.         // line 251
  328.         echo twig_escape_filter($this->env$this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("カートへの追加に失敗しました。"), "html"nulltrue);
  329.         echo "');
  330.                 }).always(function(data) {
  331.                     // Buttonを有効にする
  332.                     \$('.add-cart').prop('disabled', false);
  333.                 });
  334.             });
  335.         });
  336.         \$('.ec-modal-wrap').on('click', function(e) {
  337.             // モーダル内の処理は外側にバブリングさせない
  338.             e.stopPropagation();
  339.         });
  340.         \$('.ec-modal-overlay, .ec-modal, .ec-modal-close, .ec-inlineBtn--cancel').on('click', function() {
  341.             \$('.ec-modal').hide()
  342.         });
  343.     </script>
  344.     <script type=\"application/ld+json\">
  345.     {
  346.         \"@context\": \"https://schema.org/\",
  347.         \"@type\": \"Product\",
  348.         \"name\": \"";
  349.         // line 271
  350.         echo twig_escape_filter($this->env$this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'271$this->source); })()), "name", [], "any"falsefalsetrue271), 271$this->source), "html"nulltrue);
  351.         echo "\",
  352.         \"image\": [
  353.             ";
  354.         // line 273
  355.         $context['_parent'] = $context;
  356.         $context['_seq'] = twig_ensure_traversable(twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'273$this->source); })()), "ProductImage", [], "any"falsefalsetrue273));
  357.         $context['_iterated'] = false;
  358.         $context['loop'] = [
  359.           'parent' => $context['_parent'],
  360.           'index0' => 0,
  361.           'index'  => 1,
  362.           'first'  => true,
  363.         ];
  364.         if (is_array($context['_seq']) || (is_object($context['_seq']) && $context['_seq'] instanceof \Countable)) {
  365.             $length count($context['_seq']);
  366.             $context['loop']['revindex0'] = $length 1;
  367.             $context['loop']['revindex'] = $length;
  368.             $context['loop']['length'] = $length;
  369.             $context['loop']['last'] = === $length;
  370.         }
  371.         foreach ($context['_seq'] as $context["_key"] => $context["img"]) {
  372.             // line 274
  373.             echo "                \"";
  374.             echo twig_escape_filter($this->env$this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->sourcetwig_get_attribute($this->env$this->source, (isset($context["app"]) || array_key_exists("app"$context) ? $context["app"] : (function () { throw new RuntimeError('Variable "app" does not exist.'274$this->source); })()), "request", [], "any"falsefalsetrue274), "schemeAndHttpHost", [], "any"falsefalsetrue274), 274$this->source), "html"nulltrue);
  375.             echo twig_escape_filter($this->env$this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl($this->sandbox->ensureToStringAllowed($context["img"], 274$this->source), "save_image"), "html"nulltrue);
  376.             echo "\"";
  377.             if ( !twig_get_attribute($this->env$this->source$context["loop"], "last", [], "any"falsefalsetrue274)) {
  378.                 echo ",";
  379.             }
  380.             // line 275
  381.             echo "
  382.             ";
  383.             $context['_iterated'] = true;
  384.             ++$context['loop']['index0'];
  385.             ++$context['loop']['index'];
  386.             $context['loop']['first'] = false;
  387.             if (isset($context['loop']['length'])) {
  388.                 --$context['loop']['revindex0'];
  389.                 --$context['loop']['revindex'];
  390.                 $context['loop']['last'] = === $context['loop']['revindex0'];
  391.             }
  392.         }
  393.         if (!$context['_iterated']) {
  394.             // line 277
  395.             echo "                \"";
  396.             echo twig_escape_filter($this->env$this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->sourcetwig_get_attribute($this->env$this->source, (isset($context["app"]) || array_key_exists("app"$context) ? $context["app"] : (function () { throw new RuntimeError('Variable "app" does not exist.'277$this->source); })()), "request", [], "any"falsefalsetrue277), "schemeAndHttpHost", [], "any"falsefalsetrue277), 277$this->source), "html"nulltrue);
  397.             echo twig_escape_filter($this->env$this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl($this->extensions['Eccube\Twig\Extension\EccubeExtension']->getNoImageProduct(""), "save_image"), "html"nulltrue);
  398.             echo "\"
  399.             ";
  400.         }
  401.         $_parent $context['_parent'];
  402.         unset($context['_seq'], $context['_iterated'], $context['_key'], $context['img'], $context['_parent'], $context['loop']);
  403.         $context array_intersect_key($context$_parent) + $_parent;
  404.         // line 279
  405.         echo "        ],
  406.         \"description\": \"";
  407.         // line 280
  408.         echo twig_escape_filter($this->envtwig_slice($this->envtwig_replace_filter(((twig_get_attribute($this->env$this->source, ($context["Product"] ?? null), "description_list", [], "any"truetruetrue280)) ? (_twig_default_filter($this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source, ($context["Product"] ?? null), "description_list", [], "any"falsefalsetrue280), 280$this->source), $this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'280$this->source); })()), "description_detail", [], "any"falsefalsetrue280), 280$this->source))) : (twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'280$this->source); })()), "description_detail", [], "any"falsefalsetrue280))), ["
  409. => """ " => ""]), 0300), "html"nulltrue);
  410.         echo "\",
  411.         ";
  412.         // line 281
  413.         if (twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'281$this->source); })()), "code_min", [], "any"falsefalsetrue281)) {
  414.             // line 282
  415.             echo "        \"sku\": \"";
  416.             echo twig_escape_filter($this->env$this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'282$this->source); })()), "code_min", [], "any"falsefalsetrue282), 282$this->source), "html"nulltrue);
  417.             echo "\",
  418.         ";
  419.         }
  420.         // line 284
  421.         echo "        \"offers\": {
  422.             \"@type\": \"Offer\",
  423.             \"url\": \"";
  424.         // line 286
  425.         echo twig_escape_filter($this->env$this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getUrl("product_detail", ["id" => twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'286$this->source); })()), "id", [], "any"falsefalsetrue286)]), "html"nulltrue);
  426.         echo "\",
  427.             \"priceCurrency\": \"";
  428.         // line 287
  429.         echo twig_escape_filter($this->env$this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source, (isset($context["eccube_config"]) || array_key_exists("eccube_config"$context) ? $context["eccube_config"] : (function () { throw new RuntimeError('Variable "eccube_config" does not exist.'287$this->source); })()), "currency", [], "any"falsefalsetrue287), 287$this->source), "html"nulltrue);
  430.         echo "\",
  431.             \"price\": ";
  432.         // line 288
  433.         ((twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'288$this->source); })()), "getPrice02IncTaxMin", [], "any"falsefalsetrue288)) ? (print (twig_escape_filter($this->envtwig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'288$this->source); })()), "getPrice02IncTaxMin", [], "any"falsefalsetrue288), "html"nulltrue))) : (print (0)));
  434.         echo ",
  435.             \"availability\": \"";
  436.         // line 289
  437.         echo ((twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'289$this->source); })()), "stock_find", [], "any"falsefalsetrue289)) ? ("InStock") : ("OutOfStock"));
  438.         echo "\"
  439.         }
  440.     }
  441.     </script>
  442. ";
  443.         
  444.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  445.         
  446.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  447.     }
  448.     // line 295
  449.     public function block_main($context, array $blocks = [])
  450.     {
  451.         $macros $this->macros;
  452.         $__internal_5a27a8ba21ca79b61932376b2fa922d2 $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  453.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""main"));
  454.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  455.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""main"));
  456.         // line 296
  457.         echo "    <div class=\"ec-productRole\">
  458.         <div class=\"ec-grid2\">
  459.             <div class=\"ec-grid2__cell\">
  460.                 <div class=\"ec-sliderItemRole\">
  461.                     <div class=\"item_visual\">
  462.                         ";
  463.         // line 302
  464.         $context['_parent'] = $context;
  465.         $context['_seq'] = twig_ensure_traversable(twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'302$this->source); })()), "ProductImage", [], "any"falsefalsetrue302));
  466.         $context['_iterated'] = false;
  467.         $context['loop'] = [
  468.           'parent' => $context['_parent'],
  469.           'index0' => 0,
  470.           'index'  => 1,
  471.           'first'  => true,
  472.         ];
  473.         if (is_array($context['_seq']) || (is_object($context['_seq']) && $context['_seq'] instanceof \Countable)) {
  474.             $length count($context['_seq']);
  475.             $context['loop']['revindex0'] = $length 1;
  476.             $context['loop']['revindex'] = $length;
  477.             $context['loop']['length'] = $length;
  478.             $context['loop']['last'] = === $length;
  479.         }
  480.         foreach ($context['_seq'] as $context["_key"] => $context["ProductImage"]) {
  481.             // line 303
  482.             echo "                            <div class=\"slide-item\"><img src=\"";
  483.             echo twig_escape_filter($this->env$this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl($this->sandbox->ensureToStringAllowed($context["ProductImage"], 303$this->source), "save_image"), "html"nulltrue);
  484.             echo "\" alt=\"";
  485.             ((twig_get_attribute($this->env$this->source$context["loop"], "first", [], "any"falsefalsetrue303)) ? (print (twig_escape_filter($this->envtwig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'303$this->source); })()), "name", [], "any"falsefalsetrue303), "html"nulltrue))) : (print ("")));
  486.             echo "\" width=\"550\" height=\"550\"";
  487.             if ((twig_get_attribute($this->env$this->source$context["loop"], "index", [], "any"falsefalsetrue303) > 1)) {
  488.                 echo " loading=\"lazy\"";
  489.             }
  490.             echo "></div>
  491.                         ";
  492.             $context['_iterated'] = true;
  493.             ++$context['loop']['index0'];
  494.             ++$context['loop']['index'];
  495.             $context['loop']['first'] = false;
  496.             if (isset($context['loop']['length'])) {
  497.                 --$context['loop']['revindex0'];
  498.                 --$context['loop']['revindex'];
  499.                 $context['loop']['last'] = === $context['loop']['revindex0'];
  500.             }
  501.         }
  502.         if (!$context['_iterated']) {
  503.             // line 305
  504.             echo "                            <div class=\"slide-item\"><img src=\"";
  505.             echo twig_escape_filter($this->env$this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl($this->extensions['Eccube\Twig\Extension\EccubeExtension']->getNoImageProduct(""), "save_image"), "html"nulltrue);
  506.             echo "\" alt=\"";
  507.             ((twig_get_attribute($this->env$this->source$context["loop"], "first", [], "any"falsefalsetrue305)) ? (print (twig_escape_filter($this->envtwig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'305$this->source); })()), "name", [], "any"falsefalsetrue305), "html"nulltrue))) : (print ("")));
  508.             echo "\" width=\"550\" height=\"550\"></div>
  509.                         ";
  510.         }
  511.         $_parent $context['_parent'];
  512.         unset($context['_seq'], $context['_iterated'], $context['_key'], $context['ProductImage'], $context['_parent'], $context['loop']);
  513.         $context array_intersect_key($context$_parent) + $_parent;
  514.         // line 307
  515.         echo "                    </div>
  516.                     <div class=\"item_nav\">
  517.                         ";
  518.         // line 309
  519.         $context['_parent'] = $context;
  520.         $context['_seq'] = twig_ensure_traversable(twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'309$this->source); })()), "ProductImage", [], "any"falsefalsetrue309));
  521.         $context['loop'] = [
  522.           'parent' => $context['_parent'],
  523.           'index0' => 0,
  524.           'index'  => 1,
  525.           'first'  => true,
  526.         ];
  527.         if (is_array($context['_seq']) || (is_object($context['_seq']) && $context['_seq'] instanceof \Countable)) {
  528.             $length count($context['_seq']);
  529.             $context['loop']['revindex0'] = $length 1;
  530.             $context['loop']['revindex'] = $length;
  531.             $context['loop']['length'] = $length;
  532.             $context['loop']['last'] = === $length;
  533.         }
  534.         foreach ($context['_seq'] as $context["_key"] => $context["ProductImage"]) {
  535.             // line 310
  536.             echo "                            <div class=\"slideThumb\" data-index=\"";
  537.             echo twig_escape_filter($this->env$this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source$context["loop"], "index0", [], "any"falsefalsetrue310), 310$this->source), "html"nulltrue);
  538.             echo "\"><img src=\"";
  539.             echo twig_escape_filter($this->env$this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl($this->sandbox->ensureToStringAllowed($context["ProductImage"], 310$this->source), "save_image"), "html"nulltrue);
  540.             echo "\" alt=\"\" width=\"133\" height=\"133\" loading=\"lazy\"></div>
  541.                         ";
  542.             ++$context['loop']['index0'];
  543.             ++$context['loop']['index'];
  544.             $context['loop']['first'] = false;
  545.             if (isset($context['loop']['length'])) {
  546.                 --$context['loop']['revindex0'];
  547.                 --$context['loop']['revindex'];
  548.                 $context['loop']['last'] = === $context['loop']['revindex0'];
  549.             }
  550.         }
  551.         $_parent $context['_parent'];
  552.         unset($context['_seq'], $context['_iterated'], $context['_key'], $context['ProductImage'], $context['_parent'], $context['loop']);
  553.         $context array_intersect_key($context$_parent) + $_parent;
  554.         // line 312
  555.         echo "                    </div>
  556.                 </div>
  557.             </div>
  558.             <div class=\"ec-grid2__cell\">
  559.                 <div class=\"ec-productRole__profile item";
  560.         // line 316
  561.         echo twig_escape_filter($this->env$this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'316$this->source); })()), "id", [], "any"falsefalsetrue316), 316$this->source), "html"nulltrue);
  562.         echo "\">
  563.                     ";
  564.         // line 318
  565.         echo "                    <div class=\"ec-productRole__title\">
  566.                         <h2 class=\"ec-headingTitle\">";
  567.         // line 319
  568.         echo twig_escape_filter($this->env$this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'319$this->source); })()), "name", [], "any"falsefalsetrue319), 319$this->source), "html"nulltrue);
  569.         echo "</h2>
  570.                     </div>
  571.                     ";
  572.         // line 322
  573.         echo "                    <ul class=\"ec-productRole__tags\">
  574.                         ";
  575.         // line 323
  576.         $context['_parent'] = $context;
  577.         $context['_seq'] = twig_ensure_traversable(twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'323$this->source); })()), "Tags", [], "any"falsefalsetrue323));
  578.         foreach ($context['_seq'] as $context["_key"] => $context["Tag"]) {
  579.             // line 324
  580.             echo "                            <li class=\"ec-productRole__tag tag_";
  581.             echo twig_escape_filter($this->env$this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source$context["Tag"], "id", [], "any"falsefalsetrue324), 324$this->source), "html"nulltrue);
  582.             echo "\">";
  583.             echo twig_escape_filter($this->env$this->sandbox->ensureToStringAllowed($context["Tag"], 324$this->source), "html"nulltrue);
  584.             echo "</li>
  585.                         ";
  586.         }
  587.         $_parent $context['_parent'];
  588.         unset($context['_seq'], $context['_iterated'], $context['_key'], $context['Tag'], $context['_parent'], $context['loop']);
  589.         $context array_intersect_key($context$_parent) + $_parent;
  590.         // line 326
  591.         echo "                    </ul>
  592.                     ";
  593.         // line 328
  594.         echo "                    ";
  595.         if (twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'328$this->source); })()), "hasProductClass", [], "any"falsefalsetrue328)) {
  596.             // line 329
  597.             echo "<div class=\"ec-productRole__priceRegular\">
  598.                             ";
  599.             // line 330
  600.             if (( !(null === twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'330$this->source); })()), "getPrice01Min", [], "any"falsefalsetrue330)) && (twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'330$this->source); })()), "getPrice01IncTaxMin", [], "any"falsefalsetrue330) == twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'330$this->source); })()), "getPrice01IncTaxMax", [], "any"falsefalsetrue330)))) {
  601.                 // line 331
  602.                 echo "                                <span class=\"ec-productRole__priceRegularPrice\">";
  603.                 echo twig_escape_filter($this->env$this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("通常価格"), "html"nulltrue);
  604.                 echo ":<span class=\"price01-default\">";
  605.                 echo twig_escape_filter($this->env$this->extensions['Eccube\Twig\Extension\EccubeExtension']->getPriceFilter($this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'331$this->source); })()), "getPrice01IncTaxMin", [], "any"falsefalsetrue331), 331$this->source)), "html"nulltrue);
  606.                 echo "</span></span>
  607.                                 <span class=\"ec-productRole__priceRegularTax\">";
  608.                 // line 332
  609.                 echo twig_escape_filter($this->env$this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("税込"), "html"nulltrue);
  610.                 echo "</span>
  611.                             ";
  612.             } elseif (( !(null === twig_get_attribute($this->env$this->source,             // line 333
  613. (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'333$this->source); })()), "getPrice01Min", [], "any"falsefalsetrue333)) &&  !(null === twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'333$this->source); })()), "getPrice01Max", [], "any"falsefalsetrue333)))) {
  614.                 // line 334
  615.                 echo "                                <span class=\"ec-productRole__priceRegularPrice\">";
  616.                 echo twig_escape_filter($this->env$this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("通常価格"), "html"nulltrue);
  617.                 echo ":<span class=\"price01-default\">";
  618.                 echo twig_escape_filter($this->env$this->extensions['Eccube\Twig\Extension\EccubeExtension']->getPriceFilter($this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'334$this->source); })()), "getPrice01IncTaxMin", [], "any"falsefalsetrue334), 334$this->source)), "html"nulltrue);
  619.                 echo "~ ";
  620.                 echo twig_escape_filter($this->env$this->extensions['Eccube\Twig\Extension\EccubeExtension']->getPriceFilter($this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'334$this->source); })()), "getPrice01IncTaxMax", [], "any"falsefalsetrue334), 334$this->source)), "html"nulltrue);
  621.                 echo "</span></span>
  622.                                 <span class=\"ec-productRole__priceRegularTax\">";
  623.                 // line 335
  624.                 echo twig_escape_filter($this->env$this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("税込"), "html"nulltrue);
  625.                 echo "</span>
  626.                             ";
  627.             }
  628.             // line 337
  629.             echo "                        </div>
  630.                     ";
  631.         } else {
  632.             // line 339
  633.             echo "                        ";
  634.             if ( !(null === twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'339$this->source); })()), "getPrice01Max", [], "any"falsefalsetrue339))) {
  635.                 // line 340
  636.                 echo "                            <span class=\"ec-productRole__priceRegularPrice\">";
  637.                 echo twig_escape_filter($this->env$this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("通常価格"), "html"nulltrue);
  638.                 echo ":";
  639.                 echo twig_escape_filter($this->env$this->extensions['Eccube\Twig\Extension\EccubeExtension']->getPriceFilter($this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'340$this->source); })()), "getPrice01IncTaxMin", [], "any"falsefalsetrue340), 340$this->source)), "html"nulltrue);
  640.                 echo "</span>
  641.                             <span class=\"ec-productRole__priceRegularTax\">";
  642.                 // line 341
  643.                 echo twig_escape_filter($this->env$this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("税込"), "html"nulltrue);
  644.                 echo "</span>
  645.                         ";
  646.             }
  647.             // line 343
  648.             echo "                    ";
  649.         }
  650.         // line 344
  651.         echo "                    ";
  652.         // line 345
  653.         echo "                    <div class=\"ec-productRole__price\">
  654.                         ";
  655.         // line 346
  656.         if (twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'346$this->source); })()), "hasProductClass", [], "any"falsefalsetrue346)) {
  657.             // line 347
  658.             if ((twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'347$this->source); })()), "getPrice02IncTaxMin", [], "any"falsefalsetrue347) == twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'347$this->source); })()), "getPrice02IncTaxMax", [], "any"falsefalsetrue347))) {
  659.                 // line 348
  660.                 echo "                                <div class=\"ec-price\">
  661.                                     <span class=\"ec-price__price price02-default\">";
  662.                 // line 349
  663.                 echo twig_escape_filter($this->env$this->extensions['Eccube\Twig\Extension\EccubeExtension']->getPriceFilter($this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'349$this->source); })()), "getPrice02IncTaxMin", [], "any"falsefalsetrue349), 349$this->source)), "html"nulltrue);
  664.                 echo "</span>
  665.                                     <span class=\"ec-price__tax\">";
  666.                 // line 350
  667.                 echo twig_escape_filter($this->env$this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("税込"), "html"nulltrue);
  668.                 echo "</span>
  669.                                 </div>
  670.                             ";
  671.             } else {
  672.                 // line 353
  673.                 echo "                                <div class=\"ec-price\">
  674.                                     <span class=\"ec-price__price price02-default\">";
  675.                 // line 354
  676.                 echo twig_escape_filter($this->env$this->extensions['Eccube\Twig\Extension\EccubeExtension']->getPriceFilter($this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'354$this->source); })()), "getPrice02IncTaxMin", [], "any"falsefalsetrue354), 354$this->source)), "html"nulltrue);
  677.                 echo " ~ ";
  678.                 echo twig_escape_filter($this->env$this->extensions['Eccube\Twig\Extension\EccubeExtension']->getPriceFilter($this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'354$this->source); })()), "getPrice02IncTaxMax", [], "any"falsefalsetrue354), 354$this->source)), "html"nulltrue);
  679.                 echo "</span>
  680.                                     <span class=\"ec-price__tax\">";
  681.                 // line 355
  682.                 echo twig_escape_filter($this->env$this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("税込"), "html"nulltrue);
  683.                 echo "</span>
  684.                                 </div>
  685.                             ";
  686.             }
  687.             // line 358
  688.             echo "                        ";
  689.         } else {
  690.             // line 359
  691.             echo "                            <div class=\"ec-price\">
  692.                                 <span class=\"ec-price__price\">";
  693.             // line 360
  694.             echo twig_escape_filter($this->env$this->extensions['Eccube\Twig\Extension\EccubeExtension']->getPriceFilter($this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'360$this->source); })()), "getPrice02IncTaxMin", [], "any"falsefalsetrue360), 360$this->source)), "html"nulltrue);
  695.             echo "</span>
  696.                                 <span class=\"ec-price__tax\">";
  697.             // line 361
  698.             echo twig_escape_filter($this->env$this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("税込"), "html"nulltrue);
  699.             echo "</span>
  700.                             </div>
  701.                         ";
  702.         }
  703.         // line 364
  704.         echo "                    </div>
  705.                     ";
  706.         // line 366
  707.         echo "                    ";
  708.         if ( !twig_test_empty(twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'366$this->source); })()), "code_min", [], "any"falsefalsetrue366))) {
  709.             // line 367
  710.             echo "                        <div class=\"ec-productRole__code\">
  711.                             ";
  712.             // line 368
  713.             echo twig_escape_filter($this->env$this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("商品コード"), "html"nulltrue);
  714.             echo ": <span class=\"product-code-default\">";
  715.             echo twig_escape_filter($this->env$this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'368$this->source); })()), "code_min", [], "any"falsefalsetrue368), 368$this->source), "html"nulltrue);
  716.             if ((twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'368$this->source); })()), "code_min", [], "any"falsefalsetrue368) != twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'368$this->source); })()), "code_max", [], "any"falsefalsetrue368))) {
  717.                 echo " ~ ";
  718.                 echo twig_escape_filter($this->env$this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'368$this->source); })()), "code_max", [], "any"falsefalsetrue368), 368$this->source), "html"nulltrue);
  719.             }
  720.             echo "</span>
  721.                         </div>
  722.                     ";
  723.         }
  724.         // line 371
  725.         echo "                    ";
  726.         // line 372
  727.         echo "                    ";
  728.         if ( !twig_test_empty(twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'372$this->source); })()), "ProductCategories", [], "any"falsefalsetrue372))) {
  729.             // line 373
  730.             echo "                        <div class=\"ec-productRole__category\">
  731.                             <div>";
  732.             // line 374
  733.             echo twig_escape_filter($this->env$this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("関連カテゴリ"), "html"nulltrue);
  734.             echo "</div>
  735.                             ";
  736.             // line 375
  737.             $context['_parent'] = $context;
  738.             $context['_seq'] = twig_ensure_traversable(twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'375$this->source); })()), "ProductCategories", [], "any"falsefalsetrue375));
  739.             foreach ($context['_seq'] as $context["_key"] => $context["ProductCategory"]) {
  740.                 // line 376
  741.                 echo "                                <ul>
  742.                                     <li>
  743.                                         ";
  744.                 // line 378
  745.                 $context['_parent'] = $context;
  746.                 $context['_seq'] = twig_ensure_traversable(twig_get_attribute($this->env$this->sourcetwig_get_attribute($this->env$this->source$context["ProductCategory"], "Category", [], "any"falsefalsetrue378), "path", [], "any"falsefalsetrue378));
  747.                 $context['loop'] = [
  748.                   'parent' => $context['_parent'],
  749.                   'index0' => 0,
  750.                   'index'  => 1,
  751.                   'first'  => true,
  752.                 ];
  753.                 if (is_array($context['_seq']) || (is_object($context['_seq']) && $context['_seq'] instanceof \Countable)) {
  754.                     $length count($context['_seq']);
  755.                     $context['loop']['revindex0'] = $length 1;
  756.                     $context['loop']['revindex'] = $length;
  757.                     $context['loop']['length'] = $length;
  758.                     $context['loop']['last'] = === $length;
  759.                 }
  760.                 foreach ($context['_seq'] as $context["_key"] => $context["Category"]) {
  761.                     // line 379
  762.                     echo "                                            <a href=\"";
  763.                     echo $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getUrl("product_list");
  764.                     echo "?category_id=";
  765.                     echo twig_escape_filter($this->env$this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source$context["Category"], "id", [], "any"falsefalsetrue379), 379$this->source), "html"nulltrue);
  766.                     echo "\">";
  767.                     echo twig_escape_filter($this->env$this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source$context["Category"], "name", [], "any"falsefalsetrue379), 379$this->source), "html"nulltrue);
  768.                     echo "</a>";
  769.                     if ((twig_get_attribute($this->env$this->source$context["loop"], "last", [], "any"falsefalsetrue379) == false)) {
  770.                         // line 380
  771.                         echo "                                            <span>></span>";
  772.                     }
  773.                     ++$context['loop']['index0'];
  774.                     ++$context['loop']['index'];
  775.                     $context['loop']['first'] = false;
  776.                     if (isset($context['loop']['length'])) {
  777.                         --$context['loop']['revindex0'];
  778.                         --$context['loop']['revindex'];
  779.                         $context['loop']['last'] = === $context['loop']['revindex0'];
  780.                     }
  781.                 }
  782.                 $_parent $context['_parent'];
  783.                 unset($context['_seq'], $context['_iterated'], $context['_key'], $context['Category'], $context['_parent'], $context['loop']);
  784.                 $context array_intersect_key($context$_parent) + $_parent;
  785.                 // line 382
  786.                 echo "                                    </li>
  787.                                 </ul>
  788.                             ";
  789.             }
  790.             $_parent $context['_parent'];
  791.             unset($context['_seq'], $context['_iterated'], $context['_key'], $context['ProductCategory'], $context['_parent'], $context['loop']);
  792.             $context array_intersect_key($context$_parent) + $_parent;
  793.             // line 385
  794.             echo "                        </div>
  795.                     ";
  796.         }
  797.         // line 387
  798.         echo "                    <form action=\"";
  799.         echo twig_escape_filter($this->env$this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getUrl("product_add_cart", ["id" => twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'387$this->source); })()), "id", [], "any"falsefalsetrue387)]), "html"nulltrue);
  800.         echo "\" method=\"post\" id=\"form1\" name=\"form1\">
  801.                         ";
  802.         // line 388
  803.         if (twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'388$this->source); })()), "stock_find", [], "any"falsefalsetrue388)) {
  804.             // line 389
  805.             echo "                            <div class=\"ec-productRole__actions\">
  806.                                 ";
  807.             // line 390
  808.             if (twig_get_attribute($this->env$this->source, ($context["form"] ?? null), "classcategory_id1", [], "any"truetruetrue390)) {
  809.                 // line 391
  810.                 echo "                                    <div class=\"ec-select\">
  811.                                         ";
  812.                 // line 392
  813.                 echo $this->env->getRuntime('Symfony\Component\Form\FormRenderer')->searchAndRenderBlock($this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source, (isset($context["form"]) || array_key_exists("form"$context) ? $context["form"] : (function () { throw new RuntimeError('Variable "form" does not exist.'392$this->source); })()), "classcategory_id1", [], "any"falsefalsetrue392), 392$this->source), 'row');
  814.                 echo "
  815.                                         ";
  816.                 // line 393
  817.                 echo $this->env->getRuntime('Symfony\Component\Form\FormRenderer')->searchAndRenderBlock($this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source, (isset($context["form"]) || array_key_exists("form"$context) ? $context["form"] : (function () { throw new RuntimeError('Variable "form" does not exist.'393$this->source); })()), "classcategory_id1", [], "any"falsefalsetrue393), 393$this->source), 'errors');
  818.                 echo "
  819.                                     </div>
  820.                                     ";
  821.                 // line 395
  822.                 if (twig_get_attribute($this->env$this->source, ($context["form"] ?? null), "classcategory_id2", [], "any"truetruetrue395)) {
  823.                     // line 396
  824.                     echo "                                        <div class=\"ec-select\">
  825.                                             ";
  826.                     // line 397
  827.                     echo $this->env->getRuntime('Symfony\Component\Form\FormRenderer')->searchAndRenderBlock($this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source, (isset($context["form"]) || array_key_exists("form"$context) ? $context["form"] : (function () { throw new RuntimeError('Variable "form" does not exist.'397$this->source); })()), "classcategory_id2", [], "any"falsefalsetrue397), 397$this->source), 'row');
  828.                     echo "
  829.                                             ";
  830.                     // line 398
  831.                     echo $this->env->getRuntime('Symfony\Component\Form\FormRenderer')->searchAndRenderBlock($this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source, (isset($context["form"]) || array_key_exists("form"$context) ? $context["form"] : (function () { throw new RuntimeError('Variable "form" does not exist.'398$this->source); })()), "classcategory_id2", [], "any"falsefalsetrue398), 398$this->source), 'errors');
  832.                     echo "
  833.                                         </div>
  834.                                     ";
  835.                 }
  836.                 // line 401
  837.                 echo "                                ";
  838.             }
  839.             // line 402
  840.             echo "                                <div class=\"ec-numberInput\">
  841. ";
  842.             // line 403
  843.             echo $this->extensions['Eccube\Twig\Extension\IgnoreTwigSandboxErrorExtension']->twig_include($this->env$context"Product/option.twig", array(), truetrue);
  844.             echo "
  845. <span class=\"itemnum\"></span>
  846. \t\t\t\t    <span class=\"numlabel\">";
  847.             // line 407
  848.             echo twig_escape_filter($this->env$this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("数量"), "html"nulltrue);
  849.             echo "</span>
  850. \t\t\t\t    <span class=\"numnum\">
  851.                                     ";
  852.             // line 409
  853.             echo $this->env->getRuntime('Symfony\Component\Form\FormRenderer')->searchAndRenderBlock($this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source, (isset($context["form"]) || array_key_exists("form"$context) ? $context["form"] : (function () { throw new RuntimeError('Variable "form" does not exist.'409$this->source); })()), "quantity", [], "any"falsefalsetrue409), 409$this->source), 'widget');
  854.             echo "
  855.                                     ";
  856.             // line 410
  857.             echo $this->env->getRuntime('Symfony\Component\Form\FormRenderer')->searchAndRenderBlock($this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source, (isset($context["form"]) || array_key_exists("form"$context) ? $context["form"] : (function () { throw new RuntimeError('Variable "form" does not exist.'410$this->source); })()), "quantity", [], "any"falsefalsetrue410), 410$this->source), 'errors');
  858.             echo "
  859.                     </span>
  860. </span>       
  861.                                     
  862.                                 </div>
  863.                             </div>
  864.                             <div class=\"ec-productRole__btn\">
  865.                                 <button type=\"submit\" class=\"ec-blockBtn--action add-cart\">
  866.                                     ";
  867.             // line 421
  868.             echo twig_escape_filter($this->env$this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("カートに入れる"), "html"nulltrue);
  869.             echo "
  870.                                 </button>
  871.                             </div>
  872.                         ";
  873.         } else {
  874.             // line 425
  875.             echo "                            <div class=\"ec-productRole__btn\">
  876.                                 <button type=\"button\" class=\"ec-blockBtn--action\" disabled=\"disabled\">
  877.                                     ";
  878.             // line 427
  879.             echo twig_escape_filter($this->env$this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("ただいま品切れ中です。"), "html"nulltrue);
  880.             echo "
  881.                                 </button>
  882.                             </div>
  883.                         ";
  884.         }
  885.         // line 431
  886.         echo "
  887.                         ";
  888.         // line 432
  889.         echo $this->env->getRuntime('Symfony\Component\Form\FormRenderer')->searchAndRenderBlock($this->sandbox->ensureToStringAllowed((isset($context["form"]) || array_key_exists("form"$context) ? $context["form"] : (function () { throw new RuntimeError('Variable "form" does not exist.'432$this->source); })()), 432$this->source), 'rest');
  890.         echo "
  891.                     </form>
  892.                     ";
  893.         // line 434
  894.         echo $this->extensions['Eccube\Twig\Extension\IgnoreTwigSandboxErrorExtension']->twig_include($this->env$context"Product/option_description.twig");
  895.         echo "<div class=\"ec-modal\">
  896.                         <div class=\"ec-modal-overlay\">
  897.                             <div class=\"ec-modal-wrap\">
  898.                                 <span class=\"ec-modal-close\"><span class=\"ec-icon\"><img src=\"";
  899.         // line 437
  900.         echo twig_escape_filter($this->env$this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("assets/icon/cross-dark.svg"), "html"nulltrue);
  901.         echo "\" alt=\"\"/></span></span>
  902.                                 <div id=\"ec-modal-header\" class=\"text-center\">";
  903.         // line 438
  904.         echo twig_escape_filter($this->env$this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("カートに追加しました。"), "html"nulltrue);
  905.         echo "</div>
  906.                                 <div class=\"ec-modal-box\">
  907.                                     <div class=\"ec-role\">
  908.                                         <span class=\"ec-inlineBtn--cancel\">";
  909.         // line 441
  910.         echo twig_escape_filter($this->env$this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("お買い物を続ける"), "html"nulltrue);
  911.         echo "</span>
  912.                                         <a href=\"";
  913.         // line 442
  914.         echo $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getUrl("cart");
  915.         echo "\" class=\"ec-inlineBtn--action\">";
  916.         echo twig_escape_filter($this->env$this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("カートへ進む"), "html"nulltrue);
  917.         echo "</a>
  918.                                     </div>
  919.                                 </div>
  920.                             </div>
  921.                         </div>
  922.                     </div>
  923.                     ";
  924.         // line 448
  925.         if (twig_get_attribute($this->env$this->source, (isset($context["BaseInfo"]) || array_key_exists("BaseInfo"$context) ? $context["BaseInfo"] : (function () { throw new RuntimeError('Variable "BaseInfo" does not exist.'448$this->source); })()), "option_favorite_product", [], "any"falsefalsetrue448)) {
  926.             // line 449
  927.             echo "                        <form action=\"";
  928.             echo twig_escape_filter($this->env$this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getUrl("product_add_favorite", ["id" => twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'449$this->source); })()), "id", [], "any"falsefalsetrue449)]), "html"nulltrue);
  929.             echo "\" method=\"post\">
  930.                             <div class=\"ec-productRole__btn\">
  931.                                 ";
  932.             // line 451
  933.             if (((isset($context["is_favorite"]) || array_key_exists("is_favorite"$context) ? $context["is_favorite"] : (function () { throw new RuntimeError('Variable "is_favorite" does not exist.'451$this->source); })()) == false)) {
  934.                 // line 452
  935.                 echo "                                    <button type=\"submit\" id=\"favorite\" class=\"ec-blockBtn--cancel\">
  936.                                         ";
  937.                 // line 453
  938.                 echo twig_escape_filter($this->env$this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("お気に入りに追加"), "html"nulltrue);
  939.                 echo "
  940.                                     </button>
  941.                                 ";
  942.             } else {
  943.                 // line 456
  944.                 echo "                                    <button type=\"submit\" id=\"favorite\" class=\"ec-blockBtn--cancel\"
  945.                                             disabled=\"disabled\">";
  946.                 // line 457
  947.                 echo twig_escape_filter($this->env$this->extensions['Symfony\Bridge\Twig\Extension\TranslationExtension']->trans("お気に入りに追加済です。"), "html"nulltrue);
  948.                 echo "
  949.                                     </button>
  950.                                 ";
  951.             }
  952.             // line 460
  953.             echo "                            </div>
  954.                         </form>
  955.                     ";
  956.         }
  957.         // line 463
  958.         echo "                    <div class=\"ec-productRole__description\">";
  959.         echo twig_nl2br($this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'463$this->source); })()), "description_detail", [], "any"falsefalsetrue463), 463$this->source));
  960.         echo "
  961.                     </div>
  962.                     
  963.                     <div class=\"ec-productRole__description table\">
  964.                         
  965.                         
  966.                         
  967.                         <dl class=\"number\">
  968.                             <dt>JANコード</dt><dd>";
  969.         // line 471
  970.         echo twig_escape_filter($this->env$this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'471$this->source); })()), "ViewData", [=> 13], "method"falsefalsetrue471), 471$this->source), "html"nulltrue);
  971.         echo "</dd>
  972.                         </dl>
  973.                         <dl class=\"number\">
  974.                             <dt>規格</dt><dd>";
  975.         // line 474
  976.         echo twig_escape_filter($this->env$this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'474$this->source); })()), "ViewData", [=> 10], "method"falsefalsetrue474), 474$this->source), "html"nulltrue);
  977.         echo "</dd>
  978.                         </dl>
  979.                         <dl class=\"number\">
  980.                             <dt>生産国</dt><dd>";
  981.         // line 477
  982.         echo twig_escape_filter($this->env$this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'477$this->source); })()), "ViewData", [=> 11], "method"falsefalsetrue477), 477$this->source), "html"nulltrue);
  983.         echo "</dd>
  984.                         </dl>                    
  985.                         <dl class=\"number\">
  986.                             <dt>入数</dt><dd>";
  987.         // line 480
  988.         echo twig_escape_filter($this->env$this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'480$this->source); })()), "ViewData", [=> 1], "method"falsefalsetrue480), 480$this->source), "html"nulltrue);
  989.         echo "</dd>
  990.                         </dl>
  991.                         <dl class=\"number\">
  992.                             <dt>販売単位</dt><dd>";
  993.         // line 483
  994.         echo twig_escape_filter($this->env$this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'483$this->source); })()), "ViewData", [=> 12], "method"falsefalsetrue483), 483$this->source), "html"nulltrue);
  995.         echo "</dd>
  996.                         </dl>
  997.                         
  998.                         <table class=\"detail\">
  999.                             <tr>
  1000.                                 <th class=\"th1\"></th>
  1001.                                 <th class=\"th2\">寸法</th>
  1002.                                 <th class=\"th3\">重量</th>
  1003.                             </tr>
  1004.                             <tr>
  1005.                                 <th>商品</th>
  1006.                                 <td>";
  1007.         // line 494
  1008.         echo twig_nl2br($this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'494$this->source); })()), "ViewData", [=> 2], "method"falsefalsetrue494), 494$this->source));
  1009.         echo "</td>
  1010.                                 <td>";
  1011.         // line 495
  1012.         echo twig_nl2br($this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'495$this->source); })()), "ViewData", [=> 3], "method"falsefalsetrue495), 495$this->source));
  1013.         echo "</td>
  1014.                             </tr>
  1015.                             <tr>
  1016.                                 <th>内箱</th>
  1017.                                 <td>";
  1018.         // line 499
  1019.         echo twig_nl2br($this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'499$this->source); })()), "ViewData", [=> 4], "method"falsefalsetrue499), 499$this->source));
  1020.         echo "</td>
  1021.                                 <td>";
  1022.         // line 500
  1023.         echo twig_nl2br($this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'500$this->source); })()), "ViewData", [=> 5], "method"falsefalsetrue500), 500$this->source));
  1024.         echo "</td>
  1025.                             </tr>
  1026.                             <tr>
  1027.                                 <th>外箱</th>
  1028.                                 <td>";
  1029.         // line 504
  1030.         echo twig_nl2br($this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'504$this->source); })()), "ViewData", [=> 6], "method"falsefalsetrue504), 504$this->source));
  1031.         echo "</td>
  1032.                                 <td>";
  1033.         // line 505
  1034.         echo twig_nl2br($this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'505$this->source); })()), "ViewData", [=> 7], "method"falsefalsetrue505), 505$this->source));
  1035.         echo "</td>
  1036.                             </tr>
  1037.                         </table>
  1038.                         
  1039.                         <div class=\"item_youtube\">
  1040.                         ";
  1041.         // line 510
  1042.         echo twig_escape_filter($this->env$this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'510$this->source); })()), "ViewData", [=> 9], "method"falsefalsetrue510), 510$this->source), "html"nulltrue);
  1043.         echo "
  1044.                         </div>
  1045.                     </div>
  1046.                     
  1047.                 </div>
  1048.             </div>
  1049.         </div>
  1050.         ";
  1051.         // line 517
  1052.         if (twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'517$this->source); })()), "freearea", [], "any"falsefalsetrue517)) {
  1053.             // line 518
  1054.             echo "             <div class=\"ec-productRole__description\">
  1055.                  ";
  1056.             // line 519
  1057.             echo $this->extensions['Eccube\Twig\Extension\IgnoreTwigSandboxErrorExtension']->twig_include($this->env$contexttwig_template_from_string($this->env$this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env$this->source, (isset($context["Product"]) || array_key_exists("Product"$context) ? $context["Product"] : (function () { throw new RuntimeError('Variable "Product" does not exist.'519$this->source); })()), "freearea", [], "any"falsefalsetrue519), 519$this->source)), array(), truefalsetrue);
  1058.             echo "
  1059.             </div>
  1060.         ";
  1061.         }
  1062.         // line 522
  1063.         echo "    </div>
  1064. ";
  1065.         // line 524
  1066.         echo "  <div id=\"imageModal\" class=\"modal-overlay\" style=\"display:none;\">
  1067.     <div class=\"modal-content\">
  1068.       <button id=\"btnCancel\" type=\"button\">&times;</button>
  1069.       <div class=\"modal-body\">
  1070.         <section class=\"image-area\">
  1071.           <canvas id=\"editCanvas\" width=\"532\" height=\"532\"></canvas>
  1072.           <div class=\"confirm-area\">
  1073.             <button id=\"btnConfirm\" type=\"button\">作成完了</button>
  1074.           </div>
  1075.         </section>
  1076.         <section class=\"control-area\">
  1077.           <div>
  1078.             <button id=\"uploadBtn\" type=\"button\">画像アップロード</button>
  1079.             <button id=\"deleteBtn\"  type=\"button\" disabled>削除</button>
  1080.           </div>
  1081.           <div class=\"slider-row\">
  1082.             <label for=\"sizeSlider\">サイズ</label>
  1083.             <input type=\"range\" id=\"sizeSlider\" min=\"0\" max=\"24\" step=\"1\" value=\"12\">
  1084.           </div>
  1085.           <div class=\"slider-row\">
  1086.             <label for=\"rotateSlider\">回 転</label>
  1087.             <input type=\"range\" id=\"rotateSlider\" min=\"0\" max=\"24\" step=\"1\" value=\"12\">
  1088.           </div>
  1089.         </section>
  1090.         <section class=\"info-area\">
  1091.           <h2>画像作成機能の使い方</h2>
  1092.           <p>
  1093.             まず、[画像アップロード]ボタンを押して、画像をアップロードしてください。<br>
  1094.             サイズや回転を調整して自由にレイアウトしてください。<br>
  1095.             ドラッグして画像の表示位置を変えることもできます。<br>
  1096.             画像が完成したら[作成完了]ボタンを押して保存してください。<br>
  1097.             画像を間違った時は、[削除]ボタンで削除してやり直せます。<br>
  1098.             作成を中止して元の画面に戻りたいときは、[×]ボタンを押してください。
  1099.           </p>
  1100.         </section>
  1101.       </div>
  1102.     </div>
  1103.   </div>
  1104. ";
  1105.         
  1106.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  1107.         
  1108.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  1109.     }
  1110.     public function getTemplateName()
  1111.     {
  1112.         return "__string_template__a541c069667438736670b3fc45308553";
  1113.     }
  1114.     public function isTraitable()
  1115.     {
  1116.         return false;
  1117.     }
  1118.     public function getDebugInfo()
  1119.     {
  1120.         return array (  1119 => 524,  1116 => 522,  1110 => 519,  1107 => 518,  1105 => 517,  1095 => 510,  1087 => 505,  1083 => 504,  1076 => 500,  1072 => 499,  1065 => 495,  1061 => 494,  1047 => 483,  1041 => 480,  1035 => 477,  1029 => 474,  1023 => 471,  1011 => 463,  1006 => 460,  1000 => 457,  997 => 456,  991 => 453,  988 => 452,  986 => 451,  980 => 449,  978 => 448,  967 => 442,  963 => 441,  957 => 438,  953 => 437,  947 => 434,  942 => 432,  939 => 431,  932 => 427,  928 => 425,  921 => 421,  907 => 410,  903 => 409,  898 => 407,  891 => 403,  888 => 402,  885 => 401,  879 => 398,  875 => 397,  872 => 396,  870 => 395,  865 => 393,  861 => 392,  858 => 391,  856 => 390,  853 => 389,  851 => 388,  846 => 387,  842 => 385,  834 => 382,  819 => 380,  810 => 379,  793 => 378,  789 => 376,  785 => 375,  781 => 374,  778 => 373,  775 => 372,  773 => 371,  761 => 368,  758 => 367,  755 => 366,  752 => 364,  746 => 361,  742 => 360,  739 => 359,  736 => 358,  730 => 355,  724 => 354,  721 => 353,  715 => 350,  711 => 349,  708 => 348,  706 => 347,  704 => 346,  701 => 345,  699 => 344,  696 => 343,  691 => 341,  684 => 340,  681 => 339,  677 => 337,  672 => 335,  663 => 334,  661 => 333,  657 => 332,  650 => 331,  648 => 330,  645 => 329,  642 => 328,  639 => 326,  628 => 324,  624 => 323,  621 => 322,  616 => 319,  613 => 318,  609 => 316,  603 => 312,  584 => 310,  567 => 309,  563 => 307,  552 => 305,  530 => 303,  512 => 302,  504 => 296,  494 => 295,  479 => 289,  475 => 288,  471 => 287,  467 => 286,  463 => 284,  457 => 282,  455 => 281,  450 => 280,  447 => 279,  437 => 277,  423 => 275,  415 => 274,  397 => 273,  392 => 271,  369 => 251,  359 => 244,  329 => 217,  324 => 214,  315 => 208,  311 => 206,  309 => 205,  306 => 204,  297 => 198,  293 => 196,  291 => 195,  209 => 115,  201 => 113,  199 => 112,  194 => 110,  191 => 109,  189 => 108,  175 => 97,  172 => 96,  162 => 95,  75 => 16,  65 => 15,  54 => 11,  52 => 13,  39 => 11,);
  1121.     }
  1122.     public function getSourceContext()
  1123.     {
  1124.         return new Source("{#
  1125. This file is part of EC-CUBE
  1126. Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved.
  1127. http://www.ec-cube.co.jp/
  1128. For the full copyright and license information, please view the LICENSE
  1129. file that was distributed with this source code.
  1130. #}
  1131. {% extends 'default_frame.twig' %}
  1132. {% set body_class = 'product_page' %}
  1133. {% block stylesheet %}
  1134.     <style>
  1135.         .slick-slider {
  1136.             margin-bottom: 30px;
  1137.         }
  1138.         .slick-dots {
  1139.             position: absolute;
  1140.             bottom: -45px;
  1141.             display: block;
  1142.             width: 100%;
  1143.             padding: 0;
  1144.             list-style: none;
  1145.             text-align: center;
  1146.         }
  1147.         .slick-dots li {
  1148.             position: relative;
  1149.             display: inline-block;
  1150.             width: 20px;
  1151.             height: 20px;
  1152.             margin: 0 5px;
  1153.             padding: 0;
  1154.             cursor: pointer;
  1155.         }
  1156.         .slick-dots li button {
  1157.             font-size: 0;
  1158.             line-height: 0;
  1159.             display: block;
  1160.             width: 20px;
  1161.             height: 20px;
  1162.             padding: 5px;
  1163.             cursor: pointer;
  1164.             color: transparent;
  1165.             border: 0;
  1166.             outline: none;
  1167.             background: transparent;
  1168.         }
  1169.         .slick-dots li button:hover,
  1170.         .slick-dots li button:focus {
  1171.             outline: none;
  1172.         }
  1173.         .slick-dots li button:hover:before,
  1174.         .slick-dots li button:focus:before {
  1175.             opacity: 1;
  1176.         }
  1177.         .slick-dots li button:before {
  1178.             content: \" \";
  1179.             line-height: 20px;
  1180.             position: absolute;
  1181.             top: 0;
  1182.             left: 0;
  1183.             width: 12px;
  1184.             height: 12px;
  1185.             text-align: center;
  1186.             opacity: .25;
  1187.             background-color: black;
  1188.             border-radius: 50%;
  1189.         }
  1190.         .slick-dots li.slick-active button:before {
  1191.             opacity: .75;
  1192.             background-color: black;
  1193.         }
  1194.         .slick-dots li button.thumbnail img {
  1195.             width: 0;
  1196.             height: 0;
  1197.         }
  1198.     </style>
  1199. {% endblock %}
  1200. {% block javascript %}
  1201.     <script>
  1202.         eccube.classCategories = {{ class_categories_as_json(Product)|raw }};
  1203.         // 規格2に選択肢を割り当てる。
  1204.         function fnSetClassCategories(form, classcat_id2_selected) {
  1205.             var \$form = \$(form);
  1206.             var product_id = \$form.find('input[name=product_id]').val();
  1207.             var \$sele1 = \$form.find('select[name=classcategory_id1]');
  1208.             var \$sele2 = \$form.find('select[name=classcategory_id2]');
  1209.             eccube.setClassCategories(\$form, product_id, \$sele1, \$sele2, classcat_id2_selected);
  1210.         }
  1211.         {% if form.classcategory_id2 is defined %}
  1212.         fnSetClassCategories(
  1213.             \$('#form1'), {{ form.classcategory_id2.vars.value|json_encode|raw }}
  1214.         );
  1215.         {% elseif form.classcategory_id1 is defined %}
  1216.         eccube.checkStock(\$('#form1'), {{ Product.id }}, {{ form.classcategory_id1.vars.value|json_encode|raw }}, null);
  1217.         {% endif %}
  1218.     </script>
  1219.     <script>
  1220.         \$(function() {
  1221.             // bfcache無効化
  1222.             \$(window).bind('pageshow', function(event) {
  1223.                 if (event.originalEvent.persisted) {
  1224.                     location.reload(true);
  1225.                 }
  1226.             });
  1227.             // Core Web Vital の Cumulative Layout Shift(CLS)対策のため
  1228.             // img タグに width, height が付与されている.
  1229.             // 630px 未満の画面サイズでは縦横比が壊れるための対策
  1230.             // see https://github.com/EC-CUBE/ec-cube/pull/5023
  1231.             \$('.ec-grid2__cell').hide();
  1232.             var removeSize = function () {
  1233.                 \$('.slide-item').height('');
  1234.                 \$('.slide-item img')
  1235.                     .removeAttr('width')
  1236.                     .removeAttr('height')
  1237.                     .removeAttr('style');
  1238.             };
  1239.             var slickInitial = function(slick) {
  1240.                 \$('.ec-grid2__cell').fadeIn(1500);
  1241.                 var baseHeight = \$(slick.target).height();
  1242.                 var baseWidth = \$(slick.target).width();
  1243.                 var rate = baseWidth / baseHeight;
  1244.                 \$('.slide-item').height(baseHeight * rate); // 余白を削除する
  1245.                 // transform を使用することでCLSの影響を受けないようにする
  1246.                 \$('.slide-item img')
  1247.                     .css(
  1248.                         {
  1249.                             'transform-origin': 'top left',
  1250.                             'transform': 'scaleY(' + rate + ')',
  1251.                             'transition': 'transform .1s'
  1252.                         }
  1253.                     );
  1254.                 // 正しいサイズに近くなったら属性を解除する
  1255.                 setTimeout(removeSize, 500);
  1256.             };
  1257.             \$('.item_visual').on('init', slickInitial);
  1258.             // リサイズ時は CLS の影響を受けないため属性を解除する
  1259.             \$(window).resize(removeSize);
  1260.             \$('.item_visual').slick({
  1261.                 dots: false,
  1262.                 arrows: false,
  1263.                 responsive: [{
  1264.                     breakpoint: 768,
  1265.                     settings: {
  1266.                         dots: true
  1267.                     }
  1268.                 }]
  1269.             });
  1270.             \$('.slideThumb').on('click', function() {
  1271.                 var index = \$(this).attr('data-index');
  1272.                 \$('.item_visual').slick('slickGoTo', index, false);
  1273.             })
  1274.         });
  1275.     </script>
  1276.     <script>
  1277.         \$(function() {
  1278.             \$('.add-cart').on('click', function(event) {
  1279.                 var \$form = \$('#form1');
  1280.                 // ── 画像登録必須チェック ──
  1281.                 var missing = false;
  1282.                 \$form.find('input[type=\"hidden\"][required]').each(function() {
  1283.                     if (!\$.trim(\$(this).val())) {
  1284.                         alert('画像登録が必要です');
  1285.                         missing = true;
  1286.                         return false;
  1287.                     }
  1288.                 });
  1289.                 if (missing) {
  1290.                     event.preventDefault();
  1291.                     return false;
  1292.                 }
  1293.                 {% if form.classcategory_id1 is defined %}
  1294.                 // 規格1フォームの必須チェック
  1295.                 if (\$('#classcategory_id1').val() == '__unselected' || \$('#classcategory_id1').val() == '') {
  1296.                     \$('#classcategory_id1')[0].setCustomValidity('{{ '項目が選択されていません'|trans }}');
  1297.                     return true;
  1298.                 } else {
  1299.                     \$('#classcategory_id1')[0].setCustomValidity('');
  1300.                 }
  1301.                 {% endif %}
  1302.                 {% if form.classcategory_id2 is defined %}
  1303.                 // 規格2フォームの必須チェック
  1304.                 if (\$('#classcategory_id2').val() == '__unselected' || \$('#classcategory_id2').val() == '') {
  1305.                     \$('#classcategory_id2')[0].setCustomValidity('{{ '項目が選択されていません'|trans }}');
  1306.                     return true;
  1307.                 } else {
  1308.                     \$('#classcategory_id2')[0].setCustomValidity('');
  1309.                 }
  1310.                 {% endif %}
  1311.                 // 個数フォームのチェック
  1312.                 if (\$('#quantity').val() < 1) {
  1313.                     \$('#quantity')[0].setCustomValidity('{{ '1以上で入力してください。'|trans }}');
  1314.                     return true;
  1315.                 } else {
  1316.                     \$('#quantity')[0].setCustomValidity('');
  1317.                 }
  1318.                 event.preventDefault();
  1319.                 \$form = \$('#form1');
  1320.                 \$.ajax({
  1321.                     url: \$form.attr('action'),
  1322.                     type: \$form.attr('method'),
  1323.                     data: \$form.serialize(),
  1324.                     dataType: 'json',
  1325.                     beforeSend: function(xhr, settings) {
  1326.                         // Buttonを無効にする
  1327.                         \$('.add-cart').prop('disabled', true);
  1328.                     }
  1329.                 }).done(function(data) {
  1330.                     // レスポンス内のメッセージをalertで表示
  1331.                     \$.each(data.messages, function() {
  1332.                         \$('#ec-modal-header').text(this);
  1333.                     });
  1334.                     \$('.ec-modal').show()
  1335.                     // カートブロックを更新する
  1336.                     \$.ajax({
  1337.                         url: \"{{ url('block_cart') }}\",
  1338.                         type: 'GET',
  1339.                         dataType: 'html'
  1340.                     }).done(function(html) {
  1341.                         \$('.ec-headerRole__cart').html(html);
  1342.                     });
  1343.                 }).fail(function(data) {
  1344.                     alert('{{ 'カートへの追加に失敗しました。'|trans }}');
  1345.                 }).always(function(data) {
  1346.                     // Buttonを有効にする
  1347.                     \$('.add-cart').prop('disabled', false);
  1348.                 });
  1349.             });
  1350.         });
  1351.         \$('.ec-modal-wrap').on('click', function(e) {
  1352.             // モーダル内の処理は外側にバブリングさせない
  1353.             e.stopPropagation();
  1354.         });
  1355.         \$('.ec-modal-overlay, .ec-modal, .ec-modal-close, .ec-inlineBtn--cancel').on('click', function() {
  1356.             \$('.ec-modal').hide()
  1357.         });
  1358.     </script>
  1359.     <script type=\"application/ld+json\">
  1360.     {
  1361.         \"@context\": \"https://schema.org/\",
  1362.         \"@type\": \"Product\",
  1363.         \"name\": \"{{ Product.name }}\",
  1364.         \"image\": [
  1365.             {% for img in Product.ProductImage %}
  1366.                 \"{{ app.request.schemeAndHttpHost }}{{ asset(img, 'save_image') }}\"{% if not loop.last %},{% endif %}
  1367.             {% else %}
  1368.                 \"{{ app.request.schemeAndHttpHost }}{{ asset(''|no_image_product, 'save_image') }}\"
  1369.             {% endfor %}
  1370.         ],
  1371.         \"description\": \"{{ Product.description_list | default(Product.description_detail) | replace({'\\n': '', '\\r': ''}) | slice(0,300) }}\",
  1372.         {% if Product.code_min %}
  1373.         \"sku\": \"{{ Product.code_min }}\",
  1374.         {% endif %}
  1375.         \"offers\": {
  1376.             \"@type\": \"Offer\",
  1377.             \"url\": \"{{ url('product_detail', {'id': Product.id}) }}\",
  1378.             \"priceCurrency\": \"{{ eccube_config.currency }}\",
  1379.             \"price\": {{ Product.getPrice02IncTaxMin ? Product.getPrice02IncTaxMin : 0}},
  1380.             \"availability\": \"{{ Product.stock_find ? \"InStock\" : \"OutOfStock\" }}\"
  1381.         }
  1382.     }
  1383.     </script>
  1384. {% endblock %}
  1385. {% block main %}
  1386.     <div class=\"ec-productRole\">
  1387.         <div class=\"ec-grid2\">
  1388.             <div class=\"ec-grid2__cell\">
  1389.                 <div class=\"ec-sliderItemRole\">
  1390.                     <div class=\"item_visual\">
  1391.                         {% for ProductImage in Product.ProductImage %}
  1392.                             <div class=\"slide-item\"><img src=\"{{ asset(ProductImage, 'save_image') }}\" alt=\"{{ loop.first ? Product.name : '' }}\" width=\"550\" height=\"550\"{% if loop.index > 1 %} loading=\"lazy\"{% endif %}></div>
  1393.                         {% else %}
  1394.                             <div class=\"slide-item\"><img src=\"{{ asset(''|no_image_product, 'save_image') }}\" alt=\"{{ loop.first ? Product.name : '' }}\" width=\"550\" height=\"550\"></div>
  1395.                         {% endfor %}
  1396.                     </div>
  1397.                     <div class=\"item_nav\">
  1398.                         {% for ProductImage in Product.ProductImage %}
  1399.                             <div class=\"slideThumb\" data-index=\"{{ loop.index0 }}\"><img src=\"{{ asset(ProductImage, 'save_image') }}\" alt=\"\" width=\"133\" height=\"133\" loading=\"lazy\"></div>
  1400.                         {% endfor %}
  1401.                     </div>
  1402.                 </div>
  1403.             </div>
  1404.             <div class=\"ec-grid2__cell\">
  1405.                 <div class=\"ec-productRole__profile item{{ Product.id }}\">
  1406.                     {# 商品名 #}
  1407.                     <div class=\"ec-productRole__title\">
  1408.                         <h2 class=\"ec-headingTitle\">{{ Product.name }}</h2>
  1409.                     </div>
  1410.                     {# タグ #}
  1411.                     <ul class=\"ec-productRole__tags\">
  1412.                         {% for Tag in Product.Tags %}
  1413.                             <li class=\"ec-productRole__tag tag_{{ Tag.id }}\">{{ Tag }}</li>
  1414.                         {% endfor %}
  1415.                     </ul>
  1416.                     {# 通常価格 #}
  1417.                     {% if Product.hasProductClass -%}
  1418.                         <div class=\"ec-productRole__priceRegular\">
  1419.                             {% if Product.getPrice01Min is not null and Product.getPrice01IncTaxMin == Product.getPrice01IncTaxMax %}
  1420.                                 <span class=\"ec-productRole__priceRegularPrice\">{{ '通常価格'|trans }}:<span class=\"price01-default\">{{ Product.getPrice01IncTaxMin|price }}</span></span>
  1421.                                 <span class=\"ec-productRole__priceRegularTax\">{{ '税込'|trans }}</span>
  1422.                             {% elseif Product.getPrice01Min is not null and Product.getPrice01Max is not null %}
  1423.                                 <span class=\"ec-productRole__priceRegularPrice\">{{ '通常価格'|trans }}:<span class=\"price01-default\">{{ Product.getPrice01IncTaxMin|price }}~ {{ Product.getPrice01IncTaxMax|price }}</span></span>
  1424.                                 <span class=\"ec-productRole__priceRegularTax\">{{ '税込'|trans }}</span>
  1425.                             {% endif %}
  1426.                         </div>
  1427.                     {% else %}
  1428.                         {% if Product.getPrice01Max is not null %}
  1429.                             <span class=\"ec-productRole__priceRegularPrice\">{{ '通常価格'|trans }}:{{ Product.getPrice01IncTaxMin|price }}</span>
  1430.                             <span class=\"ec-productRole__priceRegularTax\">{{ '税込'|trans }}</span>
  1431.                         {% endif %}
  1432.                     {% endif %}
  1433.                     {# 販売価格 #}
  1434.                     <div class=\"ec-productRole__price\">
  1435.                         {% if Product.hasProductClass -%}
  1436.                             {% if Product.getPrice02IncTaxMin == Product.getPrice02IncTaxMax %}
  1437.                                 <div class=\"ec-price\">
  1438.                                     <span class=\"ec-price__price price02-default\">{{ Product.getPrice02IncTaxMin|price }}</span>
  1439.                                     <span class=\"ec-price__tax\">{{ '税込'|trans }}</span>
  1440.                                 </div>
  1441.                             {% else %}
  1442.                                 <div class=\"ec-price\">
  1443.                                     <span class=\"ec-price__price price02-default\">{{ Product.getPrice02IncTaxMin|price }} ~ {{ Product.getPrice02IncTaxMax|price }}</span>
  1444.                                     <span class=\"ec-price__tax\">{{ '税込'|trans }}</span>
  1445.                                 </div>
  1446.                             {% endif %}
  1447.                         {% else %}
  1448.                             <div class=\"ec-price\">
  1449.                                 <span class=\"ec-price__price\">{{ Product.getPrice02IncTaxMin|price }}</span>
  1450.                                 <span class=\"ec-price__tax\">{{ '税込'|trans }}</span>
  1451.                             </div>
  1452.                         {% endif %}
  1453.                     </div>
  1454.                     {# 商品コード #}
  1455.                     {% if Product.code_min is not empty %}
  1456.                         <div class=\"ec-productRole__code\">
  1457.                             {{ '商品コード'|trans }}: <span class=\"product-code-default\">{{ Product.code_min }}{% if Product.code_min != Product.code_max %} ~ {{ Product.code_max }}{% endif %}</span>
  1458.                         </div>
  1459.                     {% endif %}
  1460.                     {# 関連カテゴリ #}
  1461.                     {% if Product.ProductCategories is not empty %}
  1462.                         <div class=\"ec-productRole__category\">
  1463.                             <div>{{ '関連カテゴリ'|trans }}</div>
  1464.                             {% for ProductCategory in Product.ProductCategories %}
  1465.                                 <ul>
  1466.                                     <li>
  1467.                                         {% for Category in ProductCategory.Category.path %}
  1468.                                             <a href=\"{{ url('product_list') }}?category_id={{ Category.id }}\">{{ Category.name }}</a> {%- if loop.last == false %}
  1469.                                             <span>></span>{% endif -%}
  1470.                                         {% endfor %}
  1471.                                     </li>
  1472.                                 </ul>
  1473.                             {% endfor %}
  1474.                         </div>
  1475.                     {% endif %}
  1476.                     <form action=\"{{ url('product_add_cart', {id:Product.id}) }}\" method=\"post\" id=\"form1\" name=\"form1\">
  1477.                         {% if Product.stock_find %}
  1478.                             <div class=\"ec-productRole__actions\">
  1479.                                 {% if form.classcategory_id1 is defined %}
  1480.                                     <div class=\"ec-select\">
  1481.                                         {{ form_row(form.classcategory_id1) }}
  1482.                                         {{ form_errors(form.classcategory_id1) }}
  1483.                                     </div>
  1484.                                     {% if form.classcategory_id2 is defined %}
  1485.                                         <div class=\"ec-select\">
  1486.                                             {{ form_row(form.classcategory_id2) }}
  1487.                                             {{ form_errors(form.classcategory_id2) }}
  1488.                                         </div>
  1489.                                     {% endif %}
  1490.                                 {% endif %}
  1491.                                 <div class=\"ec-numberInput\">
  1492. {{ include('Product/option.twig', ignore_missing=true) }}
  1493. <span class=\"itemnum\"></span>
  1494. \t\t\t\t    <span class=\"numlabel\">{{ '数量'|trans }}</span>
  1495. \t\t\t\t    <span class=\"numnum\">
  1496.                                     {{ form_widget(form.quantity) }}
  1497.                                     {{ form_errors(form.quantity) }}
  1498.                     </span>
  1499. </span>       
  1500.                                     
  1501.                                 </div>
  1502.                             </div>
  1503.                             <div class=\"ec-productRole__btn\">
  1504.                                 <button type=\"submit\" class=\"ec-blockBtn--action add-cart\">
  1505.                                     {{ 'カートに入れる'|trans }}
  1506.                                 </button>
  1507.                             </div>
  1508.                         {% else %}
  1509.                             <div class=\"ec-productRole__btn\">
  1510.                                 <button type=\"button\" class=\"ec-blockBtn--action\" disabled=\"disabled\">
  1511.                                     {{ 'ただいま品切れ中です。'|trans }}
  1512.                                 </button>
  1513.                             </div>
  1514.                         {% endif %}
  1515.                         {{ form_rest(form) }}
  1516.                     </form>
  1517.                     {{ include('Product/option_description.twig') }}<div class=\"ec-modal\">
  1518.                         <div class=\"ec-modal-overlay\">
  1519.                             <div class=\"ec-modal-wrap\">
  1520.                                 <span class=\"ec-modal-close\"><span class=\"ec-icon\"><img src=\"{{ asset('assets/icon/cross-dark.svg') }}\" alt=\"\"/></span></span>
  1521.                                 <div id=\"ec-modal-header\" class=\"text-center\">{{ 'カートに追加しました。'|trans }}</div>
  1522.                                 <div class=\"ec-modal-box\">
  1523.                                     <div class=\"ec-role\">
  1524.                                         <span class=\"ec-inlineBtn--cancel\">{{ 'お買い物を続ける'|trans }}</span>
  1525.                                         <a href=\"{{ url('cart') }}\" class=\"ec-inlineBtn--action\">{{ 'カートへ進む'|trans }}</a>
  1526.                                     </div>
  1527.                                 </div>
  1528.                             </div>
  1529.                         </div>
  1530.                     </div>
  1531.                     {% if BaseInfo.option_favorite_product %}
  1532.                         <form action=\"{{ url('product_add_favorite', {id:Product.id}) }}\" method=\"post\">
  1533.                             <div class=\"ec-productRole__btn\">
  1534.                                 {% if is_favorite == false %}
  1535.                                     <button type=\"submit\" id=\"favorite\" class=\"ec-blockBtn--cancel\">
  1536.                                         {{ 'お気に入りに追加'|trans }}
  1537.                                     </button>
  1538.                                 {% else %}
  1539.                                     <button type=\"submit\" id=\"favorite\" class=\"ec-blockBtn--cancel\"
  1540.                                             disabled=\"disabled\">{{ 'お気に入りに追加済です。'|trans }}
  1541.                                     </button>
  1542.                                 {% endif %}
  1543.                             </div>
  1544.                         </form>
  1545.                     {% endif %}
  1546.                     <div class=\"ec-productRole__description\">{{ Product.description_detail|raw|nl2br }}
  1547.                     </div>
  1548.                     
  1549.                     <div class=\"ec-productRole__description table\">
  1550.                         
  1551.                         
  1552.                         
  1553.                         <dl class=\"number\">
  1554.                             <dt>JANコード</dt><dd>{{ Product.ViewData(13) }}</dd>
  1555.                         </dl>
  1556.                         <dl class=\"number\">
  1557.                             <dt>規格</dt><dd>{{ Product.ViewData(10) }}</dd>
  1558.                         </dl>
  1559.                         <dl class=\"number\">
  1560.                             <dt>生産国</dt><dd>{{ Product.ViewData(11) }}</dd>
  1561.                         </dl>                    
  1562.                         <dl class=\"number\">
  1563.                             <dt>入数</dt><dd>{{ Product.ViewData(1) }}</dd>
  1564.                         </dl>
  1565.                         <dl class=\"number\">
  1566.                             <dt>販売単位</dt><dd>{{ Product.ViewData(12) }}</dd>
  1567.                         </dl>
  1568.                         
  1569.                         <table class=\"detail\">
  1570.                             <tr>
  1571.                                 <th class=\"th1\"></th>
  1572.                                 <th class=\"th2\">寸法</th>
  1573.                                 <th class=\"th3\">重量</th>
  1574.                             </tr>
  1575.                             <tr>
  1576.                                 <th>商品</th>
  1577.                                 <td>{{ Product.ViewData(2)|raw|nl2br }}</td>
  1578.                                 <td>{{ Product.ViewData(3)|raw|nl2br }}</td>
  1579.                             </tr>
  1580.                             <tr>
  1581.                                 <th>内箱</th>
  1582.                                 <td>{{ Product.ViewData(4)|raw|nl2br }}</td>
  1583.                                 <td>{{ Product.ViewData(5)|raw|nl2br }}</td>
  1584.                             </tr>
  1585.                             <tr>
  1586.                                 <th>外箱</th>
  1587.                                 <td>{{ Product.ViewData(6)|raw|nl2br }}</td>
  1588.                                 <td>{{ Product.ViewData(7)|raw|nl2br }}</td>
  1589.                             </tr>
  1590.                         </table>
  1591.                         
  1592.                         <div class=\"item_youtube\">
  1593.                         {{ Product.ViewData(9) }}
  1594.                         </div>
  1595.                     </div>
  1596.                     
  1597.                 </div>
  1598.             </div>
  1599.         </div>
  1600.         {% if Product.freearea %}
  1601.              <div class=\"ec-productRole__description\">
  1602.                  {{ include(template_from_string(Product.freearea), sandboxed = true) }}
  1603.             </div>
  1604.         {% endif %}
  1605.     </div>
  1606. {# ─── ここから「画像登録」用モーダルを1回だけ埋め込む ─── #}
  1607.   <div id=\"imageModal\" class=\"modal-overlay\" style=\"display:none;\">
  1608.     <div class=\"modal-content\">
  1609.       <button id=\"btnCancel\" type=\"button\">&times;</button>
  1610.       <div class=\"modal-body\">
  1611.         <section class=\"image-area\">
  1612.           <canvas id=\"editCanvas\" width=\"532\" height=\"532\"></canvas>
  1613.           <div class=\"confirm-area\">
  1614.             <button id=\"btnConfirm\" type=\"button\">作成完了</button>
  1615.           </div>
  1616.         </section>
  1617.         <section class=\"control-area\">
  1618.           <div>
  1619.             <button id=\"uploadBtn\" type=\"button\">画像アップロード</button>
  1620.             <button id=\"deleteBtn\"  type=\"button\" disabled>削除</button>
  1621.           </div>
  1622.           <div class=\"slider-row\">
  1623.             <label for=\"sizeSlider\">サイズ</label>
  1624.             <input type=\"range\" id=\"sizeSlider\" min=\"0\" max=\"24\" step=\"1\" value=\"12\">
  1625.           </div>
  1626.           <div class=\"slider-row\">
  1627.             <label for=\"rotateSlider\">回 転</label>
  1628.             <input type=\"range\" id=\"rotateSlider\" min=\"0\" max=\"24\" step=\"1\" value=\"12\">
  1629.           </div>
  1630.         </section>
  1631.         <section class=\"info-area\">
  1632.           <h2>画像作成機能の使い方</h2>
  1633.           <p>
  1634.             まず、[画像アップロード]ボタンを押して、画像をアップロードしてください。<br>
  1635.             サイズや回転を調整して自由にレイアウトしてください。<br>
  1636.             ドラッグして画像の表示位置を変えることもできます。<br>
  1637.             画像が完成したら[作成完了]ボタンを押して保存してください。<br>
  1638.             画像を間違った時は、[削除]ボタンで削除してやり直せます。<br>
  1639.             作成を中止して元の画面に戻りたいときは、[×]ボタンを押してください。
  1640.           </p>
  1641.         </section>
  1642.       </div>
  1643.     </div>
  1644.   </div>
  1645. {% endblock %}""__string_template__a541c069667438736670b3fc45308553""");
  1646.     }
  1647.     
  1648.     public function checkSecurity()
  1649.     {
  1650.         static $tags = array("set" => 13"if" => 108"for" => 273);
  1651.         static $filters = array("raw" => 97"json_encode" => 110"escape" => 113"trans" => 198"no_image_product" => 277"slice" => 280"replace" => 280"default" => 280"price" => 331"nl2br" => 463);
  1652.         static $functions = array("class_categories_as_json" => 97"url" => 244"asset" => 274"form_row" => 392"form_errors" => 393"include" => 403"form_widget" => 409"form_rest" => 432"template_from_string" => 519);
  1653.         try {
  1654.             $this->sandbox->checkSecurity(
  1655.                 ['set''if''for'],
  1656.                 ['raw''json_encode''escape''trans''no_image_product''slice''replace''default''price''nl2br'],
  1657.                 ['class_categories_as_json''url''asset''form_row''form_errors''include''form_widget''form_rest''template_from_string']
  1658.             );
  1659.         } catch (SecurityError $e) {
  1660.             $e->setSourceContext($this->source);
  1661.             if ($e instanceof SecurityNotAllowedTagError && isset($tags[$e->getTagName()])) {
  1662.                 $e->setTemplateLine($tags[$e->getTagName()]);
  1663.             } elseif ($e instanceof SecurityNotAllowedFilterError && isset($filters[$e->getFilterName()])) {
  1664.                 $e->setTemplateLine($filters[$e->getFilterName()]);
  1665.             } elseif ($e instanceof SecurityNotAllowedFunctionError && isset($functions[$e->getFunctionName()])) {
  1666.                 $e->setTemplateLine($functions[$e->getFunctionName()]);
  1667.             }
  1668.             throw $e;
  1669.         }
  1670.     }
  1671. }