app/template/default/default_frame.twig line 1

Open in your IDE?
  1. <!doctype html>
  2. {#
  3. This file is part of EC-CUBE
  4. Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved.
  5. http://www.ec-cube.co.jp/
  6. For the full copyright and license information, please view the LICENSE
  7. file that was distributed with this source code.
  8. #}
  9. <html lang="{{ eccube_config.locale }}">
  10. <head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# product: http://ogp.me/ns/product#">
  11.     <meta http-equiv="content-language" content="{{ eccube_config.locale }}">
  12.     <meta name="google-site-verification" content="Y66QrlYcz64bHEY5gShRL_D_Uv99BsW0Q3HaQ8vBfQs" />
  13.     <meta charset="utf-8">
  14.     <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  15.     <meta name="apple-itunes-app" content="app-id=1614240545">
  16.     <meta name="eccube-csrf-token" content="{{ csrf_token(constant('Eccube\\Common\\Constant::TOKEN_NAME')) }}">
  17.     <meta name="p:domain_verify" content="f4b9dc1809d0da8bb7113d9d5b07de34"/>
  18.     <title>{{ BaseInfo.shop_name }}{% if subtitle is defined and subtitle is not empty %} / {{ subtitle }}{% elseif title is defined and title is not empty %} / {{ title }}{% endif %}</title>
  19.     {% if Page.author is not empty %}
  20.         <meta name="author" content="{{ Page.author }}">
  21.     {% endif %}
  22.     {% if Page.description is not empty %}
  23.         <meta name="description" content="{{ Page.description }}">
  24.     {% endif %}
  25.     {% if Page.keyword is not empty %}
  26.         <meta name="keywords" content="{{ Page.keyword }}">
  27.     {% endif %}
  28.     {% if Page.meta_robots is not empty %}
  29.         <meta name="robots" content="{{ Page.meta_robots }}">
  30.     {% endif %}
  31.     {% if Page.meta_tags is not empty %}
  32.         {{ include(template_from_string(Page.meta_tags)) }}
  33.     {% endif %}
  34.     <link rel="preconnect" href="https://fonts.gstatic.com">
  35.     <link rel="preconnect" href="https://maxcdn.bootstrapcdn.com">
  36.     <link rel="preconnect" href="https://use.fontawesome.com">
  37.     <link rel="preconnect" href="https://cdn.jsdelivr.net">
  38.     <link href="https://fonts.googleapis.com/css2?family=Quicksand:wght@400;600&display=swap" rel="stylesheet">
  39.     <link rel="icon" href="/favicon.ico">
  40.     <link rel="apple-touch-icon" href="/apple-touch-icon-152x152.png">
  41.     <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" media="print" onload="this.media='all'">
  42.     <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css?v=20230117" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous" media="print" onload="this.media='all'">
  43.     <link rel="stylesheet" href="//cdn.jsdelivr.net/jquery.slick/1.6.0/slick.css" media="print" onload="this.media='all'">
  44.     {% if app.request.attributes.get('_route') == 'homepage' %} 
  45.         <link rel="stylesheet" href="{{ asset('assets/css/style_homepage.css') }}">
  46.     {% else %}
  47.         <link rel="stylesheet" href="{{ asset('assets/css/style.css') }}">
  48.     {% endif %}
  49.     <link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick.css" media="print" onload="this.media='all'"/>
  50.     <link rel="stylesheet" type="text/css" href="//cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick-theme.css" media="print" onload="this.media='all'"/>
  51.     <link rel="stylesheet" type="text/css" href="{{ asset('assets/css/jquery.yycountdown.css') }}"/>
  52.     <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous" media="print" onload="this.media='all'">
  53.     <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons" media="print" onload="this.media='all'">
  54.     <script>
  55. <<<<<<< HEAD
  56.  window.difyChatbotConfig = {
  57.   token: 'bPLxsXwAWme49MB4',
  58.   inputs: {
  59.     // You can define the inputs from the Start node here
  60.     // key is the variable name
  61.     // e.g.
  62.     // name: "NAME"
  63.   },
  64.   systemVariables: {
  65.     // user_id: 'YOU CAN DEFINE USER ID HERE',
  66.     // conversation_id: 'YOU CAN DEFINE CONVERSATION ID HERE, IT MUST BE A VALID UUID',
  67.   },
  68.   userVariables: {
  69.     // avatar_url: 'YOU CAN DEFINE USER AVATAR URL HERE',
  70.     // name: 'YOU CAN DEFINE USER NAME HERE',
  71.   },
  72.  }
  73. </script>
  74. <script
  75.  src="https://udify.app/embed.min.js"
  76.  id="bPLxsXwAWme49MB4"
  77.  defer>
  78. </script>
  79. <style>
  80.   #dify-chatbot-bubble-button {
  81.     background-color: #1C64F2 !important;
  82.   }
  83.   #dify-chatbot-bubble-window {
  84.     width: 60rem !important;
  85.     height: 70rem !important;
  86.     bottom: 0 !important;
  87.     right: 0 !important;
  88.     position: fixed !important;
  89.   }
  90.   
  91.   /* Mobile: Full screen */
  92.   @media (max-width: 768px) {
  93.     #dify-chatbot-bubble-window {
  94.       width: 100vw !important;
  95.       height: 95vh !important;
  96.       top: 0 !important;
  97.       left: 0 !important;
  98.       right: 0 !important;
  99.       bottom: 0 !important;
  100.       max-width: 100% !important;
  101.       max-height: 100% !important;
  102.     }
  103.   }
  104. </style>
  105. <script>
  106.   // Disable body scroll when chatbot is open
  107.   (function() {
  108.     function disableBodyScroll() {
  109.       const chatbotWindow = document.getElementById('dify-chatbot-bubble-window');
  110.       const chatbotButton = document.getElementById('dify-chatbot-bubble-button');
  111.       
  112.       if (!chatbotWindow || !chatbotButton) return;
  113.       
  114.       // Check if chatbot is visible/open
  115.       function isChatbotOpen() {
  116.         const style = window.getComputedStyle(chatbotWindow);
  117.         return style.display !== 'none' && 
  118.                chatbotWindow.offsetHeight > 50 && 
  119.                !chatbotWindow.classList.contains('minimized');
  120.       }
  121.       
  122.       // Observer to watch for chatbot visibility changes
  123.       const observer = new MutationObserver(function() {
  124.         if (isChatbotOpen()) {
  125.           // Chatbot is open, disable body scroll
  126.           document.body.style.overflow = 'hidden';
  127.           document.documentElement.style.overflow = 'hidden';
  128.         } else {
  129.           // Chatbot is closed, enable body scroll
  130.           document.body.style.overflow = '';
  131.           document.documentElement.style.overflow = '';
  132.         }
  133.       });
  134.       
  135.       // Observe chatbot window for changes
  136.       observer.observe(chatbotWindow, {
  137.         attributes: true,
  138.         attributeFilter: ['style', 'class'],
  139.         childList: false,
  140.         subtree: false
  141.       });
  142.       
  143.       // Also check on button click
  144.       chatbotButton.addEventListener('click', function() {
  145.         setTimeout(function() {
  146.           if (isChatbotOpen()) {
  147.             document.body.style.overflow = 'hidden';
  148.             document.documentElement.style.overflow = 'hidden';
  149.           } else {
  150.             document.body.style.overflow = '';
  151.             document.documentElement.style.overflow = '';
  152.           }
  153.         }, 100);
  154.       });
  155.       
  156.       // Check initial state
  157.       setTimeout(function() {
  158.         if (isChatbotOpen()) {
  159.           document.body.style.overflow = 'hidden';
  160.           document.documentElement.style.overflow = 'hidden';
  161.         }
  162.       }, 500);
  163.     }
  164.     
  165.     // Wait for chatbot to load
  166.     if (document.readyState === 'loading') {
  167.       document.addEventListener('DOMContentLoaded', function() {
  168.         setTimeout(disableBodyScroll, 1000);
  169.       });
  170.     } else {
  171.       setTimeout(disableBodyScroll, 1000);
  172.     }
  173.     
  174.     // Also try after longer delay to ensure chatbot script is loaded
  175.     setTimeout(disableBodyScroll, 3000);
  176.   })();
  177. </script>
  178.     <script>
  179. =======
  180.     
  181. >>>>>>> feature/Kyo_14411
  182.     // Load TikTok Pixel asynchronously after page load
  183.     
  184.     window.addEventListener('load', function() {
  185.         setTimeout(function() {
  186.             !function (w, d, t) {
  187.                 w.TiktokAnalyticsObject=t;var ttq=w[t]=w[t]||[];ttq.methods=["page","track","identify","instances","debug","on","off","once","ready","alias","group","enableCookie","disableCookie","holdConsent","revokeConsent","grantConsent"],ttq.setAndDefer=function(t,e){t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}};for(var i=0;i<ttq.methods.length;i++)ttq.setAndDefer(ttq,ttq.methods[i]);ttq.instance=function(t){for(
  188.                 var e=ttq._i[t]||[],n=0;n<ttq.methods.length;n++)ttq.setAndDefer(e,ttq.methods[n]);return e},ttq.load=function(e,n){var r="https://analytics.tiktok.com/i18n/pixel/events.js",o=n&&n.partner;ttq._i=ttq._i||{},ttq._i[e]=[],ttq._i[e]._u=r,ttq._t=ttq._t||{},ttq._t[e]=+new Date,ttq._o=ttq._o||{},ttq._o[e]=n||{};n=document.createElement("script")
  189.                 ;n.type="text/javascript",n.async=!0,n.src=r+"?sdkid="+e+"&lib="+t;e=document.getElementsByTagName("script")[0];e.parentNode.insertBefore(n,e)};
  190.                 ttq.load('{{ tiktok_pixel_id }}');
  191.                 ttq.page();
  192.                 // add this before event code to all pages where PII data postback is expected and appropriate 
  193.                 ttq.identify({
  194.                 "email": "7be698d9842cd85bf022875b9801ea893ba016d5ca3a9de810a2e3f29a8c1497", // string. The email of the customer if available. It must be hashed with SHA-256 on the client side.
  195.                 "phone_number": "090a22f5a8fd35d5c83cba8b63754754b30dd6d5ae2519e0fb3f8e60914a1991", // string. The phone number of the customer if available. It must be hashed with SHA-256 on the client side.
  196.                 "external_id": "9a72c24f2fd76561729110d804c69f38a7088f2ec41fdf8fbfea20d07e8bcff8" // string. Any unique identifier, such as loyalty membership IDs, user IDs, and external cookie IDs.It must be hashed with SHA-256 on the client side.
  197.                 });
  198.                 ttq.track('CompletePayment', {
  199.                     "contents": [
  200.                         {
  201.                             "content_id": "1145", // string. ID of the product. Example: "1077218".
  202.                             "content_type": "product", // string. Either product or product_group.
  203.                             "content_name": "perfume" // string. The name of the page or product. Example: "shirt".
  204.                         }
  205.                     ],
  206.                     "value": "100", // number. Value of the order or items sold. Example: 100.
  207.                     "currency": "USD", // string. The 4217 currency code. Example: "USD".
  208.                 }, {
  209.                     "event_id": "1616318632825_357" // string. A hashed ID that can identify a unique event. Example: "1616318632825_357".
  210.                 });
  211.             }(window, document, 'ttq');
  212.         }, 1000); // Delay 1 second to prioritize page rendering
  213.     });
  214.     </script>
  215.     {% if app.user is defined and app.user is not null %}
  216.         {{ include("Chatbot/dify.twig", {'user': app.user}) }}
  217.     {% endif %}
  218.     <!-- TikTok Pixel Code End -->
  219. {% block stylesheet %}{% endblock %}
  220. <script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous" {% if app.request.attributes.get('_route') == 'homepage' %} defer {% endif %}></script>
  221.     <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.min.js" defer></script>
  222.     <script type="text/javascript" src="//code.jquery.com/jquery-migrate-1.2.1.min.js" defer></script>
  223.     <script type="text/javascript" src="//cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick.min.js" defer ></script>
  224.     <script type="text/javascript" src="{{ asset('assets/js/jquery.yycountdown.js') }}" defer></script>
  225.     <script type="text/javascript" src="{{ asset('assets/js/storeCommon.js') }}" defer></script>
  226.     <script type="text/javascript" src="{{ asset('assets/js/elementManager.js') }}" defer></script>
  227.     <script type="text/javascript" src="{{ asset('assets/js/request.js') }}" defer></script>
  228.     <script type="text/javascript" src="{{ asset('assets/js/copysize.js') }}" defer></script>
  229.     <script defer>
  230.         // Set global APP_ENV for R2 uploader
  231.         window.APP_ENV = "{{getAppEnv()}}";
  232.         document.addEventListener('DOMContentLoaded', function() {
  233.             $.ajaxSetup({
  234.                 'headers': {
  235.                     'ECCUBE-CSRF-TOKEN': $('meta[name="eccube-csrf-token"]').attr('content')
  236.                 }
  237.             });
  238.             {% set userId = app.user.id is defined ? app.user.id : 0 %}
  239.             let userId = {{ userId }}
  240.             let currentPath = window.location.pathname
  241.             $.ajax({
  242.                 url: '{{ url('access_log') }}',
  243.                 type: 'POST',
  244.                 dataType: 'json',
  245.                 data: {
  246.                     "userId": userId,
  247.                     "path": currentPath,
  248.                 },
  249.             }).done(function(response) {
  250.                 console.log("accessLog",response)
  251.             })
  252.         });
  253.     </script>
  254.     {# Layout: HEAD #}
  255.     {% if Layout.Head %}
  256.         {{ include('block.twig', {'Blocks': Layout.Head}) }}
  257.     {% endif %}
  258.     <script src="//statics.a8.net/a8sales/a8sales.js"></script>
  259.     {# プラグイン用styleseetやmetatagなど #}
  260.     {% if plugin_assets is defined %}{{ include('@admin/snippet.twig', { snippets: plugin_assets }) }}{% endif %}
  261.     <link rel="stylesheet" href="{{ asset('assets/css/customize.css', 'user_data') }}?v=202204011"><!-- test = -->
  262.     {% if app.request.attributes.get('_route') == 'homepage' %} 
  263.         <link rel="stylesheet" href="{{ asset('assets/css/default_homepage.css') }}?v={{ "now"|date("YmdHis") }}"> 
  264.     {% else %}
  265.         <link rel="stylesheet" href="{{ asset('assets/css/default.css') }}?v={{ "now"|date("YmdHis") }}">
  266.     {% endif %}
  267.     <link rel="stylesheet" href="{{ asset('assets/css/page_countdown.css') }}?v=20220915">
  268.     <link rel="stylesheet" href="{{ asset('assets/css/video_style.css') }}">
  269.     {% if body_class is not defined %}
  270.         {% set body_class = "" %}
  271.     {% endif %}
  272.     {% if 'cbd' in body_class %}
  273.         <link rel="stylesheet" href="{{ asset('assets/css/cbd.css') }}">
  274.     {% endif %}
  275.     <script type='text/javascript' src='https://js.crossees.com/csslp.js' defer></script>
  276.     {% block additional_head %}{% endblock %}
  277. </head>
  278. <body id="page_{{ app.request.get('_route') }}" class="{{ body_class|default('other_page') }}" style="{% if body_style is defined %}{{ body_style }}{% endif %}">
  279. {# Layout: BODY_AFTER #}
  280. {% if Layout.BodyAfter %}
  281.     {{ include('block.twig', {'Blocks': Layout.BodyAfter}) }}
  282. {% endif %}
  283.     {% if app.user and app.user.getRakutenUser is not null and app.user.first_login == false %}
  284.         {% include 'change_password_rakuten_member.twig' %}
  285.     {% endif %}
  286.     {% if app.user and app.user.getSupplierUser is not null and app.user.first_login == false %}
  287.         {% include 'change_password_rakuten_member.twig' %}
  288.     {% endif %}
  289.     
  290. <div class="{{ IsApp ? 'ec-layoutRole-app' :'ec-layoutRole' }}">
  291.     {# Layout: HEADER #}
  292.     {% if Layout.Header %}
  293.         <div class="ec-layoutRole__header">
  294.             {{ include('block.twig', {'Blocks': Layout.Header}) }}
  295.         </div>
  296.         <div class="ec-layoutRole__header_cz"></div>
  297.     {% endif %}
  298.     {# Layout: CONTENTS_TOP #}
  299.     {% if Layout.ContentsTop %}
  300.         <div class="ec-layoutRole__contentTop">
  301.             {{ include('block.twig', {'Blocks': Layout.ContentsTop}) }}
  302.         </div>
  303.     {% endif %}
  304.     <div class="ec-layoutRole__contents">
  305.         {# Layout: SIDE_LEFT #}
  306.         {% if Layout.SideLeft %}
  307.             <div class="ec-layoutRole__left">
  308.                 {{ include('block.twig', {'Blocks': Layout.SideLeft}) }}
  309.             </div>
  310.         {% endif %}
  311.         {% set layoutRoleMain = 'ec-layoutRole__main' %}
  312.         {% if Layout.ColumnNum == 2 %}
  313.             {% set layoutRoleMain = 'ec-layoutRole__mainWithColumn' %}
  314.         {% elseif Layout.ColumnNum == 3 %}
  315.             {% set layoutRoleMain = 'ec-layoutRole__mainBetweenColumn' %}
  316.         {% endif %}
  317.         <div class="{{ layoutRoleMain }}">
  318.             {# Layout: MAIN_TOP #}
  319.             {% if Layout.MainTop %}
  320.                 <div class="ec-layoutRole__mainTop">
  321.                     {{ include('block.twig', {'Blocks': Layout.MainTop}) }}
  322.                 </div>
  323.             {% endif %}
  324.             {# MAIN AREA #}
  325.             {% block main %}{% endblock %}
  326.             {# Layout: MAIN_Bottom #}
  327.             {% if Layout.MainBottom %}
  328.                 <div class="ec-layoutRole__mainBottom">
  329.                     {{ include('block.twig', {'Blocks': Layout.MainBottom}) }}
  330.                 </div>
  331.             {% endif %}
  332.         </div>
  333.         {# Layout: SIDE_RIGHT #}
  334.         {% if Layout.SideRight %}
  335.             <div class="ec-layoutRole__right">
  336.                 {{ include('block.twig', {'Blocks': Layout.SideRight}) }}
  337.             </div>
  338.         {% endif %}
  339.     </div>
  340.     {# Layout: CONTENTS_BOTTOM #}
  341.     {% if Layout.ContentsBottom %}
  342.         <div class="ec-layoutRole__contentBottom">
  343.             {{ include('block.twig', {'Blocks': Layout.ContentsBottom}) }}
  344.         </div>
  345.     {% endif %}
  346.     {# Layout: CONTENTS_FOOTER #}
  347.     {% if Layout.Footer %}
  348.         <div class="ec-layoutRole__footer">
  349.             {{ include('block.twig', {'Blocks': Layout.Footer}) }}
  350.         </div>
  351.     {% endif %}
  352. </div><!-- ec-layoutRole -->
  353. <div class="ec-overlayRole"></div>
  354. <div class="ec-drawerRoleClose"><i class="fas fa-times"></i></div>
  355. <div class="ec-drawerRole">
  356.     {# Layout: DRAWER #}
  357.     {% if Layout.Drawer %}
  358.         {{ include('block.twig', {'Blocks': Layout.Drawer}) }}
  359.     {% endif %}
  360. </div>
  361. <div id="FixedLineBtn" style="display:none">
  362.     <div id="FixedLineDiv">
  363.         {# <a href="https://lin.ee/28rac17" target="_blank"><img loading="lazy"  id="FixedLineBtnImg" src="/html/user_data/assets/img/lineBtn/LineBtn.png" alt="LINEボタン"></a> #}
  364.         <a href="https://lin.ee/28rac17" target="_blank"><img loading="lazy"  id="FixedLineBtnImg" src="{{ getR2ImageUrl('LineBtn.png', 'user_data/assets/img/lineBtn') }}" alt="LINEボタン"></a>
  365.         {# <img loading="lazy"  id="FixedLineBtnClose" src="/html/user_data/assets/img/lineBtn/LineClose.png" alt="閉じる"> #}
  366.         <img loading="lazy"  id="FixedLineBtnClose" src="{{ getR2ImageUrl('LineClose.png', 'user_data/assets/img/lineBtn') }}" alt="閉じる">
  367.     </div>
  368. </div>
  369. <div class="ec-blockTopBtn pagetop"><i class="fas fa-chevron-circle-up"></i></div>
  370. <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" defer></script>
  371. <script src="https://cdn.jsdelivr.net/jquery.slick/1.6.0/slick.min.js" defer></script>
  372. {% include('@common/lang.twig') %}
  373. <script src="{{ asset('assets/js/function.min.js') }}?v=2023-01-29" defer></script>
  374. <script src="{{ asset('assets/js/eccube.js') }}" defer></script>
  375. {% block javascript %}{% endblock %}
  376. {# Layout: CLOSE_BODY_BEFORE #}
  377. {% if Layout.CloseBodyBefore %}
  378.     {{ include('block.twig', {'Blocks': Layout.CloseBodyBefore}) }}
  379. {% endif %}
  380. {# プラグイン用Snippet #}
  381. {% if plugin_snippets is defined %}
  382.     {{ include('snippet.twig', { snippets: plugin_snippets }) }}
  383. {% endif %}
  384.     <script src="{{ asset('assets/js/customize.js', 'user_data') }}?v20220128" defer></script>
  385. </body>
  386. </html>