custom/plugins/invokable/src/Resources/views/storefront/base.html.twig line 1

Open in your IDE?
  1. {# Set variable to "true" to enable HMR (hot page reloading) mode #}
    {% set isHMRMode = app.request.headers.get('hot-reload-mode') and app.environment == 'dev' %}
    
    {% block base_doctype %}
    <!DOCTYPE html>
    {% endblock %}
    
    {% block base_html %}
    <html lang="{{ page.header.activeLanguage.translationCode.code }}"
          itemscope="itemscope"
          itemtype="https://schema.org/WebPage">
    {% endblock %}
    
    {% block base_head %}
        {% sw_include '@Storefront/storefront/layout/meta.html.twig' %}
    {% endblock %}
    
    {% block base_body %}
        <body class="{% block base_body_classes %}is-ctl-{% if controllerName is not empty %}{{ controllerName|lower }}{% endif %} is-act-{% if controllerAction is not empty %}{{ controllerAction|lower }}{% endif %}{% endblock %}">
    
        {% block base_body_inner %}
            {% block base_noscript %}
                <noscript class="noscript-main">
                    {% sw_include '@Storefront/storefront/utilities/alert.html.twig' with {
                        type: 'info',
                        content: 'general.noscriptNotice'|trans|sw_sanitize
                    } %}
                </noscript>
            {% endblock %}
    
            {% block base_header %}
                <header class="header-main">
                    {% block base_header_inner %}
                        <div class="container">
                            {% sw_include '@Storefront/storefront/layout/header/header.html.twig' %}
                        </div>
                    {% endblock %}
                </header>
            {% endblock %}
            
            {% block base_offcanvas_navigation %}
                {% if page.header.navigation %}
                    <div class="d-none js-navigation-offcanvas-initial-content{% if context.salesChannel.navigationCategoryId == page.header.navigation.active.id %} is-root{% endif %}">
                        {% block base_offcanvas_navigation_inner %}
                            {% sw_include '@Storefront/storefront/layout/navigation/offcanvas/navigation.html.twig' with { navigation: page.header.navigation } %}
                        {% endblock %}
                    </div>
                {% endif %}
            {% endblock %}
    
            {% block base_main %}
                <main class="content-main">
                    {% block base_flashbags %}
                        <div class="flashbags container">
                            {% for type, messages in app.flashes %}
                                {% sw_include '@Storefront/storefront/utilities/alert.html.twig' with { type: type, list: messages } %}
                            {% endfor %}
                        </div>
                    {% endblock %}
    
                    {% block base_main_inner %}
                        <div class="container">
                            {% block base_main_container %}
                                <div class="container-main">
                                    {% block base_breadcrumb %}
                                        {% sw_include '@Storefront/storefront/layout/breadcrumb.html.twig' with {
                                            context: context,
                                            category: page.product.seoCategory
                                        } only %}
                                    {% endblock %}
    
                                    {% block base_content %}{% endblock %}
                                </div>
                            {% endblock %}
                        </div>
                    {% endblock %}
                </main>
            {% endblock %}
    
            {% block base_footer %}
                <footer class="footer-main">
                    {% block base_footer_inner %}
                        {% sw_include '@Storefront/storefront/layout/footer/footer.html.twig' %}
                    {% endblock %}
                </footer>
            {% endblock %}
        {% endblock %}
    
        {% block base_scroll_up %}
            {% sw_include '@Storefront/storefront/layout/scroll-up.html.twig' %}
        {% endblock %}
    
        {% block base_cookie_permission %}
            {% sw_include '@Storefront/storefront/layout/cookie/cookie-permission.html.twig' %}
        {% endblock %}
    
        {% block base_pseudo_modal %}
            {% sw_include '@Storefront/storefront/component/pseudo-modal.html.twig' %}
        {% endblock %}
    
        {% block base_body_script %}
            {% if not feature('FEATURE_NEXT_15917') %}
    
                {# @deprecated tag:v6.5.0 - Will be moved to `layout/meta.html.twig` - Use block `layout_head_javascript_token` instead #}
                {% block base_script_token %}
                {% endblock %}
    
                {# @deprecated tag:v6.5.0 - Will be moved to `layout/meta.html.twig` - Use block `layout_head_javascript_router` instead #}
                {% block base_script_router %}
                    {# Register all routes that will be needed in JavaScript to the window.router object #}
                    <script>
                        window.activeNavigationId = '{{ page.header.navigation.active.id }}';
                        window.router = {
                            'frontend.cart.offcanvas': '{{ path('frontend.cart.offcanvas') }}',
                            'frontend.cookie.offcanvas': '{{ path('frontend.cookie.offcanvas') }}',
                            'frontend.checkout.finish.page': '{{ path('frontend.checkout.finish.page') }}',
                            'frontend.checkout.info': '{{ path('frontend.checkout.info') }}',
                            'frontend.menu.offcanvas': '{{ path('frontend.menu.offcanvas') }}',
                            'frontend.cms.page': '{{ path('frontend.cms.page') }}',
                            'frontend.cms.navigation.page': '{{ path('frontend.cms.navigation.page') }}',
                            'frontend.account.addressbook': '{{ path('frontend.account.addressbook') }}',
                            {# @deprecated tag:v6.5.0 - Route frontend.csrf.generateToken will be removed. #}
                            'frontend.csrf.generateToken': '{{ path('frontend.csrf.generateToken') }}',
                            'frontend.country.country-data': '{{ path('frontend.country.country.data') }}',
                            'frontend.store-api.proxy': '{{ path('frontend.store-api.proxy') }}',
                        };
                        {# @deprecated tag:v6.5.0 - storeApiProxyToken will be removed. #}
                        window.storeApiProxyToken = '{{ sw_csrf("frontend.store-api.proxy", {"mode": "token"}) }}';
                        window.salesChannelId = '{{ app.request.attributes.get('sw-sales-channel-id') }}';
                    </script>
                {% endblock %}
    
                {# @deprecated tag:v6.5.0 - Will be moved to `layout/meta.html.twig` - Use block `layout_head_javascript_breakpoints` instead #}
                {% block base_script_breakpoints %}
                    {# Register the available viewport breakpoints the window.breakpoints object #}
                    <script>
                        {% set breakpoint = {
                            'xs': theme_config('breakpoint.xs'),
                            'sm': theme_config('breakpoint.sm'),
                            'md': theme_config('breakpoint.md'),
                            'lg': theme_config('breakpoint.lg'),
                            'xl': theme_config('breakpoint.xl')
                        } %}
    
                        {# @deprecated tag:v6.5.0 - Bootstrap v5 adds xxl breakpoint #}
                        {% if feature('v6.5.0.0') %}
                            {% set breakpoint = breakpoint|merge({
                                'xxl': theme_config('breakpoint.xxl')
                            }) %}
                        {% endif %}
    
                        window.breakpoints = {{ breakpoint|json_encode()|raw }};
                    </script>
                {% endblock %}
    
                {# @deprecated tag:v6.5.0 - Will be moved to `layout/meta.html.twig` - Use block `layout_head_javascript_csrf` instead #}
                {% block base_script_csrf %}
                    <script>
                        window.csrf = {
                            'enabled': '{{ shopware.csrfEnabled }}',
                            'mode': '{{ shopware.csrfMode }}'
                        }
                    </script>
                {% endblock %}
    
                {% if config('core.cart.wishlistEnabled') %}
                    {# @deprecated tag:v6.5.0 - Will be moved to `layout/meta.html.twig` - Use block `layout_head_javascript_wishlist_state` instead #}
                    {% block base_script_wishlist_state %}
                        <script>
                            window.customerLoggedInState = {{ context.customer is not null and not context.customer.guest ? 1 : 0 }};
    
                            window.wishlistEnabled = {{ config('core.cart.wishlistEnabled') }};
                        </script>
                    {% endblock %}
                {% endif %}
    
                {# @deprecated tag:v6.5.0 - Will be moved to `layout/meta.html.twig` - Use block `layout_head_javascript_jquery` instead #}
                {% block base_script_jquery %}
                {% endblock %}
    
                {# @deprecated tag:v6.5.0 - Will be moved to `layout/meta.html.twig` - Use block `layout_head_javascript_hmr_mode` instead #}
                {% block base_script_hmr_mode %}
                    {% if isHMRMode %}
                        <script type="text/javascript" src="/_webpack_hot_proxy_/js/vendor-node.js"></script>
                        <script type="text/javascript" src="/_webpack_hot_proxy_/js/vendor-shared.js"></script>
                        <script type="text/javascript" src="/_webpack_hot_proxy_/js/runtime.js"></script>
                        <script type="text/javascript" src="/_webpack_hot_proxy_/js/app.js"></script>
                        {# The storefront entry is a combined entry point which contains all plugins & themes #}
                        <script type="text/javascript" src="/_webpack_hot_proxy_/js/storefront.js"></script>
                    {% else %}
                        {% for file in theme_config('assets.js') %}
                            <script type="text/javascript" src="{{ asset(file, 'theme') }}"></script>
                        {% endfor %}
                    {% endif %}
                {% endblock %}
            {% endif %}
        {% endblock %}
        </body>
    {% endblock %}
    </html>