custom/plugins/theme/src/Resources/views/storefront/page/product-detail/buy-widget.html.twig line 1

Open in your IDE?
  1. {% sw_extends '@Storefront/storefront/page/product-detail/buy-widget.html.twig' %}
  2. {% block page_product_detail_tax %}
  3.     <div class="product-detail__price-info-grid">
  4.        <span class="price-unit-reference-content">
  5.             {% if page.product.purchaseUnit %}
  6.                 {% set price = page.product.calculatedPrice %}
  7.                 {% if page.product.calculatedPrices|length == 1 %}
  8.                     {% set price = page.product.calculatedPrices.first %}
  9.                 {% endif %}
  10.                 {% if price.referencePrice is not null %}
  11.                     {% block page_product_detail_price_unit_reference_content %}
  12.                         {{ price.referencePrice.referenceUnit }} {{ price.referencePrice.unitName }} = {{ price.referencePrice.price|currency }}
  13.                     {% endblock %}
  14.                 {% endif %}
  15.             {% endif %}
  16.         </span>
  17.         <span class="text-primary">
  18.             {% if doncarneConfig.weightBasedBilling is not null %}
  19.                 {% set weightBasedBillingId =  doncarneConfig.weightBasedBilling %}
  20.                 <a class="product-detail__shipping-info"
  21.                    href="{{ path('frontend.cms.page',{ id: weightBasedBillingId }) }}"
  22.                     title = "{{"productDetail.weightBasedPricing"|trans|sw_sanitize}}"
  23.                     {{ dataBsToggleAttr }}="modal"
  24.                     data-url="{{ path('frontend.cms.page',{ id: weightBasedBillingId }) }}"
  25.                 >
  26.                     {{"productDetail.weightBasedPricing"|trans|sw_sanitize}}
  27.                 </a>
  28.             {% endif %}
  29.         </span>
  30.         <span>
  31.             {% if context.taxState == "gross" %}
  32.                 {{"general.shortTaxInfoGross"|trans|sw_sanitize}}
  33.             {% else %}
  34.                 {{"general.shortTaxInfoNet"|trans|sw_sanitize}}
  35.             {% endif %}
  36.         </span>
  37.         <a class="product-detail__shipping-info"
  38.             href="{{ path('frontend.cms.page',{ id: config('core.basicInformation.shippingPaymentInfoPage') }) }}"
  39.             title="{{"general.additionalShippingCosts"|trans|sw_sanitize}}"
  40.             {{ dataBsToggleAttr }}="modal"
  41.             data-url="{{ path('frontend.cms.page',{ id: config('core.basicInformation.shippingPaymentInfoPage') }) }}">
  42.             {{"general.additionalShippingCosts"|trans|sw_sanitize}}
  43.          </a>
  44.     </div>
  45.     {% if page is defined and page.product is defined %}
  46.         {% set product = page.product %}
  47.     {% endif %}
  48.     {% if product.isCloseout and product.availableStock < product.minPurchase %}
  49.         <link itemprop="availability" href="http://schema.org/LimitedAvailability"/>
  50.         <p class="delivery-information delivery-soldout">
  51.             <span class="delivery-status-indicator bg-danger"></span>
  52.             {{ "detail.soldOut"|trans|sw_sanitize }}
  53.         </p>
  54.     {% endif %}
  55. {% endblock %}
  56. {# moved down #}
  57. {% block page_product_detail_wishlist %}
  58. {% endblock %}
  59. {% block page_product_detail_buy_inner %}
  60.     {# not loaded for cms page #}
  61.     {% set buyWidgetTheme = 'theme-light' %}
  62.     {% if page.product.seoCategory.translated.customFields.doncarne_category_buy_widget_theme == 'dark' %}
  63.        {% set buyWidgetTheme = 'theme-dark' %}
  64.     {% endif %}
  65.     <div class="product-detail-buy__inner {{buyWidgetTheme}}">
  66.         <div class="row align-items-center product-detail-headline">
  67.             {% sw_include '@Storefront/storefront/page/product-detail/headline.html.twig' %}
  68.             {% if page.product.getExtension("doncarneCutProperties").all()|first %}
  69.                 {% sw_include '@Storefront/solution360/cut-product-property-image.html.twig' with {media: page.product.getExtension("doncarneCutProperties").all()|first.media} only %}
  70.             {% endif %}
  71.         </div>
  72.         {% set productReviewCount = page.product.extensions.rating.totalReviews %}
  73.         {% if productReviewCount > 0 %}
  74.             {% set productAvgRating = page.product.extensions.rating.rating|round(2, "common")  %}
  75.         {% endif %}
  76.         {% if productAvgRating > 0 and productReviewCount > 0 %}
  77.             <div class="product-detail-review-rating"
  78.                 data-rating-scroll="true" data-rating-selector="#review-tab">
  79.                 <meta itemprop="aggregateRating" content ="{{ productAvgRating }}">
  80.                 <meta itemprop="bestRating" content="5">
  81.                 <meta itemprop="ratingCount" content="{{ productReviewCount }}">
  82.                 <meta itemprop="ratingValue" content="{{ productAvgRating }}">
  83.                 {% sw_include '@Storefront/storefront/component/review/rating.html.twig' with {
  84.                     points: productAvgRating,
  85.                     total: productReviewCount,
  86.                     style: 'text-primary'
  87.                 } %}
  88.             </div>
  89.             <!-- Add Review Button directly below rating -->
  90.             <div class="mt-1">
  91.                 <button type="button" class="btn btn-link p-0 text-start text-decoration-none" id="openReviewModalBtn">
  92.                     <small class="text-primary">{{ "detail.review.addReview"|trans|sw_sanitize }}</small>
  93.                 </button>
  94.             </div>
  95.         {% else %}
  96.             <!-- Show review button when no reviews exist -->
  97.             <div class="product-detail-review-rating"
  98.                 data-rating-scroll="true" data-rating-selector="#review-tab">
  99.                 <div class="text-muted small">{{ "detail.review.noReviewsYet"|trans|sw_sanitize }}</div>
  100.             </div>
  101.             <!-- Add Review Button directly below no-rating text -->
  102.             <div class="mt-1">
  103.                 <button type="button" class="btn btn-link p-0 text-start text-decoration-none" id="openReviewModalBtnEmpty">
  104.                     <small class="text-primary">{{ "detail.review.writeFirstReview"|trans|sw_sanitize }}</small>
  105.                 </button>
  106.             </div>
  107.         {% endif %}
  108.         <div class="mb-4">
  109.             {% if page.product.packUnit or page.product.purchaseUnit or page.product.unit.name %}
  110.                  <span class="product-detail__unit-info d-block mb-1">
  111.                      {{ page.product.purchaseUnit }} {{ page.product.unit.name }}
  112.                      {% if page.product.packUnit %}
  113.                          , {{ page.product.packUnit }}
  114.                      {% endif %}
  115.                  </span>
  116.             {% endif %}
  117.             <div class="product-detail-ordernumber-container">
  118.                 {% block page_product_detail_ordernumber_label %}
  119.                     <span class="product-detail-ordernumber-label">
  120.                         {{ "detail.productNumberLabel"|trans|sw_sanitize }}
  121.                     </span>
  122.                 {% endblock %}
  123.                 {% if page.product.productNumber %}
  124.                     {% block page_product_detail_ordernumber %}
  125.                         <meta itemprop="productID" content="{{ page.product.id }}"/>
  126.                         <span class="product-detail-ordernumber" itemprop="sku">
  127.                             {{ page.product.productNumber }}
  128.                         </span>
  129.                     {% endblock %}
  130.                 {% endif %}
  131.             </div>
  132.         </div>
  133.         {% sw_include '@Storefront/solution360/product-usps.html.twig' with { product: page.product }%}
  134.         {{ parent() }}
  135.         <div class="product-detail-buy__footer">
  136.             {% set state = page.product.translated.customFields.doncarne_product_delivery_product_state %}
  137.             {% if state == "frozen" %}
  138.                 {% sw_icon 'snowflake' style {'namespace': 'DonCarneTheme'} %}
  139.                 <p class="mb-0"><span class="product-detail-buy_text-frozen font-weight-bold">{{"productAttributes.frozen.label"|trans|sw_sanitize}}</span>&nbsp;-&nbsp;{{"productAttributes.frozen.desc"|trans|raw}}</p>
  140.             {% endif %}
  141.             {% if state == "fresh" %}
  142.                 {% sw_icon 'steak' style {'namespace': 'DonCarneTheme'} %}
  143.                 <p class="mb-0"><span class="product-detail-buy_text-fresh font-weight-bold">{{"productAttributes.fresh.label"|trans|sw_sanitize}}</span>&nbsp;-&nbsp;{{"productAttributes.fresh.desc"|trans|raw}}</p>
  144.             {% endif %}
  145.         </div>
  146.         {% sw_include '@Storefront/storefront/component/delivery-information.html.twig' %}
  147.         {% if config('core.cart.wishlistEnabled') and not config('CoeWishlistSw6.config') %}
  148.             {% sw_include '@Storefront/storefront/component/product/card/wishlist.html.twig' with {
  149.                 showText: true,
  150.                 size: 'md',
  151.                 productId: page.product.id
  152.             } %}
  153.         {% endif %}
  154.     </div>
  155.     <!-- Include Review Modal -->
  156.     {% sw_include '@Storefront/storefront/component/review/review-modal-inline.html.twig' %}
  157.     <!-- Modal Trigger Script -->
  158.     <script>
  159.     document.addEventListener('DOMContentLoaded', function() {
  160.         // Warte bis alles geladen ist
  161.         setTimeout(function() {
  162.             var btn1 = document.getElementById('openReviewModalBtn');
  163.             var btn2 = document.getElementById('openReviewModalBtnEmpty');
  164.             var modal = document.getElementById('productReviewModal');
  165.             function showModal() {
  166.                 if (modal) {
  167.                     // Versuche Bootstrap Modal
  168.                     if (typeof bootstrap !== 'undefined' && bootstrap.Modal) {
  169.                         var bsModal = new bootstrap.Modal(modal);
  170.                         bsModal.show();
  171.                     }
  172.                     // Fallback: jQuery (Shopware nutzt oft jQuery)
  173.                     else if (typeof $ !== 'undefined' && $.fn.modal) {
  174.                         $(modal).modal('show');
  175.                     }
  176.                     // Notfall: Direkte Manipulation
  177.                     else {
  178.                         modal.classList.add('show');
  179.                         modal.style.display = 'block';
  180.                         document.body.classList.add('modal-open');
  181.                         // Backdrop hinzufügen
  182.                         var backdrop = document.createElement('div');
  183.                         backdrop.className = 'modal-backdrop fade show';
  184.                         document.body.appendChild(backdrop);
  185.                     }
  186.                 }
  187.             }
  188.             if (btn1) {
  189.                 btn1.addEventListener('click', function(e) {
  190.                     e.preventDefault();
  191.                     showModal();
  192.                 });
  193.             }
  194.             if (btn2) {
  195.                 btn2.addEventListener('click', function(e) {
  196.                     e.preventDefault();
  197.                     showModal();
  198.                 });
  199.             }
  200.         }, 500); // Kurze Verzögerung um sicherzustellen, dass alles geladen ist
  201.     });
  202.     </script>
  203. {% endblock %}
  204. {% block page_product_detail_ordernumber_container %}
  205. {% endblock %}
  206. {% block page_product_detail_reviews %}
  207. {% endblock %}
  208. {% block page_product_detail_delivery_informations %}
  209. {% endblock %}