app/template/aneros2023/Category/2026-vday-sale.twig line 125

Open in your IDE?
  1. {#
  2. This file is part of EC-CUBE
  3. Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved.
  4. http://www.ec-cube.co.jp/
  5. For the full copyright and license information, please view the LICENSE
  6. file that was distributed with this source code.
  7. #}
  8. {% extends 'default_frame.twig' %}
  9. {% block javascript %}
  10.     <script></script>
  11.     
  12.     <style>
  13.       .bf-hero-note { font-size: 14px; line-height: 1.7; margin-top: 12px; }
  14.       .bf-count { font-weight: 700; font-size: 42px; letter-spacing: .04em; color:#dd0000; }
  15.       .bf-cta a { text-decoration: underline; }
  16.       .bf-subtle { font-size: 12px; color: #666; }
  17.       .bf-section { padding: 24px 0; text-align: center; }
  18.     </style>
  19. {% endblock %}
  20. {% block main %}
  21. {% include('@CustomerReview42/Block/customer_review4_recommend_css.twig') %}
  22. {# ==== Phase gating (JST) ==== #}
  23. {% set tz = 'Asia/Tokyo' %}
  24. {# 開始/終了の日時はここだけで管理 #}
  25. {% set startAt = "2026-02-12 11:00:00"|date("U", tz) %}
  26. {% set endAt   = "2026-02-19 18:00:00"|date("U", tz) %}
  27. {% set nowTs   = "now"|date("U", tz) %}
  28. {# プレビュー強制切替(?phase=pre|live|post) #}
  29. {% set phaseOverride = app.request is defined and app.request.query.get('phase') ? app.request.query.get('phase') : null %}
  30. {% set phase = 'pre' %}
  31. {% if nowTs >= startAt and nowTs < endAt %}
  32.   {% set phase = 'live' %}
  33. {% elseif nowTs >= endAt %}
  34.   {% set phase = 'post' %}
  35. {% endif %}
  36. {% if phaseOverride in ['pre','live','post'] %}
  37.   {% set phase = phaseOverride %}
  38. {% endif %}
  39. <div class="main-container category-page" id="xmas2025">
  40.     <div class="breadcrumbs">
  41.         <div class="container">
  42.             <ul itemscope="" itemtype="http://schema.org/BreadcrumbList">
  43.                 <li class="home" itemprop="itemListElement" itemscope="" itemtype="http://schema.org/ListItem">
  44.                     <a itemprop="item" href="{{ url('homepage') }}" title="トップページ"><span itemprop="name" style="padding:0">トップページ</span></a>
  45.                     <meta itemprop="position" content="1">
  46.                     <span>&gt;</span>
  47.                 </li>
  48.                 <li><strong>バレンタインセール2026</strong></li>
  49.             </ul>
  50.         </div>
  51.     </div>
  52.     <div class="col-main">
  53.         {# =========================
  54.            PRE (開始前)
  55.            ========================= #}
  56.         {% if phase == 'pre' %}
  57.             <div class="bf-section">
  58.                 <div class="container">
  59.                     <p class="bf-hero-note">
  60.                         <strong>全アネロス14%OFF。バレンタインはドライオーガズムと共に</strong>
  61.                     </p>
  62.                     <p class="bf-subtle">1週間限定会員専用セール!</p>
  63.                     <div class="bf-count" id="bf-count" aria-live="polite">--:--:--</div>
  64.                 </div>
  65.             </div>
  66.             <div class="container">
  67.                 {#<h1 class="category-title">バレンタインセール2026</h1>#}
  68.                 <img src="{{ asset('aneros/img/category/2026-vday-sale/2026-vday-sale-list-pre.jpg') }}" alt="バレンタインセール2026" style="max-width:1000px; width:100%">
  69.             </div>
  70.             {# 予告期間はインデックスさせない場合 #}
  71.             <meta name="robots" content="noindex,follow">
  72.             <script>
  73.               (function () {
  74.                 var target = new Date("2026-02-12T11:00:00+09:00").getTime();
  75.                 var el = document.getElementById("bf-count");
  76.                 function tick() {
  77.                   var diff = target - Date.now();
  78.                   if (diff <= 0) {
  79.                     el.textContent = "00:00:00";
  80.                     setTimeout(function(){ location.reload(); }, 600);
  81.                     return;
  82.                   }
  83.                   var h = Math.floor(diff/3600000),
  84.                       m = Math.floor((diff%3600000)/60000),
  85.                       s = Math.floor((diff%60000)/1000);
  86.                   el.textContent =
  87.                     String(h).padStart(2,'0') + ":" +
  88.                     String(m).padStart(2,'0') + ":" +
  89.                     String(s).padStart(2,'0');
  90.                 }
  91.                 tick(); setInterval(tick, 1000);
  92.               })();
  93.             </script>
  94.         {# =========================
  95.            LIVE
  96.            ========================= #}
  97.         {% elseif phase == 'live' %}
  98.             <div class="container">
  99.                 {#<h1 class="category-title">バレンタインセール2026</h1>#}
  100.                 <img src="{{ asset('aneros/img/category/2026-vday-sale/2026-vday-sale-list.jpg') }}" alt="バレンタインセール2026" style="max-width:1000px; width:100%">
  101.             </div>
  102.             
  103.             <div class="category-info" style="margin-top:0px">
  104.                 <div class="container">
  105.                     <div class="category-description">
  106.                         <span style="font-weight:bold; font-size: 14px;">対象商品:</span>
  107.                     </div>
  108.                 </div>
  109.             </div>
  110.             {% set Category = repository("Eccube\\Entity\\Category").find(25) %}
  111.             {% set Order = repository("Eccube\\Entity\\Master\\ProductListOrderBy").find(0) %}
  112.             {% 
  113.                 set Products = repository('Eccube\\Entity\\Product')
  114.                 .getQueryBuilderBySearchData({'category_id':Category, 'orderby':Order})
  115.                 .getQuery()
  116.                 .getResult()
  117.             %}
  118.             <div class="ec-shelfRole container">
  119.                 <ul class="ec-shelfGrid flexbox">
  120.                     {% for Product in Products %}
  121.                         {% set campaignProduct, newProduct, limitedProduct = false, false, false %}
  122.                         {% for ProductTag in Product.ProductTag %}
  123.                             {% if ProductTag.Tag.id == 100 %}
  124.                                 {% set campaignProduct = true %}
  125.                             {% elseif ProductTag.Tag.id == 1 %}
  126.                                 {% set newProduct = true %}
  127.                             {% elseif ProductTag.Tag.id == 3 %}
  128.                                 {% set limitedProduct = true %}
  129.                             {% endif %}
  130.                         {% endfor %}
  131.                         <li class="ec-shelfGrid__item flexbox">
  132.                             <a href="{{ url('product_detail', {'id': Product.id}) }}">
  133.                             {% if campaignProduct == true %}
  134.                                 <p class="ec-shelfGrid__item-image campaignProduct">
  135.                             {% elseif newProduct == true %}
  136.                                 <p class="ec-shelfGrid__item-image newProduct">
  137.                             {% elseif limitedProduct == true %}
  138.                                 <p class="ec-shelfGrid__item-image limitedProduct">
  139.                             {% else %}
  140.                                 <p class="ec-shelfGrid__item-image">
  141.                             {% endif %}
  142.                                     <img src="{{ asset(Product.main_list_image|no_image_product, 'save_image') }}" alt="{{ Product.name }}">
  143.                                 </p>
  144.                                 <p>{{ Product.name }}</p>
  145.                             </a>
  146.                             
  147.                             <!-- REVIEW AREA -->
  148.                             {% import('@CustomerReview42/Block/customer_review4_recommend_macro.twig') as recommend_macro %}
  149.                             {% set review_list = repository('Plugin\\CustomerReview42\\Entity\\CustomerReviewTotal').getRecommend(Product.id) %}
  150.                             {% set reviewer_total = 0 %}
  151.                             {% set review_total_point = 0 %}
  152.                             {% set count = 5 %}
  153.                             {% for i in review_list %}
  154.                                 {% set reviewer_total = reviewer_total + i %}
  155.                                 {% set review_total_point = review_total_point + i * count %}
  156.                                 {% set count = count - 1 %}
  157.                             {% endfor %}
  158.                             {% set review_point = reviewer_total == 0 ? 0  : (review_total_point / reviewer_total) %}
  159.                             
  160.                             {% if 0 < reviewer_total %}
  161.                                 <div id="plg_customer_review{{Product.id}}" class="review-layoutRole product_list">
  162.                                     <h3 class="review_score" data-id="{{ Product.id }}" data-avg="{{ review_point }}" data-num="{{ reviewer_total }}" data-starsize="22" data-mstarsize="14" data-imgbase="{{ asset('aneros/img/products/') }}">
  163.                                         <span class="review_all_score_title"></span>
  164.                                         <span class="review_all_score_image" style="display: inline-block"></span>
  165.                                         <span class="review_all_score"><a href="{{ url('product_detail', {'id': Product.id}) }}#review_area"></a></span>
  166.                                     </h3>
  167.                                 </div>
  168.                             {% endif %}
  169.                             
  170.                             <script>
  171.                               $(function () {
  172.                                 if ( $('#plg_customer_review_anchor{{Product.id}}').length) {
  173.                                     $('#plg_customer_review{{Product.id}}').insertAfter($('#plg_customer_review_anchor{{Product.id}}'));
  174.                                 } else if ( $('#productForm{{Product.id}}').length) {
  175.                                     $('#plg_customer_review{{Product.id}}').insertBefore($('#productForm{{Product.id}}'));
  176.                                 } else {
  177.                                     $('#plg_customer_review{{Product.id}}').hide();
  178.                                 }
  179.                               });
  180.                             </script>
  181.                             <!-- REVIEW AREA END -->    
  182.                             
  183.                             <div class="bottom-box flexbox" id="productForm{{ Product.id }}">
  184.                             
  185.                                 <div class="price-box">
  186.                                     <span class="price">
  187.                                         <div class="normal_price" id="product-normal-price-{{ Product.id }}">
  188.                                             {% if  Product.getPrice01Min is not null and Product.getPrice01IncTaxMin != 0 %}
  189.                                                 {% if Product.hasProductClass %}
  190.                                                     {% if Product.getPrice01Min == Product.getPrice01Max %}
  191.                                                         <span class="price">{{ Product.getPrice01IncTaxMin|price }}<span class="inctax"> (税込)</span></span>
  192.                                                     {% else %}
  193.                                                         <span class="price">{{ Product.getPrice01IncTaxMin|price }}<!-- ~ {{ Product.getPrice01IncTaxMax|price }}--><span class="inctax"> (税込)</span></span>
  194.                                                     {% endif %}
  195.                                                 {% else %}
  196.                                                     <span class="price">{{ Product.getPrice01IncTaxMin|price }}<span class="inctax"> (税込)</span></span>
  197.                                                 {% endif %}
  198.                                             {% endif %}
  199.                                                 </div>
  200.                                                 <div class="sale_price" id="product-price-{{ Product.id }}">
  201.                                             {% if Product.hasProductClass %}
  202.                                                 {% if Product.getPrice02Min == Product.getPrice02Max %}
  203.                                                     <span class="price">{{ Product.getPrice02IncTaxMin|price }}<span class="inctax"> (税込)</span></span>
  204.                                                 {% else %}
  205.                                                     <span class="price">{{ Product.getPrice02IncTaxMin|price }}<!-- ~ {{ Product.getPrice02IncTaxMax|price }}--><span class="inctax"> (税込)</span></span>
  206.                                                 {% endif %}
  207.                                             {% else %}
  208.                                                 <span class="price">{{ Product.getPrice02IncTaxMin|price }}<span class="inctax"> (税込)</span></span>
  209.                                             {% endif %}
  210.                                         </div>
  211.                                     </span>
  212.                                 </div>
  213.                                 <div class="actions">
  214.                                 {% if Product.stock_find %}
  215.                                     {% if Product.hasProductClass %}
  216.                                         <a class="button btn-cart learn-more" title="商品詳細" href="{{ url('product_detail', {'id': Product.id}) }}">
  217.                                             <span>
  218.                                                 <span>商品詳細</span>
  219.                                             </span>
  220.                                         </a>
  221.                                     {% else %}
  222.                                         <button type="button" title="カゴに入れる" class="button btn-cart one-click-add-cart" 
  223.                                         data-action="{{ url('product_add_cart', {id:Product.id}) }}" 
  224.                                         data-product_id="{{ Product.id }}" data-product_name="{{ Product.name }}"  data-product_img="{{ asset(Product.main_list_image|no_image_product, 'save_image') }}"
  225.                                         data-product_class="{{ Product.ProductClasses[0].id }}" 
  226.                                         data-token="{{ csrf_token('Eccube\\Form\\Type\\AddCartType') }}">
  227.                                             <span>カゴに入れる</span>
  228.                                         </button>
  229.                                     {% endif %}
  230.                                 {% else %}
  231.                                     {% set arrivemail = true %}
  232.                                     {% for ProductTag in Product.ProductTag %}
  233.                                         {% if ProductTag.Tag.id == 99 %}
  234.                                             {% set arrivemail = false %}
  235.                                         {% endif %}
  236.                                     {% endfor %}
  237.                                     
  238.                                     {% if arrivemail %}
  239.                                         <button type="button" data-productid="{{ Product.id }}" data-productname="{{ Product.name }}" title="入荷お知らせ" class="button btn-cart add-to-mail">
  240.                                             <span>入荷お知らせ</span>
  241.                                         </button>
  242.                                     {% else %}
  243.                                         <button type="button" title="在庫切れ" class="button btn-cart add-to-cart-out">
  244.                                             <span>在庫切れ</span>
  245.                                         </button>
  246.                                     {% endif %}
  247.                                 {% endif %}
  248.                                 </div>
  249.                             </div>
  250.                         </li>
  251.                     {% endfor %}
  252.                 </ul>
  253.             </div>
  254. {#
  255.             <div class="container">
  256.                 <p><b>ヒリックスシンVも14%OFF</b></p>
  257.                 <img src="{{ asset('aneros/img/category/2026-vday-sale/2026-vday-sale-hsv.jpg') }}" alt="ヒリックスシンVも14%OFF" style="max-width:1000px; width:100%">
  258.             </div>
  259. #}
  260.         {# =========================
  261.            POST (終了後)
  262.            ========================= #}
  263.         {% else %}
  264.             <div class="container">
  265.                 {#<h1 class="category-title">バレンタインセール2026</h1>#}
  266.                 <img src="{{ asset('aneros/img/category/2026-vday-sale/2026-vday-sale-list-post.jpg') }}" alt="バレンタインセール2026にご参加ありがとうございます" style="max-width:1000px; width:100%">
  267.             </div>
  268.             <div class="bf-section">
  269.                 <div class="container">
  270.                     <p><strong>バレンタインセール2026は終了いたしました。たくさんのご参加、ありがとうございました。</strong></p>
  271.                     <p class="bf-hero-note">次回の先行案内や会員限定情報をご希望の方は、<a href="{{ url('entry') }}">会員登録</a>をご利用ください。</p>
  272.                 </div>
  273.             </div>
  274.         {% endif %}
  275.     </div>
  276.     {{ include('Block/add_to_cart.twig') }}
  277.     <div class="swooth-wrapper grey-swooth"></div>
  278. </div>
  279. {% endblock %}