Files
wc-bootstrap/templates/cart/mini-cart.html.twig
magdev 6ee95f4a2f
All checks were successful
Create Release Package / PHP Lint (push) Successful in 57s
Create Release Package / Build Release (push) Successful in 1m11s
Fix template quirks and bump version to 0.1.0
Audit and fix 14 Twig templates for escaping bugs, CSS conflicts,
and missing Bootstrap styling:
- Fix nl2br/esc_html filter order in order details
- Add WC gallery modifier classes for zoom/photoswipe JS init
- Fix HTML entity double-encoding in headings (up-sells, cross-sells, related)
- Remove wrong 'is defined' guards on function calls
- Remove duplicate deprecated hooks in dashboard
- Add |raw to brand description HTML filter chain
- Add role="alert" for accessibility, |esc_attr on notification types
- Style mini-cart remove button as Bootstrap btn
- Make shipping form-check class conditional
- Add shop_table CSS reset and gallery opacity fallback

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 18:50:19 +01:00

88 lines
3.3 KiB
Twig

{#
# Mini Cart / Cart Widget (Bootstrap 5 Override)
#
# Renders the mini cart as an offcanvas slide-in panel.
#
# Expected context:
# cart_items - Array from WC()->cart->get_cart()
# cart_is_empty - Whether cart is empty
# cart_subtotal - Cart subtotal HTML
# args - Widget arguments (list_class)
#
# WooCommerce PHP equivalent: cart/mini-cart.php
#
# @package WcBootstrap
# @since 0.1.0
#}
{{ do_action('woocommerce_before_mini_cart') }}
{% if not cart_is_empty|default(true) %}
<ul class="woocommerce-mini-cart list-unstyled {{ args.list_class|default('') }}">
{{ do_action('woocommerce_before_mini_cart_contents') }}
{% if cart_items is defined %}
{% for item in cart_items %}
<li class="woocommerce-mini-cart-item d-flex gap-3 py-2 border-bottom {{ item.css_class|default('') }}">
{# Remove link #}
<a href="{{ item.remove_url|esc_url }}"
class="btn btn-sm btn-outline-danger remove remove_from_cart_button"
aria-label="{{ __('Remove this item') }}"
data-product_id="{{ item.product_id }}"
data-cart_item_key="{{ item.key }}">
<i class="bi bi-x" aria-hidden="true"></i>
</a>
{# Thumbnail #}
{% if item.permalink %}
<a href="{{ item.permalink|esc_url }}" class="flex-shrink-0" style="width: 50px;">
{{ item.thumbnail|raw }}
</a>
{% endif %}
{# Product info #}
<div class="flex-grow-1">
{% if item.permalink %}
<a href="{{ item.permalink|esc_url }}" class="text-decoration-none d-block small fw-semibold">
{{ item.product_name }}
</a>
{% else %}
<span class="d-block small fw-semibold">{{ item.product_name }}</span>
{% endif %}
{{ item.item_data_html|default('')|raw }}
<span class="quantity small text-body-secondary">
{{ item.quantity }} &times; {{ item.price|raw }}
</span>
</div>
</li>
{% endfor %}
{% endif %}
{{ do_action('woocommerce_mini_cart_contents') }}
</ul>
<div class="woocommerce-mini-cart__total border-top pt-3 mt-2">
{{ do_action('woocommerce_widget_shopping_cart_total') }}
<p class="total d-flex justify-content-between fw-bold mb-3">
<span>{{ __('Subtotal:') }}</span>
<span>{{ cart_subtotal|raw }}</span>
</p>
</div>
{{ do_action('woocommerce_widget_shopping_cart_before_buttons') }}
<div class="woocommerce-mini-cart__buttons d-grid gap-2">
{{ do_action('woocommerce_widget_shopping_cart_buttons') }}
</div>
{{ do_action('woocommerce_widget_shopping_cart_after_buttons') }}
{% else %}
<p class="woocommerce-mini-cart__empty-message text-body-secondary text-center py-3">
{{ __('No products in the cart.') }}
</p>
{% endif %}
{{ do_action('woocommerce_after_mini_cart') }}