| @@ -16,4 +16,5 @@ | |||
| @import 'page/checkout/register'; | |||
| @import 'page/checkout/cart'; | |||
| @import 'page/product-detail/product-detail'; | |||
| @import 'page/product-detail/tabs'; | |||
| @import 'page/product-detail/review'; | |||
| @@ -94,8 +94,14 @@ | |||
| &.icon-instagram { | |||
| padding: 5px; | |||
| } | |||
| } | |||
| svg { | |||
| color: $sw-color-brand-primary; | |||
| svg { | |||
| color: $sw-color-brand-primary; | |||
| } | |||
| &:hover { | |||
| background-color: $sw-color-brand-primary; | |||
| svg { | |||
| color: #fff; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -2,7 +2,7 @@ | |||
| .product-detail-media { | |||
| padding-right: 40px; | |||
| .gallery-slider-image { | |||
| width: 100%; | |||
| width: 100%; | |||
| } | |||
| .aku-cms-factory-element { | |||
| display: flex; | |||
| @@ -20,7 +20,7 @@ | |||
| padding: 9px 9px 6px 9px; | |||
| transition: border 0.2s ease-in-out; | |||
| &.active { | |||
| border-color: #b1c3d9; | |||
| border-color: #b1c3d9; | |||
| } | |||
| img { | |||
| width: 55px; | |||
| @@ -69,12 +69,12 @@ | |||
| } | |||
| } | |||
| .modal-content { | |||
| .modal-title { | |||
| margin-bottom: 10px; | |||
| } | |||
| h2 { | |||
| margin-top: 25px; | |||
| } | |||
| .modal-title { | |||
| margin-bottom: 10px; | |||
| } | |||
| h2 { | |||
| margin-top: 25px; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -84,15 +84,20 @@ | |||
| background-color: #E9F4FC; | |||
| padding-top: 40px; | |||
| .product-detail-short-description { | |||
| border-bottom: 1px solid #B1C3D9; | |||
| border-bottom: 1px solid #B1C3D9; | |||
| } | |||
| .product-detail-name { | |||
| font-size: 60px; | |||
| line-height: 54px; | |||
| color: $sw-color-brand-primary; | |||
| } | |||
| .product-detail-price-container { | |||
| display: flex; | |||
| align-items: baseline; | |||
| } | |||
| .product-detail-price { | |||
| color: $sw-color-brand-primary; | |||
| margin-right: 15px; | |||
| } | |||
| .product-detail-tax-link { | |||
| color: #222; | |||
| @@ -101,6 +106,19 @@ | |||
| text-decoration: none; | |||
| } | |||
| } | |||
| .product-detail-form-container { | |||
| padding: 35px 0; | |||
| margin-top: 25px; | |||
| border-top: 1px solid #B1C3D9; | |||
| border-bottom: 1px solid #B1C3D9; | |||
| } | |||
| .product-detail-delivery-information { | |||
| margin-bottom: 0; | |||
| } | |||
| .product-wishlist { | |||
| border-top: 1px solid #B1C3D9; | |||
| padding: 25px 0; | |||
| } | |||
| .btn-primary { | |||
| background: transparent; | |||
| color: $sw-color-brand-primary; | |||
| @@ -117,5 +135,11 @@ | |||
| color: #fff; | |||
| } | |||
| } | |||
| .product-wishlist-btn-content { | |||
| text-decoration: none; | |||
| &:hover { | |||
| text-decoration: underline; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,26 @@ | |||
| .cms-block-product-description-reviews .cms-block-container { | |||
| background: #e9f4fc; | |||
| padding-top: 3rem; | |||
| padding-bottom: 3rem; | |||
| color: #222; | |||
| } | |||
| .card-tabs { | |||
| .nav-link { | |||
| text-transform: uppercase; | |||
| letter-spacing: 1.6px; | |||
| } | |||
| .tab-content { | |||
| h2 { | |||
| font-family: $sw-font-family-base; | |||
| font-size: 1.375rem; | |||
| font-weight: 500; | |||
| color: #222; | |||
| } | |||
| h3, h4, h5, h6 { | |||
| color: #222; | |||
| } | |||
| .product-detail-description-text { | |||
| max-width: 900px; | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,46 @@ | |||
| {% sw_extends '@Storefront/storefront/component/buy-widget/buy-widget-price.html.twig' %} | |||
| {% block buy_widget_price_content %} | |||
| {% set listPrice = price.listPrice %} | |||
| <p class="product-detail-price{% if listPrice.percentage > 0 %} with-list-price{% endif %}"> | |||
| {{ price.unitPrice|currency }}{{ "general.star"|trans|sw_sanitize }} | |||
| </p> | |||
| {% set weekProductCount = 0 %} | |||
| {% if (product.customFields.custom_weightlossplan_day1_image != null) %}{% set weekProductCount = weekProductCount + 1 %}{% endif %} | |||
| {% if (product.customFields.custom_weightlossplan_day2_image != null) %}{% set weekProductCount = weekProductCount + 1 %}{% endif %} | |||
| {% if (product.customFields.custom_weightlossplan_day3_image != null) %}{% set weekProductCount = weekProductCount + 1 %}{% endif %} | |||
| {% if (product.customFields.custom_weightlossplan_day4_image != null) %}{% set weekProductCount = weekProductCount + 1 %}{% endif %} | |||
| {% if (product.customFields.custom_weightlossplan_day5_image != null) %}{% set weekProductCount = weekProductCount + 1 %}{% endif %} | |||
| {% if (product.customFields.custom_weightlossplan_day6_image != null) %}{% set weekProductCount = weekProductCount + 1 %}{% endif %} | |||
| {% if weekProductCount >= 1 %} | |||
| <span class="spwn-week-count"><small>{{ (price.unitPrice / weekProductCount) | json_encode() | round(2) | number_format(2, ',', '.') }} € pro Tag</small></span> | |||
| {% endif %} | |||
| {% if listPrice.percentage > 0 %} | |||
| {% block buy_widget_was_price %} | |||
| {% block buy_widget_was_price_badge %} | |||
| <span class="list-price-badge">%</span> | |||
| {% endblock %} | |||
| {% set afterListPriceSnippetExists = "listing.afterListPrice"|trans|length > 0 %} | |||
| {% set beforeListPriceSnippetExists = "listing.beforeListPrice"|trans|length > 0 %} | |||
| {% block buy_widget_was_price_wrapper %} | |||
| <span class="product-detail-list-price-wrapper"> | |||
| {% if beforeListPriceSnippetExists %}{{"listing.beforeListPrice"|trans|trim}}{% endif %} | |||
| <span{% if not (afterListPriceSnippetExists or beforeListPriceSnippetExists) %} class="list-price-price"{% endif %}>{{ listPrice.price|currency }}{{ "general.star"|trans|sw_sanitize }}</span> | |||
| {% if afterListPriceSnippetExists %} | |||
| {{"listing.afterListPrice"|trans|trim}} | |||
| {% endif %} | |||
| <span class="list-price-percentage">{{ "detail.listPricePercentage"|trans({'%price%': listPrice.percentage })|sw_sanitize }}</span> | |||
| </span> | |||
| {% endblock %} | |||
| {% endblock %} | |||
| {% endif %} | |||
| {% endblock %} | |||
| @@ -1,21 +1,209 @@ | |||
| {% sw_extends '@Storefront/storefront/component/buy-widget/buy-widget.html.twig' %} | |||
| {% block buy_widget_price %} | |||
| <div class="product-detail-price-container"> | |||
| {% if page.product.translated.customFields.deposittype %} | |||
| <div class="product-detail-deposittype"> | |||
| {{ page.product.translated.customFields.deposittype }} | |||
| </div> | |||
| {% block buy_widget %} | |||
| <div class="product-detail-buy{% if elementId %}-{{ elementId }}{% endif %} js-magnifier-zoom-image-container"> | |||
| {% block buy_widget_rich_snippets %} | |||
| {% block buy_widget_rich_snippets_brand %} | |||
| {% if product.manufacturer %} | |||
| <meta itemprop="brand" | |||
| content="{{ product.manufacturer.translated.name }}"/> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% block buy_widget_rich_snippets_gtin13 %} | |||
| {% if product.ean %} | |||
| <meta itemprop="gtin13" | |||
| content="{{ product.ean }}"/> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% block buy_widget_rich_snippets_mpn %} | |||
| {% if product.manufacturerNumber %} | |||
| <meta itemprop="mpn" | |||
| content="{{ product.manufacturerNumber }}"/> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% block buy_widget_rich_snippets_weight %} | |||
| {% if product.weight %} | |||
| <meta itemprop="weight" | |||
| content="{{ product.weight }} kg"/> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% block buy_widget_rich_snippets_height %} | |||
| {% if product.height %} | |||
| <meta itemprop="height" | |||
| content="{{ product.height }} mm"/> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% block buy_widget_rich_snippets_width %} | |||
| {% if product.width %} | |||
| <meta itemprop="width" | |||
| content="{{ product.width }} mm"/> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% block buy_widget_rich_snippets_depth %} | |||
| {% if product.length %} | |||
| <meta itemprop="depth" | |||
| content="{{ product.length }} mm"/> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% block buy_widget_rich_snippets_release_date %} | |||
| <meta itemprop="releaseDate" | |||
| content="{{ product.releaseDate|format_date(pattern="Y-MM-dd", locale=app.request.locale) }}"/> | |||
| {% endblock %} | |||
| {% endblock %} | |||
| {% if not feature('FEATURE_NEXT_16992') %} | |||
| {# @deprecated tag:v6.5.0 tag:)(FEATURE_NEXT_16992) - Block will be removed in v6.5.0 #} | |||
| {% block buy_widget_not_available %} | |||
| {% endblock %} | |||
| {% endif %} | |||
| {{ parent() }} | |||
| {% if page.product.translated.customFields.deposit %} | |||
| {% set deposit = page.product.translated.customFields.deposit|currency %} | |||
| <div class="product-detail-deposit"> | |||
| {{ "FlowsiteDepositSystemBasic.plusDeposit"|trans({ | |||
| '%deposit%': deposit | |||
| })|sw_sanitize }} | |||
| {% block buy_widget_buy_container %} | |||
| <div itemprop="offers" | |||
| itemscope | |||
| itemtype="{% if product.calculatedPrices|length > 1 %}http://schema.org/AggregateOffer{% else %}http://schema.org/Offer{% endif %}"> | |||
| {% block buy_widget_data %} | |||
| {% block buy_widget_data_rich_snippet_url %} | |||
| <meta itemprop="url" | |||
| content="{{ seoUrl('frontend.detail.page', { productId: product.id }) }}"/> | |||
| {% endblock %} | |||
| {% block buy_widget_data_rich_snippet_price_range %} | |||
| {% if product.calculatedPrices|length > 1 %} | |||
| {% set lowestPrice = false %} | |||
| {% set highestPrice = false %} | |||
| {% for price in product.calculatedPrices %} | |||
| {% if not lowestPrice or price.unitPrice < lowestPrice %} | |||
| {% set lowestPrice = price.unitPrice %} | |||
| {% endif %} | |||
| {% if not highestPrice or price.unitPrice > highestPrice %} | |||
| {% set highestPrice = price.unitPrice %} | |||
| {% endif %} | |||
| {% endfor %} | |||
| <meta itemprop="lowPrice" content="{{ lowestPrice }}"/> | |||
| <meta itemprop="highPrice" content="{{ highestPrice }}"/> | |||
| <meta itemprop="offerCount" content="{{ product.calculatedPrices|length }}"/> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% block buy_widget_data_rich_snippet_price_currency %} | |||
| <meta itemprop="priceCurrency" | |||
| content="{{ context.currency.translated.shortName }}"/> | |||
| {% endblock %} | |||
| {% block buy_widget_price %} | |||
| <div class="product-detail-price-container"> | |||
| {% sw_include '@Storefront/storefront/component/buy-widget/buy-widget-price.html.twig' %} | |||
| </div> | |||
| {% endblock %} | |||
| {% block buy_widget_tax %} | |||
| <div class="product-detail-tax-container"> | |||
| {% if context.taxState == "gross" %} | |||
| {% set taxText = "general.grossTaxInformation"|trans|sw_sanitize %} | |||
| {% else %} | |||
| {% set taxText = "general.netTaxInformation"|trans|sw_sanitize %} | |||
| {% endif %} | |||
| <p class="product-detail-tax"> | |||
| {% block buy_widget_tax_link %} | |||
| <a class="product-detail-tax-link" | |||
| href="{{ path('frontend.cms.page',{ id: config('core.basicInformation.shippingPaymentInfoPage') }) }}" | |||
| title="{{ taxText }}" | |||
| data-toggle="modal" | |||
| data-url="{{ path('frontend.cms.page',{ id: config('core.basicInformation.shippingPaymentInfoPage') }) }}"> | |||
| {{ taxText }} | |||
| </a> | |||
| {% endblock %} | |||
| </p> | |||
| </div> | |||
| {% endblock %} | |||
| {% block buy_widget_deposit %} | |||
| {% if page.product.translated.customFields.deposit %} | |||
| {% set deposit = page.product.translated.customFields.deposit|currency %} | |||
| <div class="product-detail-deposit"> | |||
| {{ "FlowsiteDepositSystemBasic.plusDeposit"|trans({ | |||
| '%deposit%': deposit | |||
| })|sw_sanitize }} | |||
| </div> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% set remoteClickOptions = { | |||
| selector: "#review-tab-" ~ product.id, | |||
| scrollToElement: true | |||
| } %} | |||
| {% set reviewTabHref = "#review-tab-" ~ product.id ~ "-pane" %} | |||
| {% block buy_widget_reviews %} | |||
| {% if product.ratingAverage > 0 and totalReviews > 0 and config('core.listing.showReview') %} | |||
| <div class="product-detail-reviews"> | |||
| {% sw_include '@Storefront/storefront/component/review/rating.html.twig' with { | |||
| points: product.ratingAverage, | |||
| style: 'text-primary' | |||
| } %} | |||
| <a data-toggle="tab" | |||
| class="product-detail-reviews-link" | |||
| data-offcanvas-tabs="true" | |||
| data-remote-click="true" | |||
| data-remote-click-options='{{ remoteClickOptions|json_encode }}' | |||
| href="{{ reviewTabHref }}" | |||
| aria-controls="review-tab-pane"> | |||
| {{ totalReviews }} | |||
| {{ "detail.reviewLinkText"|trans({'%count%': totalReviews})|sw_sanitize }} | |||
| </a> | |||
| </div> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% endblock %} | |||
| {% block buy_widget_configurator_include %} | |||
| {% if product.parentId and configuratorSettings|length > 0 %} | |||
| <div class="product-detail-configurator-container"> | |||
| {% sw_include '@Storefront/storefront/component/buy-widget/configurator.html.twig' %} | |||
| </div> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% block buy_widget_buy_form %} | |||
| {% if product.active %} | |||
| <div class="product-detail-form-container"> | |||
| {% sw_include '@Storefront/storefront/component/buy-widget/buy-widget-form.html.twig' %} | |||
| </div> | |||
| {% endif %} | |||
| {% endblock %} | |||
| </div> | |||
| {% endblock %} | |||
| {% block buy_widget_delivery_informations %} | |||
| <div class="product-detail-delivery-information"> | |||
| {% sw_include '@Storefront/storefront/component/delivery-information.html.twig' %} | |||
| </div> | |||
| {% endblock %} | |||
| {% if config('core.cart.wishlistEnabled') %} | |||
| {% block buy_widget_wishlist %} | |||
| {% sw_include '@Storefront/storefront/component/product/card/wishlist.html.twig' with { | |||
| showText: true, | |||
| size: 'md', | |||
| productId: product.id | |||
| } %} | |||
| {% endblock %} | |||
| {% endif %} | |||
| {% block buy_widget_ordernumber_container %} | |||
| {% endblock %} | |||
| </div> | |||
| {% endblock %} | |||
| @@ -61,3 +61,6 @@ | |||
| </div> | |||
| </div> | |||
| {% endblock %} | |||
| {% block page_checkout_cart_shipping_costs %} | |||
| {% endblock %} | |||
| @@ -0,0 +1,35 @@ | |||
| {% sw_extends '@Storefront/storefront/page/product-detail/buy-widget-price.html.twig' %} | |||
| {% block page_product_detail_price_content %} | |||
| {% set listPrice = price.listPrice %} | |||
| <p class="product-detail-price{% if listPrice.percentage > 0 %} with-list-price{% endif %}"> | |||
| {{ price.unitPrice|currency }}{{ "general.star"|trans|sw_sanitize }} | |||
| </p> | |||
| {% if listPrice.percentage > 0 %} | |||
| {% block page_product_detail_was_price %} | |||
| {% block page_product_detail_was_price_badge %} | |||
| <span class="list-price-badge">%</span> | |||
| {% endblock %} | |||
| {% set afterListPriceSnippetExists = "listing.afterListPrice"|trans|length > 0 %} | |||
| {% set beforeListPriceSnippetExists = "listing.beforeListPrice"|trans|length > 0 %} | |||
| {% block page_product_detail_was_price_wrapper %} | |||
| <span class="product-detail-list-price-wrapper"> | |||
| {% if beforeListPriceSnippetExists %}{{"listing.beforeListPrice"|trans|trim}}{% endif %} | |||
| <span{% if not (afterListPriceSnippetExists or beforeListPriceSnippetExists) %} class="list-price-price"{% endif %}>{{ listPrice.price|currency }}{{ "general.star"|trans|sw_sanitize }}</span> | |||
| {% if afterListPriceSnippetExists %} | |||
| {{"listing.afterListPrice"|trans|trim}} | |||
| {% endif %} | |||
| <span class="list-price-percentage">{{ "detail.listPricePercentage"|trans({'%price%': listPrice.percentage })|sw_sanitize }}</span> | |||
| </span> | |||
| {% endblock %} | |||
| {% endblock %} | |||
| {% endif %} | |||
| {% endblock %} | |||
| @@ -0,0 +1,207 @@ | |||
| {% sw_extends '@Storefront/storefront/page/product-detail/buy-widget.html.twig' %} | |||
| {% block page_product_detail_buy_inner %} | |||
| <div class="js-magnifier-zoom-image-container"> | |||
| {% block page_product_detail_rich_snippets %} | |||
| {% block page_product_detail_rich_snippets_brand %} | |||
| {% if page.product.manufacturer %} | |||
| <meta itemprop="brand" | |||
| content="{{ page.product.manufacturer.translated.name }}"/> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% block page_product_detail_rich_snippets_gtin13 %} | |||
| {% if page.product.ean %} | |||
| <meta itemprop="gtin13" | |||
| content="{{ page.product.ean }}"/> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% block page_product_detail_rich_snippets_mpn %} | |||
| {% if page.product.manufacturerNumber %} | |||
| <meta itemprop="mpn" | |||
| content="{{ page.product.manufacturerNumber }}"/> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% block page_product_detail_rich_snippets_weight %} | |||
| {% if page.product.weight %} | |||
| <meta itemprop="weight" | |||
| content="{{ page.product.weight }} kg"/> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% block page_product_detail_rich_snippets_height %} | |||
| {% if page.product.height %} | |||
| <meta itemprop="height" | |||
| content="{{ page.product.height }} mm"/> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% block page_product_detail_rich_snippets_width %} | |||
| {% if page.product.width %} | |||
| <meta itemprop="width" | |||
| content="{{ page.product.width }} mm"/> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% block page_product_detail_rich_snippets_depth %} | |||
| {% if page.product.length %} | |||
| <meta itemprop="depth" | |||
| content="{{ page.product.length }} mm"/> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% block page_product_detail_rich_snippets_release_date %} | |||
| <meta itemprop="releaseDate" | |||
| content="{{ page.product.releaseDate|format_date(pattern="Y-MM-dd", locale=app.request.locale) }}"/> | |||
| {% endblock %} | |||
| {% endblock %} | |||
| {% if not feature('FEATURE_NEXT_16992') %} | |||
| {# @deprecated tag:v6.5.0 tag:)(FEATURE_NEXT_16992) - Block will be removed in v6.5.0 #} | |||
| {% block page_product_detail_not_available %} | |||
| {% endblock %} | |||
| {% endif %} | |||
| {% block page_product_detail_buy_container %} | |||
| <div itemprop="offers" | |||
| itemscope | |||
| itemtype="{% if page.product.calculatedPrices|length > 1 %}http://schema.org/AggregateOffer{% else %}http://schema.org/Offer{% endif %}"> | |||
| {% block page_product_detail_data %} | |||
| {% block page_product_detail_data_rich_snippet_url %} | |||
| <meta itemprop="url" | |||
| content="{{ seoUrl('frontend.detail.page', { productId: page.product.id }) }}"/> | |||
| {% endblock %} | |||
| {% block page_product_detail_data_rich_snippet_price_range %} | |||
| {% if page.product.calculatedPrices|length > 1 %} | |||
| {% set lowestPrice = false %} | |||
| {% set highestPrice = false %} | |||
| {% for price in page.product.calculatedPrices %} | |||
| {% if not lowestPrice or price.unitPrice < lowestPrice %} | |||
| {% set lowestPrice = price.unitPrice %} | |||
| {% endif %} | |||
| {% if not highestPrice or price.unitPrice > highestPrice %} | |||
| {% set highestPrice = price.unitPrice %} | |||
| {% endif %} | |||
| {% endfor %} | |||
| <meta itemprop="lowPrice" content="{{ lowestPrice }}"/> | |||
| <meta itemprop="highPrice" content="{{ highestPrice }}"/> | |||
| <meta itemprop="offerCount" content="{{ page.product.calculatedPrices|length }}"/> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% block page_product_detail_data_rich_snippet_price_currency %} | |||
| <meta itemprop="priceCurrency" | |||
| content="{{ context.currency.translated.shortName }}"/> | |||
| {% endblock %} | |||
| {% block page_product_detail_price %} | |||
| <div class="product-detail-price-container"> | |||
| {% sw_include '@Storefront/storefront/page/product-detail/buy-widget-price.html.twig' %} | |||
| </div> | |||
| {% endblock %} | |||
| {% block page_product_detail_tax %} | |||
| <div class="product-detail-tax-container"> | |||
| {% if context.taxState == "gross" %} | |||
| {% set taxText = "general.grossTaxInformation"|trans|sw_sanitize %} | |||
| {% else %} | |||
| {% set taxText = "general.netTaxInformation"|trans|sw_sanitize %} | |||
| {% endif %} | |||
| <p class="product-detail-tax"> | |||
| {% block page_product_detail_tax_link %} | |||
| <a class="product-detail-tax-link" | |||
| href="{{ path('frontend.cms.page',{ id: config('core.basicInformation.shippingPaymentInfoPage') }) }}" | |||
| title="{{ taxText }}" | |||
| data-toggle="modal" | |||
| data-url="{{ path('frontend.cms.page',{ id: config('core.basicInformation.shippingPaymentInfoPage') }) }}"> | |||
| {{ taxText }} | |||
| </a> | |||
| {% endblock %} | |||
| </p> | |||
| </div> | |||
| {% endblock %} | |||
| {% block page_product_detail_deposit %} | |||
| {% if page.product.translated.customFields.deposit %} | |||
| {% set deposit = page.product.translated.customFields.deposit|currency %} | |||
| <div class="product-detail-deposit"> | |||
| {{ "FlowsiteDepositSystemBasic.plusDeposit"|trans({ | |||
| '%deposit%': deposit | |||
| })|sw_sanitize }} | |||
| </div> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% set remoteClickOptions = { | |||
| selector: "#review-tab", | |||
| scrollToElement: true | |||
| } %} | |||
| {% block page_product_detail_reviews %} | |||
| {% if page.product.ratingAverage > 0 and page.reviews.totalReviews > 0 and config('core.listing.showReview') %} | |||
| <div class="product-detail-reviews"> | |||
| {% sw_include '@Storefront/storefront/component/review/rating.html.twig' with { | |||
| points: page.product.ratingAverage, | |||
| style: 'text-primary' | |||
| } %} | |||
| <a data-toggle="tab" | |||
| class="product-detail-reviews-link" | |||
| data-offcanvas-tabs="true" | |||
| data-remote-click="true" | |||
| data-remote-click-options='{{ remoteClickOptions|json_encode }}' | |||
| href="#review-tab-pane" | |||
| aria-controls="review-tab-pane"> | |||
| {{ page.reviews.totalReviews }} | |||
| {{ "detail.reviewLinkText"|trans({'%count%': page.reviews.totalReviews})|sw_sanitize }} | |||
| </a> | |||
| </div> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% endblock %} | |||
| {% block page_product_detail_configurator_include %} | |||
| {% if page.product.parentId and page.configuratorSettings|length > 0 %} | |||
| <div class="product-detail-configurator-container"> | |||
| {% sw_include '@Storefront/storefront/page/product-detail/configurator.html.twig' %} | |||
| </div> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% block page_product_detail_buy_form %} | |||
| {% if page.product.active %} | |||
| <div class="product-detail-form-container"> | |||
| {% sw_include '@Storefront/storefront/page/product-detail/buy-widget-form.html.twig' %} | |||
| </div> | |||
| {% endif %} | |||
| {% endblock %} | |||
| </div> | |||
| {% endblock %} | |||
| {% block page_product_detail_delivery_informations %} | |||
| <div class="product-detail-delivery-information"> | |||
| {% sw_include '@Storefront/storefront/component/delivery-information.html.twig' %} | |||
| </div> | |||
| {% endblock %} | |||
| {% if config('core.cart.wishlistEnabled') %} | |||
| {% block page_product_detail_wishlist %} | |||
| {% sw_include '@Storefront/storefront/component/product/card/wishlist.html.twig' with { | |||
| showText: true, | |||
| size: 'md', | |||
| productId: page.product.id | |||
| } %} | |||
| {% endblock %} | |||
| {% endif %} | |||
| {% block page_product_detail_ordernumber_container %} | |||
| {% endblock %} | |||
| </div> | |||
| {% endblock %} | |||
| @@ -0,0 +1,39 @@ | |||
| {% sw_extends '@Storefront/storefront/page/product-detail/tabs.html.twig' %} | |||
| {% block zen_page_product_detail_tabs_navigation_custom_tab_global %} | |||
| {% if page.product.translated.customFields.custom_nutrition_energy_kcal|length > 0 %} | |||
| {% set customTab = { | |||
| 'translated': { | |||
| title: "zentheme.atmos.content.customTabTitle"|trans({"%placeholder%": config('zenitPlatformAtmos.config.customTabTitle')}), | |||
| text: "zentheme.atmos.content.customTabText"|trans({"%placeholder%": config('zenitPlatformAtmos.config.customTabText')}) | |||
| } | |||
| } %} | |||
| <li class="nav-item"> | |||
| <a class="nav-link product-detail-tab-navigation-link" | |||
| id="custom-field-global-tab" | |||
| data-toggle="tab" | |||
| data-offcanvas-tabs="true" | |||
| href="#custom-field-global-tab-pane" | |||
| role="tab" | |||
| aria-controls="custom-field-global-tab-pane" | |||
| aria-selected="false"> | |||
| <span>{{ customTab.translated.title }}</span> | |||
| <span class="product-detail-tab-navigation-icon"> | |||
| {% sw_icon 'arrow-medium-right' style {'pack':'solid'} %} | |||
| </span> | |||
| </a> | |||
| </li> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% block zen_page_product_detail_tabs_content_custom_tab_global %} | |||
| {% if page.product.translated.customFields.custom_nutrition_energy_kcal|length > 0 %} | |||
| <div class="tab-pane fade show" | |||
| id="custom-field-global-tab-pane" | |||
| role="tabpanel" | |||
| aria-labelledby="custom-field-global-tab"> | |||
| {% sw_include '@Storefront/storefront/page/product-detail/zen-custom-global-tab.html.twig' %} | |||
| </div> | |||
| {% endif %} | |||
| {% endblock %} | |||
| @@ -0,0 +1,89 @@ | |||
| {% sw_extends '@Storefront/storefront/utilities/offcanvas.html.twig' %} | |||
| {% block utilities_offcanvas_content %} | |||
| {% block zen_page_product_detail_custom_field_global_container %} | |||
| <div class="product-detail-custom-field1 tab-pane-container"> | |||
| {% set customTab = { | |||
| 'translated': { | |||
| title: "zentheme.atmos.content.customTabTitle"|trans({"%placeholder%": config('zenitPlatformAtmos.config.customTabTitle')}), | |||
| text: "zentheme.atmos.content.customTabText"|trans({"%placeholder%": config('zenitPlatformAtmos.config.customTabText')}) | |||
| } | |||
| } %} | |||
| {% block zen_page_product_detail_custom_field_global_content %} | |||
| {% if page.product.translated.customFields.custom_nutrition_energy_kcal|length > 0 %} | |||
| <h3>{{ "customFields.custom_nutrition"|trans }} pro 100 {% if (page.product.unit.name == "kg") or (page.product.unit.name == "g") %}g{% elseif page.product.unit.name == "Liter" %}ml{% endif %}:</h3> | |||
| <table class="table table-striped product-detail-properties-table"> | |||
| <tbody> | |||
| <tr class="properties-row"> | |||
| <th class="properties-label"> | |||
| {{ "customFields.custom_nutrition_energy_kcal"|trans }} | |||
| </th> | |||
| <td class="properties-value"> | |||
| {{ page.product.translated.customFields.custom_nutrition_energy_kcal|raw }} kcal / {{ page.product.translated.customFields.custom_nutrition_energy_kj|raw }} kJ | |||
| </td> | |||
| </tr> | |||
| <tr class="properties-row"> | |||
| <th class="properties-label"> | |||
| {{ "customFields.custom_nutrition_fat"|trans }} | |||
| </th> | |||
| <td class="properties-value"> | |||
| {{ page.product.translated.customFields.custom_nutrition_fat|raw|number_format(1, ',', '.') }} g | |||
| </td> | |||
| </tr> | |||
| <tr class="properties-row"> | |||
| <th class="properties-label"> | |||
| {{ "customFields.custom_nutrition_fattyacids"|trans }} | |||
| </th> | |||
| <td class="properties-value"> | |||
| {{ page.product.translated.customFields.custom_nutrition_fattyacids|raw|number_format(1, ',', '.') }} g | |||
| </td> | |||
| </tr> | |||
| <tr class="properties-row"> | |||
| <th class="properties-label"> | |||
| {{ "customFields.custom_nutrition_carbohydrates"|trans }} | |||
| </th> | |||
| <td class="properties-value"> | |||
| {{ page.product.translated.customFields.custom_nutrition_carbohydrates|raw|number_format(1, ',', '.') }} g | |||
| </td> | |||
| </tr> | |||
| <tr class="properties-row"> | |||
| <th class="properties-label"> | |||
| {{ "customFields.custom_nutrition_sugar"|trans }} | |||
| </th> | |||
| <td class="properties-value"> | |||
| {{ page.product.translated.customFields.custom_nutrition_sugar|raw|number_format(1, ',', '.') }} g | |||
| </td> | |||
| </tr> | |||
| <tr class="properties-row"> | |||
| <th class="properties-label"> | |||
| {{ "customFields.custom_nutrition_protein"|trans }} | |||
| </th> | |||
| <td class="properties-value"> | |||
| {{ page.product.translated.customFields.custom_nutrition_protein|raw|number_format(1, ',', '.') }} g | |||
| </td> | |||
| </tr> | |||
| <tr class="properties-row"> | |||
| <th class="properties-label"> | |||
| {{ "customFields.custom_nutrition_salt"|trans }} | |||
| </th> | |||
| <td class="properties-value"> | |||
| {{ page.product.translated.customFields.custom_nutrition_salt|raw|number_format(2, ',', '.') }} g | |||
| </td> | |||
| </tr> | |||
| <tr class="properties-row"> | |||
| <th class="properties-label"> | |||
| {{ "customFields.custom_nutrition_be"|trans }} | |||
| </th> | |||
| <td class="properties-value"> | |||
| {{ page.product.translated.customFields.custom_nutrition_be|raw|number_format(1, ',', '.') }} BE | |||
| </td> | |||
| </tr> | |||
| </tbody> | |||
| </table> | |||
| {% endif %} | |||
| {% endblock %} | |||
| </div> | |||
| {% endblock %} | |||
| {% endblock %} | |||
| @@ -1,37 +1,7 @@ | |||
| body.is-act-home { | |||
| body { | |||
| @include media-breakpoint-down(xs) { | |||
| .cms-section.bg-image { | |||
| background-position: center left; | |||
| } | |||
| } | |||
| @include media-breakpoint-up(sm) { | |||
| .content-main { | |||
| margin-left: -20px; | |||
| margin-right: -20px; | |||
| .cms-section-default.full-width { | |||
| padding-left: 5px; | |||
| padding-right: 5px; | |||
| } | |||
| } | |||
| } | |||
| @include media-breakpoint-up(md) { | |||
| .content-main { | |||
| margin-left: -40px; | |||
| margin-right: -40px; | |||
| .cms-section-default.full-width { | |||
| padding-left: 10px; | |||
| padding-right: 10px; | |||
| } | |||
| } | |||
| } | |||
| @include media-breakpoint-up(xl) { | |||
| .content-main { | |||
| margin-left: -80px; | |||
| margin-right: -80px; | |||
| .cms-section-default.full-width { | |||
| padding-left: 20px; | |||
| padding-right: 20px; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -62,7 +62,9 @@ | |||
| a:not(.btn) { | |||
| margin-top: 16px; | |||
| margin-bottom: 0; | |||
| line-height: 15px; | |||
| font-size: 22px; | |||
| line-height: 24px; | |||
| font-weight: 500; | |||
| } | |||
| } | |||
| .footer-contact-form { | |||
| @@ -71,11 +71,9 @@ | |||
| } | |||
| } | |||
| } | |||
| .is-lo-full-width .container { | |||
| max-width: 1120px; | |||
| } | |||
| .nav-header>.container { | |||
| padding-left: 0; | |||
| padding-right: 0; | |||
| @@ -14,6 +14,7 @@ html { | |||
| body { | |||
| background: #fff; | |||
| border-top: 5px solid $sw-color-brand-primary !important; | |||
| overflow-x:hidden; | |||
| } | |||
| h1 { | |||
| @@ -75,6 +76,9 @@ h6 { | |||
| font-weight: 600; | |||
| letter-spacing: 1px; | |||
| padding: 5px 32px !important; | |||
| &:hover { | |||
| color: #fff !important; | |||
| } | |||
| } | |||
| .aku-cms-factory-element, | |||
| @@ -82,8 +82,13 @@ | |||
| color: $sw-color-brand-secondary; | |||
| line-height: 40px !important; | |||
| } | |||
| .product-detail-price-container { | |||
| display: flex; | |||
| align-items: baseline; | |||
| } | |||
| .product-detail-price { | |||
| color: $sw-color-brand-primary; | |||
| margin-right: 15px; | |||
| } | |||
| .product-detail-tax-link { | |||
| color: #222; | |||
| @@ -92,6 +97,19 @@ | |||
| text-decoration: none; | |||
| } | |||
| } | |||
| .product-detail-form-container { | |||
| padding: 35px 0; | |||
| margin-top: 25px; | |||
| border-top: 1px solid #86b04b; | |||
| border-bottom: 1px solid #86b04b; | |||
| } | |||
| .product-detail-delivery-information { | |||
| margin-bottom: 0; | |||
| } | |||
| .product-wishlist { | |||
| border-top: 1px solid #86b04b; | |||
| padding: 25px 0; | |||
| } | |||
| .btn-primary { | |||
| background: transparent; | |||
| color: $sw-color-brand-primary; | |||
| @@ -108,5 +126,11 @@ | |||
| color: #fff; | |||
| } | |||
| } | |||
| .product-wishlist-btn-content { | |||
| text-decoration: none; | |||
| &:hover { | |||
| text-decoration: underline; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,46 @@ | |||
| {% sw_extends '@Storefront/storefront/component/buy-widget/buy-widget-price.html.twig' %} | |||
| {% block buy_widget_price_content %} | |||
| {% set listPrice = price.listPrice %} | |||
| <p class="product-detail-price{% if listPrice.percentage > 0 %} with-list-price{% endif %}"> | |||
| {{ price.unitPrice|currency }}{{ "general.star"|trans|sw_sanitize }} | |||
| </p> | |||
| {% set weekProductCount = 0 %} | |||
| {% if (product.customFields.custom_weightlossplan_day1_image != null) %}{% set weekProductCount = weekProductCount + 1 %}{% endif %} | |||
| {% if (product.customFields.custom_weightlossplan_day2_image != null) %}{% set weekProductCount = weekProductCount + 1 %}{% endif %} | |||
| {% if (product.customFields.custom_weightlossplan_day3_image != null) %}{% set weekProductCount = weekProductCount + 1 %}{% endif %} | |||
| {% if (product.customFields.custom_weightlossplan_day4_image != null) %}{% set weekProductCount = weekProductCount + 1 %}{% endif %} | |||
| {% if (product.customFields.custom_weightlossplan_day5_image != null) %}{% set weekProductCount = weekProductCount + 1 %}{% endif %} | |||
| {% if (product.customFields.custom_weightlossplan_day6_image != null) %}{% set weekProductCount = weekProductCount + 1 %}{% endif %} | |||
| {% if weekProductCount >= 1 %} | |||
| <span class="spwn-week-count"><small>{{ (price.unitPrice / weekProductCount) | json_encode() | round(2) | number_format(2, ',', '.') }} € pro Tag</small></span> | |||
| {% endif %} | |||
| {% if listPrice.percentage > 0 %} | |||
| {% block buy_widget_was_price %} | |||
| {% block buy_widget_was_price_badge %} | |||
| <span class="list-price-badge">%</span> | |||
| {% endblock %} | |||
| {% set afterListPriceSnippetExists = "listing.afterListPrice"|trans|length > 0 %} | |||
| {% set beforeListPriceSnippetExists = "listing.beforeListPrice"|trans|length > 0 %} | |||
| {% block buy_widget_was_price_wrapper %} | |||
| <span class="product-detail-list-price-wrapper"> | |||
| {% if beforeListPriceSnippetExists %}{{"listing.beforeListPrice"|trans|trim}}{% endif %} | |||
| <span{% if not (afterListPriceSnippetExists or beforeListPriceSnippetExists) %} class="list-price-price"{% endif %}>{{ listPrice.price|currency }}{{ "general.star"|trans|sw_sanitize }}</span> | |||
| {% if afterListPriceSnippetExists %} | |||
| {{"listing.afterListPrice"|trans|trim}} | |||
| {% endif %} | |||
| <span class="list-price-percentage">{{ "detail.listPricePercentage"|trans({'%price%': listPrice.percentage })|sw_sanitize }}</span> | |||
| </span> | |||
| {% endblock %} | |||
| {% endblock %} | |||
| {% endif %} | |||
| {% endblock %} | |||
| @@ -1,21 +1,209 @@ | |||
| {% sw_extends '@Storefront/storefront/component/buy-widget/buy-widget.html.twig' %} | |||
| {% block buy_widget_price %} | |||
| <div class="product-detail-price-container"> | |||
| {% if page.product.translated.customFields.deposittype %} | |||
| <div class="product-detail-deposittype"> | |||
| {{ page.product.translated.customFields.deposittype }} | |||
| </div> | |||
| {% block buy_widget %} | |||
| <div class="product-detail-buy{% if elementId %}-{{ elementId }}{% endif %} js-magnifier-zoom-image-container"> | |||
| {% block buy_widget_rich_snippets %} | |||
| {% block buy_widget_rich_snippets_brand %} | |||
| {% if product.manufacturer %} | |||
| <meta itemprop="brand" | |||
| content="{{ product.manufacturer.translated.name }}"/> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% block buy_widget_rich_snippets_gtin13 %} | |||
| {% if product.ean %} | |||
| <meta itemprop="gtin13" | |||
| content="{{ product.ean }}"/> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% block buy_widget_rich_snippets_mpn %} | |||
| {% if product.manufacturerNumber %} | |||
| <meta itemprop="mpn" | |||
| content="{{ product.manufacturerNumber }}"/> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% block buy_widget_rich_snippets_weight %} | |||
| {% if product.weight %} | |||
| <meta itemprop="weight" | |||
| content="{{ product.weight }} kg"/> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% block buy_widget_rich_snippets_height %} | |||
| {% if product.height %} | |||
| <meta itemprop="height" | |||
| content="{{ product.height }} mm"/> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% block buy_widget_rich_snippets_width %} | |||
| {% if product.width %} | |||
| <meta itemprop="width" | |||
| content="{{ product.width }} mm"/> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% block buy_widget_rich_snippets_depth %} | |||
| {% if product.length %} | |||
| <meta itemprop="depth" | |||
| content="{{ product.length }} mm"/> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% block buy_widget_rich_snippets_release_date %} | |||
| <meta itemprop="releaseDate" | |||
| content="{{ product.releaseDate|format_date(pattern="Y-MM-dd", locale=app.request.locale) }}"/> | |||
| {% endblock %} | |||
| {% endblock %} | |||
| {% if not feature('FEATURE_NEXT_16992') %} | |||
| {# @deprecated tag:v6.5.0 tag:)(FEATURE_NEXT_16992) - Block will be removed in v6.5.0 #} | |||
| {% block buy_widget_not_available %} | |||
| {% endblock %} | |||
| {% endif %} | |||
| {{ parent() }} | |||
| {% if page.product.translated.customFields.deposit %} | |||
| {% set deposit = page.product.translated.customFields.deposit|currency %} | |||
| <div class="product-detail-deposit"> | |||
| {{ "FlowsiteDepositSystemBasic.plusDeposit"|trans({ | |||
| '%deposit%': deposit | |||
| })|sw_sanitize }} | |||
| {% block buy_widget_buy_container %} | |||
| <div itemprop="offers" | |||
| itemscope | |||
| itemtype="{% if product.calculatedPrices|length > 1 %}http://schema.org/AggregateOffer{% else %}http://schema.org/Offer{% endif %}"> | |||
| {% block buy_widget_data %} | |||
| {% block buy_widget_data_rich_snippet_url %} | |||
| <meta itemprop="url" | |||
| content="{{ seoUrl('frontend.detail.page', { productId: product.id }) }}"/> | |||
| {% endblock %} | |||
| {% block buy_widget_data_rich_snippet_price_range %} | |||
| {% if product.calculatedPrices|length > 1 %} | |||
| {% set lowestPrice = false %} | |||
| {% set highestPrice = false %} | |||
| {% for price in product.calculatedPrices %} | |||
| {% if not lowestPrice or price.unitPrice < lowestPrice %} | |||
| {% set lowestPrice = price.unitPrice %} | |||
| {% endif %} | |||
| {% if not highestPrice or price.unitPrice > highestPrice %} | |||
| {% set highestPrice = price.unitPrice %} | |||
| {% endif %} | |||
| {% endfor %} | |||
| <meta itemprop="lowPrice" content="{{ lowestPrice }}"/> | |||
| <meta itemprop="highPrice" content="{{ highestPrice }}"/> | |||
| <meta itemprop="offerCount" content="{{ product.calculatedPrices|length }}"/> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% block buy_widget_data_rich_snippet_price_currency %} | |||
| <meta itemprop="priceCurrency" | |||
| content="{{ context.currency.translated.shortName }}"/> | |||
| {% endblock %} | |||
| {% block buy_widget_price %} | |||
| <div class="product-detail-price-container"> | |||
| {% sw_include '@Storefront/storefront/component/buy-widget/buy-widget-price.html.twig' %} | |||
| </div> | |||
| {% endblock %} | |||
| {% block buy_widget_tax %} | |||
| <div class="product-detail-tax-container"> | |||
| {% if context.taxState == "gross" %} | |||
| {% set taxText = "general.grossTaxInformation"|trans|sw_sanitize %} | |||
| {% else %} | |||
| {% set taxText = "general.netTaxInformation"|trans|sw_sanitize %} | |||
| {% endif %} | |||
| <p class="product-detail-tax"> | |||
| {% block buy_widget_tax_link %} | |||
| <a class="product-detail-tax-link" | |||
| href="{{ path('frontend.cms.page',{ id: config('core.basicInformation.shippingPaymentInfoPage') }) }}" | |||
| title="{{ taxText }}" | |||
| data-toggle="modal" | |||
| data-url="{{ path('frontend.cms.page',{ id: config('core.basicInformation.shippingPaymentInfoPage') }) }}"> | |||
| {{ taxText }} | |||
| </a> | |||
| {% endblock %} | |||
| </p> | |||
| </div> | |||
| {% endblock %} | |||
| {% block buy_widget_deposit %} | |||
| {% if page.product.translated.customFields.deposit %} | |||
| {% set deposit = page.product.translated.customFields.deposit|currency %} | |||
| <div class="product-detail-deposit"> | |||
| {{ "FlowsiteDepositSystemBasic.plusDeposit"|trans({ | |||
| '%deposit%': deposit | |||
| })|sw_sanitize }} | |||
| </div> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% set remoteClickOptions = { | |||
| selector: "#review-tab-" ~ product.id, | |||
| scrollToElement: true | |||
| } %} | |||
| {% set reviewTabHref = "#review-tab-" ~ product.id ~ "-pane" %} | |||
| {% block buy_widget_reviews %} | |||
| {% if product.ratingAverage > 0 and totalReviews > 0 and config('core.listing.showReview') %} | |||
| <div class="product-detail-reviews"> | |||
| {% sw_include '@Storefront/storefront/component/review/rating.html.twig' with { | |||
| points: product.ratingAverage, | |||
| style: 'text-primary' | |||
| } %} | |||
| <a data-toggle="tab" | |||
| class="product-detail-reviews-link" | |||
| data-offcanvas-tabs="true" | |||
| data-remote-click="true" | |||
| data-remote-click-options='{{ remoteClickOptions|json_encode }}' | |||
| href="{{ reviewTabHref }}" | |||
| aria-controls="review-tab-pane"> | |||
| {{ totalReviews }} | |||
| {{ "detail.reviewLinkText"|trans({'%count%': totalReviews})|sw_sanitize }} | |||
| </a> | |||
| </div> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% endblock %} | |||
| {% block buy_widget_configurator_include %} | |||
| {% if product.parentId and configuratorSettings|length > 0 %} | |||
| <div class="product-detail-configurator-container"> | |||
| {% sw_include '@Storefront/storefront/component/buy-widget/configurator.html.twig' %} | |||
| </div> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% block buy_widget_buy_form %} | |||
| {% if product.active %} | |||
| <div class="product-detail-form-container"> | |||
| {% sw_include '@Storefront/storefront/component/buy-widget/buy-widget-form.html.twig' %} | |||
| </div> | |||
| {% endif %} | |||
| {% endblock %} | |||
| </div> | |||
| {% endblock %} | |||
| {% block buy_widget_delivery_informations %} | |||
| <div class="product-detail-delivery-information"> | |||
| {% sw_include '@Storefront/storefront/component/delivery-information.html.twig' %} | |||
| </div> | |||
| {% endblock %} | |||
| {% if config('core.cart.wishlistEnabled') %} | |||
| {% block buy_widget_wishlist %} | |||
| {% sw_include '@Storefront/storefront/component/product/card/wishlist.html.twig' with { | |||
| showText: true, | |||
| size: 'md', | |||
| productId: product.id | |||
| } %} | |||
| {% endblock %} | |||
| {% endif %} | |||
| {% block buy_widget_ordernumber_container %} | |||
| {% endblock %} | |||
| </div> | |||
| {% endblock %} | |||
| @@ -61,3 +61,6 @@ | |||
| </div> | |||
| </div> | |||
| {% endblock %} | |||
| {% block page_checkout_cart_shipping_costs %} | |||
| {% endblock %} | |||
| @@ -0,0 +1,35 @@ | |||
| {% sw_extends '@Storefront/storefront/page/product-detail/buy-widget-price.html.twig' %} | |||
| {% block page_product_detail_price_content %} | |||
| {% set listPrice = price.listPrice %} | |||
| <p class="product-detail-price{% if listPrice.percentage > 0 %} with-list-price{% endif %}"> | |||
| {{ price.unitPrice|currency }}{{ "general.star"|trans|sw_sanitize }} | |||
| </p> | |||
| {% if listPrice.percentage > 0 %} | |||
| {% block page_product_detail_was_price %} | |||
| {% block page_product_detail_was_price_badge %} | |||
| <span class="list-price-badge">%</span> | |||
| {% endblock %} | |||
| {% set afterListPriceSnippetExists = "listing.afterListPrice"|trans|length > 0 %} | |||
| {% set beforeListPriceSnippetExists = "listing.beforeListPrice"|trans|length > 0 %} | |||
| {% block page_product_detail_was_price_wrapper %} | |||
| <span class="product-detail-list-price-wrapper"> | |||
| {% if beforeListPriceSnippetExists %}{{"listing.beforeListPrice"|trans|trim}}{% endif %} | |||
| <span{% if not (afterListPriceSnippetExists or beforeListPriceSnippetExists) %} class="list-price-price"{% endif %}>{{ listPrice.price|currency }}{{ "general.star"|trans|sw_sanitize }}</span> | |||
| {% if afterListPriceSnippetExists %} | |||
| {{"listing.afterListPrice"|trans|trim}} | |||
| {% endif %} | |||
| <span class="list-price-percentage">{{ "detail.listPricePercentage"|trans({'%price%': listPrice.percentage })|sw_sanitize }}</span> | |||
| </span> | |||
| {% endblock %} | |||
| {% endblock %} | |||
| {% endif %} | |||
| {% endblock %} | |||
| @@ -0,0 +1,207 @@ | |||
| {% sw_extends '@Storefront/storefront/page/product-detail/buy-widget.html.twig' %} | |||
| {% block page_product_detail_buy_inner %} | |||
| <div class="js-magnifier-zoom-image-container"> | |||
| {% block page_product_detail_rich_snippets %} | |||
| {% block page_product_detail_rich_snippets_brand %} | |||
| {% if page.product.manufacturer %} | |||
| <meta itemprop="brand" | |||
| content="{{ page.product.manufacturer.translated.name }}"/> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% block page_product_detail_rich_snippets_gtin13 %} | |||
| {% if page.product.ean %} | |||
| <meta itemprop="gtin13" | |||
| content="{{ page.product.ean }}"/> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% block page_product_detail_rich_snippets_mpn %} | |||
| {% if page.product.manufacturerNumber %} | |||
| <meta itemprop="mpn" | |||
| content="{{ page.product.manufacturerNumber }}"/> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% block page_product_detail_rich_snippets_weight %} | |||
| {% if page.product.weight %} | |||
| <meta itemprop="weight" | |||
| content="{{ page.product.weight }} kg"/> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% block page_product_detail_rich_snippets_height %} | |||
| {% if page.product.height %} | |||
| <meta itemprop="height" | |||
| content="{{ page.product.height }} mm"/> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% block page_product_detail_rich_snippets_width %} | |||
| {% if page.product.width %} | |||
| <meta itemprop="width" | |||
| content="{{ page.product.width }} mm"/> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% block page_product_detail_rich_snippets_depth %} | |||
| {% if page.product.length %} | |||
| <meta itemprop="depth" | |||
| content="{{ page.product.length }} mm"/> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% block page_product_detail_rich_snippets_release_date %} | |||
| <meta itemprop="releaseDate" | |||
| content="{{ page.product.releaseDate|format_date(pattern="Y-MM-dd", locale=app.request.locale) }}"/> | |||
| {% endblock %} | |||
| {% endblock %} | |||
| {% if not feature('FEATURE_NEXT_16992') %} | |||
| {# @deprecated tag:v6.5.0 tag:)(FEATURE_NEXT_16992) - Block will be removed in v6.5.0 #} | |||
| {% block page_product_detail_not_available %} | |||
| {% endblock %} | |||
| {% endif %} | |||
| {% block page_product_detail_buy_container %} | |||
| <div itemprop="offers" | |||
| itemscope | |||
| itemtype="{% if page.product.calculatedPrices|length > 1 %}http://schema.org/AggregateOffer{% else %}http://schema.org/Offer{% endif %}"> | |||
| {% block page_product_detail_data %} | |||
| {% block page_product_detail_data_rich_snippet_url %} | |||
| <meta itemprop="url" | |||
| content="{{ seoUrl('frontend.detail.page', { productId: page.product.id }) }}"/> | |||
| {% endblock %} | |||
| {% block page_product_detail_data_rich_snippet_price_range %} | |||
| {% if page.product.calculatedPrices|length > 1 %} | |||
| {% set lowestPrice = false %} | |||
| {% set highestPrice = false %} | |||
| {% for price in page.product.calculatedPrices %} | |||
| {% if not lowestPrice or price.unitPrice < lowestPrice %} | |||
| {% set lowestPrice = price.unitPrice %} | |||
| {% endif %} | |||
| {% if not highestPrice or price.unitPrice > highestPrice %} | |||
| {% set highestPrice = price.unitPrice %} | |||
| {% endif %} | |||
| {% endfor %} | |||
| <meta itemprop="lowPrice" content="{{ lowestPrice }}"/> | |||
| <meta itemprop="highPrice" content="{{ highestPrice }}"/> | |||
| <meta itemprop="offerCount" content="{{ page.product.calculatedPrices|length }}"/> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% block page_product_detail_data_rich_snippet_price_currency %} | |||
| <meta itemprop="priceCurrency" | |||
| content="{{ context.currency.translated.shortName }}"/> | |||
| {% endblock %} | |||
| {% block page_product_detail_price %} | |||
| <div class="product-detail-price-container"> | |||
| {% sw_include '@Storefront/storefront/page/product-detail/buy-widget-price.html.twig' %} | |||
| </div> | |||
| {% endblock %} | |||
| {% block page_product_detail_tax %} | |||
| <div class="product-detail-tax-container"> | |||
| {% if context.taxState == "gross" %} | |||
| {% set taxText = "general.grossTaxInformation"|trans|sw_sanitize %} | |||
| {% else %} | |||
| {% set taxText = "general.netTaxInformation"|trans|sw_sanitize %} | |||
| {% endif %} | |||
| <p class="product-detail-tax"> | |||
| {% block page_product_detail_tax_link %} | |||
| <a class="product-detail-tax-link" | |||
| href="{{ path('frontend.cms.page',{ id: config('core.basicInformation.shippingPaymentInfoPage') }) }}" | |||
| title="{{ taxText }}" | |||
| data-toggle="modal" | |||
| data-url="{{ path('frontend.cms.page',{ id: config('core.basicInformation.shippingPaymentInfoPage') }) }}"> | |||
| {{ taxText }} | |||
| </a> | |||
| {% endblock %} | |||
| </p> | |||
| </div> | |||
| {% endblock %} | |||
| {% block page_product_detail_deposit %} | |||
| {% if page.product.translated.customFields.deposit %} | |||
| {% set deposit = page.product.translated.customFields.deposit|currency %} | |||
| <div class="product-detail-deposit"> | |||
| {{ "FlowsiteDepositSystemBasic.plusDeposit"|trans({ | |||
| '%deposit%': deposit | |||
| })|sw_sanitize }} | |||
| </div> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% set remoteClickOptions = { | |||
| selector: "#review-tab", | |||
| scrollToElement: true | |||
| } %} | |||
| {% block page_product_detail_reviews %} | |||
| {% if page.product.ratingAverage > 0 and page.reviews.totalReviews > 0 and config('core.listing.showReview') %} | |||
| <div class="product-detail-reviews"> | |||
| {% sw_include '@Storefront/storefront/component/review/rating.html.twig' with { | |||
| points: page.product.ratingAverage, | |||
| style: 'text-primary' | |||
| } %} | |||
| <a data-toggle="tab" | |||
| class="product-detail-reviews-link" | |||
| data-offcanvas-tabs="true" | |||
| data-remote-click="true" | |||
| data-remote-click-options='{{ remoteClickOptions|json_encode }}' | |||
| href="#review-tab-pane" | |||
| aria-controls="review-tab-pane"> | |||
| {{ page.reviews.totalReviews }} | |||
| {{ "detail.reviewLinkText"|trans({'%count%': page.reviews.totalReviews})|sw_sanitize }} | |||
| </a> | |||
| </div> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% endblock %} | |||
| {% block page_product_detail_configurator_include %} | |||
| {% if page.product.parentId and page.configuratorSettings|length > 0 %} | |||
| <div class="product-detail-configurator-container"> | |||
| {% sw_include '@Storefront/storefront/page/product-detail/configurator.html.twig' %} | |||
| </div> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% block page_product_detail_buy_form %} | |||
| {% if page.product.active %} | |||
| <div class="product-detail-form-container"> | |||
| {% sw_include '@Storefront/storefront/page/product-detail/buy-widget-form.html.twig' %} | |||
| </div> | |||
| {% endif %} | |||
| {% endblock %} | |||
| </div> | |||
| {% endblock %} | |||
| {% block page_product_detail_delivery_informations %} | |||
| <div class="product-detail-delivery-information"> | |||
| {% sw_include '@Storefront/storefront/component/delivery-information.html.twig' %} | |||
| </div> | |||
| {% endblock %} | |||
| {% if config('core.cart.wishlistEnabled') %} | |||
| {% block page_product_detail_wishlist %} | |||
| {% sw_include '@Storefront/storefront/component/product/card/wishlist.html.twig' with { | |||
| showText: true, | |||
| size: 'md', | |||
| productId: page.product.id | |||
| } %} | |||
| {% endblock %} | |||
| {% endif %} | |||
| {% block page_product_detail_ordernumber_container %} | |||
| {% endblock %} | |||
| </div> | |||
| {% endblock %} | |||
| @@ -0,0 +1,39 @@ | |||
| {% sw_extends '@Storefront/storefront/page/product-detail/tabs.html.twig' %} | |||
| {% block zen_page_product_detail_tabs_navigation_custom_tab_global %} | |||
| {% if page.product.translated.customFields.custom_nutrition_energy_kcal|length > 0 %} | |||
| {% set customTab = { | |||
| 'translated': { | |||
| title: "zentheme.atmos.content.customTabTitle"|trans({"%placeholder%": config('zenitPlatformAtmos.config.customTabTitle')}), | |||
| text: "zentheme.atmos.content.customTabText"|trans({"%placeholder%": config('zenitPlatformAtmos.config.customTabText')}) | |||
| } | |||
| } %} | |||
| <li class="nav-item"> | |||
| <a class="nav-link product-detail-tab-navigation-link" | |||
| id="custom-field-global-tab" | |||
| data-toggle="tab" | |||
| data-offcanvas-tabs="true" | |||
| href="#custom-field-global-tab-pane" | |||
| role="tab" | |||
| aria-controls="custom-field-global-tab-pane" | |||
| aria-selected="false"> | |||
| <span>{{ customTab.translated.title }}</span> | |||
| <span class="product-detail-tab-navigation-icon"> | |||
| {% sw_icon 'arrow-medium-right' style {'pack':'solid'} %} | |||
| </span> | |||
| </a> | |||
| </li> | |||
| {% endif %} | |||
| {% endblock %} | |||
| {% block zen_page_product_detail_tabs_content_custom_tab_global %} | |||
| {% if page.product.translated.customFields.custom_nutrition_energy_kcal|length > 0 %} | |||
| <div class="tab-pane fade show" | |||
| id="custom-field-global-tab-pane" | |||
| role="tabpanel" | |||
| aria-labelledby="custom-field-global-tab"> | |||
| {% sw_include '@Storefront/storefront/page/product-detail/zen-custom-global-tab.html.twig' %} | |||
| </div> | |||
| {% endif %} | |||
| {% endblock %} | |||
| @@ -0,0 +1,89 @@ | |||
| {% sw_extends '@Storefront/storefront/utilities/offcanvas.html.twig' %} | |||
| {% block utilities_offcanvas_content %} | |||
| {% block zen_page_product_detail_custom_field_global_container %} | |||
| <div class="product-detail-custom-field1 tab-pane-container"> | |||
| {% set customTab = { | |||
| 'translated': { | |||
| title: "zentheme.atmos.content.customTabTitle"|trans({"%placeholder%": config('zenitPlatformAtmos.config.customTabTitle')}), | |||
| text: "zentheme.atmos.content.customTabText"|trans({"%placeholder%": config('zenitPlatformAtmos.config.customTabText')}) | |||
| } | |||
| } %} | |||
| {% block zen_page_product_detail_custom_field_global_content %} | |||
| {% if page.product.translated.customFields.custom_nutrition_energy_kcal|length > 0 %} | |||
| <h3>{{ "customFields.custom_nutrition"|trans }} pro 100 {% if (page.product.unit.name == "kg") or (page.product.unit.name == "g") %}g{% elseif page.product.unit.name == "Liter" %}ml{% endif %}:</h3> | |||
| <table class="table table-striped product-detail-properties-table"> | |||
| <tbody> | |||
| <tr class="properties-row"> | |||
| <th class="properties-label"> | |||
| {{ "customFields.custom_nutrition_energy_kcal"|trans }} | |||
| </th> | |||
| <td class="properties-value"> | |||
| {{ page.product.translated.customFields.custom_nutrition_energy_kcal|raw }} kcal / {{ page.product.translated.customFields.custom_nutrition_energy_kj|raw }} kJ | |||
| </td> | |||
| </tr> | |||
| <tr class="properties-row"> | |||
| <th class="properties-label"> | |||
| {{ "customFields.custom_nutrition_fat"|trans }} | |||
| </th> | |||
| <td class="properties-value"> | |||
| {{ page.product.translated.customFields.custom_nutrition_fat|raw|number_format(1, ',', '.') }} g | |||
| </td> | |||
| </tr> | |||
| <tr class="properties-row"> | |||
| <th class="properties-label"> | |||
| {{ "customFields.custom_nutrition_fattyacids"|trans }} | |||
| </th> | |||
| <td class="properties-value"> | |||
| {{ page.product.translated.customFields.custom_nutrition_fattyacids|raw|number_format(1, ',', '.') }} g | |||
| </td> | |||
| </tr> | |||
| <tr class="properties-row"> | |||
| <th class="properties-label"> | |||
| {{ "customFields.custom_nutrition_carbohydrates"|trans }} | |||
| </th> | |||
| <td class="properties-value"> | |||
| {{ page.product.translated.customFields.custom_nutrition_carbohydrates|raw|number_format(1, ',', '.') }} g | |||
| </td> | |||
| </tr> | |||
| <tr class="properties-row"> | |||
| <th class="properties-label"> | |||
| {{ "customFields.custom_nutrition_sugar"|trans }} | |||
| </th> | |||
| <td class="properties-value"> | |||
| {{ page.product.translated.customFields.custom_nutrition_sugar|raw|number_format(1, ',', '.') }} g | |||
| </td> | |||
| </tr> | |||
| <tr class="properties-row"> | |||
| <th class="properties-label"> | |||
| {{ "customFields.custom_nutrition_protein"|trans }} | |||
| </th> | |||
| <td class="properties-value"> | |||
| {{ page.product.translated.customFields.custom_nutrition_protein|raw|number_format(1, ',', '.') }} g | |||
| </td> | |||
| </tr> | |||
| <tr class="properties-row"> | |||
| <th class="properties-label"> | |||
| {{ "customFields.custom_nutrition_salt"|trans }} | |||
| </th> | |||
| <td class="properties-value"> | |||
| {{ page.product.translated.customFields.custom_nutrition_salt|raw|number_format(2, ',', '.') }} g | |||
| </td> | |||
| </tr> | |||
| <tr class="properties-row"> | |||
| <th class="properties-label"> | |||
| {{ "customFields.custom_nutrition_be"|trans }} | |||
| </th> | |||
| <td class="properties-value"> | |||
| {{ page.product.translated.customFields.custom_nutrition_be|raw|number_format(1, ',', '.') }} BE | |||
| </td> | |||
| </tr> | |||
| </tbody> | |||
| </table> | |||
| {% endif %} | |||
| {% endblock %} | |||
| </div> | |||
| {% endblock %} | |||
| {% endblock %} | |||