<?php
if (! function_exists('woocommerce_mini_cart')) {
return '';
}
if (
! WC()->cart
||
! method_exists(WC()->cart, 'get_cart_contents_count')
) {
return '';
}
if (! isset($device)) {
$device = 'desktop';
}
if (isset($render_args['device'])) {
$device = $render_args['device'];
}
$has_only_item = false;
$has_only_cart = false;
$has_only_totals = false;
$has_only_count = false;
if (blocksy_default_akg('has_empty_cart', $atts, 'no') === 'yes') {
$attr['data-cart'] = 'hide-empty';
}
if (isset($render_args['only_item'])) {
$has_only_item = $render_args['only_item'];
}
if (isset($render_args['only_cart'])) {
$has_only_cart = $render_args['only_cart'];
}
if (isset($render_args['only_totals'])) {
$has_only_totals = $render_args['only_totals'];
}
if (isset($render_args['only_count'])) {
$has_only_count = $render_args['only_count'];
}
$has_badge = blocksy_default_akg('has_cart_badge', $atts, 'yes') === 'yes';
$icon = apply_filters('blocksy:header:cart:icons', [
'type-1' => '<svg aria-hidden="true" width="15" height="15" viewBox="0 0 15 15"><path d="M14.1,1.6C14,0.7,13.3,0,12.4,0H2.7C1.7,0,1,0.7,0.9,1.6L0.1,13.1c0,0.5,0.1,1,0.5,1.3C0.9,14.8,1.3,15,1.8,15h11.4c0.5,0,0.9-0.2,1.3-0.6c0.3-0.4,0.5-0.8,0.5-1.3L14.1,1.6zM13.4,13.4c0,0-0.1,0.1-0.2,0.1H1.8c-0.1,0-0.2-0.1-0.2-0.1c0,0-0.1-0.1-0.1-0.2L2.4,1.7c0-0.1,0.1-0.2,0.2-0.2h9.7c0.1,0,0.2,0.1,0.2,0.2l0.8,11.5C13.4,13.3,13.4,13.4,13.4,13.4z M10,3.2C9.6,3.2,9.2,3.6,9.2,4v1.5c0,1-0.8,1.8-1.8,1.8S5.8,6.5,5.8,5.5V4c0-0.4-0.3-0.8-0.8-0.8S4.2,3.6,4.2,4v1.5c0,1.8,1.5,3.2,3.2,3.2s3.2-1.5,3.2-3.2V4C10.8,3.6,10.4,3.2,10,3.2z"/></svg>',
'type-2' => '<svg aria-hidden="true" width="15" height="15" viewBox="0 0 15 15"><path d="M0.6,0.7C0.3,0.7,0,0.8,0,1.1s0.1,0.6,0.6,0.6l0,0h1c0.1,0,0.1,0.1,0.1,0.1L4.2,10c0.3,0.7,0.9,1.2,1.6,1.2H12c0.7,0,1.3-0.6,1.6-1.2L15,4.7c0.1-0.3-0.1-0.6-0.4-0.6h-0.1H3.6L2.8,1.7l0,0c0-0.7-0.6-1-1.2-1H0.6zM6.1,12.2c-0.6,0-1,0.6-1,1c0,0.4,0.6,1,1,1c0.4,0,1-0.6,1-1C7.2,12.8,6.7,12.2,6.1,12.2zM11.7,12.2c-0.6,0-1,0.6-1,1c0,0.4,0.6,1,1,1c0.6,0,1-0.6,1-1C12.7,12.8,12.3,12.2,11.7,12.2z"/></svg>',
'type-3' => '<svg aria-hidden="true" width="15" height="15" viewBox="0 0 15 15"><path d="M4.5,1.1C3.9,1.1,3.4,1.4,3.1,2L1.7,5.9H0.6C0.5,5.9,0.1,6.1,0,6.2c0,0,0,0.3,0,0.5L1.7,13c0.1,0.6,0.8,0.9,1.3,0.9h8.9c0.6,0,1.2-0.5,1.4-0.9L15,6.7c0-0.2,0-0.5-0.2-0.6c0-0.1-0.3-0.1-0.4-0.1h-1.1l-1.6-4.1l0,0c-0.3-0.5-0.6-0.8-1.2-0.8H4.5zM4.5,2.5h5.9l1.5,3.5H3.1L4.5,2.5z M4.8,7.9c0.4,0,0.6,0.3,0.6,0.6v2.7c0,0.4-0.3,0.6-0.6,0.6c-0.3,0.2-0.6-0.3-0.6-0.6V8.6C4.1,8.2,4.4,7.9,4.8,7.9zM7.5,7.9c0.5,0,0.6,0.3,0.6,0.6v2.7c0,0.4-0.3,0.6-0.6,0.6c-0.5,0-0.6-0.3-0.6-0.6V8.6C6.9,8.2,7,7.9,7.5,7.9zM10.2,7.9c0.4,0,0.6,0.3,0.6,0.6v2.7c0,0.4-0.3,0.6-0.6,0.6c-0.5,0-0.6-0.3-0.6-0.6V8.6C9.6,8.2,9.9,7.9,10.2,7.9z"/></svg>',
'type-4' => '<svg aria-hidden="true" width="15" height="15" viewBox="0 0 15 15"><path d="M11.2,3.5V1.8c0-1-0.8-1.8-1.8-1.8h-4c-1,0-1.8,0.8-1.8,1.8v1.8H0v9.8c0,1,0.8,1.8,1.8,1.8h11.5c1,0,1.8-0.8,1.8-1.8V3.5H11.2zM5.2,1.8c0-0.1,0.1-0.2,0.2-0.2h4c0.1,0,0.2,0.1,0.2,0.2v1.8H5.2V1.8z M13.5,13.2c0,0.1-0.1,0.2-0.2,0.2H1.8c-0.1,0-0.2-0.1-0.2-0.2V5h12V13.2zM5.5,8c0.4,0,0.8-0.3,0.8-0.8S5.9,6.5,5.5,6.5S4.8,6.8,4.8,7.2C4.8,7.7,5.1,8,5.5,8zM9.5,8c0.4,0,0.8-0.3,0.8-0.8S9.9,6.5,9.5,6.5S8.8,6.8,8.8,7.2C8.8,7.7,9.1,8,9.5,8z"/></svg>',
'type-5' => '<svg aria-hidden="true" width="15" height="15" viewBox="0 0 15 15"><path d="M4.2,6.3c0-0.4,0.3-0.8,0.8-0.8s0.8,0.3,0.8,0.8c0,1,0.8,1.8,1.8,1.8s1.8-0.8,1.8-1.8c0-0.4,0.3-0.8,0.8-0.8s0.8,0.3,0.8,0.8c0,1.8-1.5,3.2-3.2,3.2S4.2,8.1,4.2,6.3zM14.2,3.6v9.7c0,1-0.8,1.7-1.8,1.7h-10c-1,0-1.8-0.8-1.8-1.7V3.6L3.1,0h8.8L14.2,3.6z M2.9,3h9.2l-1-1.5H3.9L2.9,3zM12.8,4.5H2.2v8.8c0,0.1,0.1,0.2,0.2,0.2h10c0.1,0,0.2-0.1,0.2-0.2V4.5z"/></svg>',
'type-6' => '<svg aria-hidden="true" width="15" height="15" viewBox="0 0 15 15"><path d="M15,6.2c0-0.1,0-0.4-0.1-0.5c-0.3-0.5-0.8-0.5-1.1-0.5h-1.3L8.7,1.3C8.4,0.8,8,0.7,7.5,0.7S6.6,0.8,6.3,1.3L2.6,5.2H1.2c-0.3,0-0.8,0.2-0.9,0.4C0.2,5.8,0,6.1,0,6.4v0.9l0.9,5.1c0.2,1.2,1.2,1.9,2.2,1.9h8.6c1,0,2.1-0.9,2.2-1.9l0.9-5.1C14.9,7.3,15,6.2,15,6.2zM7,2c0.2-0.1,0.3-0.3,0.5-0.3s0.3,0,0.5,0.1L11,5H4.1C4.1,5,7,2,7,2z M4.4,11.6c-0.3,0-0.6-0.1-0.6-0.6L3.6,8.5c0-0.3,0.3-0.6,0.6-0.6s0.4,0.3,0.6,0.6L5,11.2C5,11.3,4.7,11.5,4.4,11.6z M8.1,11c0,0.3-0.3,0.6-0.6,0.6c-0.3,0-0.6-0.3-0.6-0.6V8.3c0-0.3,0.3-0.6,0.6-0.6c0.3,0,0.6,0.3,0.6,0.6C8.1,8.3,8.1,11,8.1,11z M11.4,8.5L11.1,11c0,0.3-0.3,0.6-0.6,0.6s-0.5-0.3-0.5-0.6l0.2-2.7c0-0.3,0.3-0.6,0.6-0.6C11.1,7.7,11.4,8,11.4,8.5C11.4,8.3,11.4,8.3,11.4,8.5z"/></svg>',
]);
$class = 'ct-header-cart';
$item_visibility = blocksy_default_akg('header_cart_visibility', $atts, [
'tablet' => true,
'mobile' => true,
]);
$class .= ' ' . blocksy_visibility_classes($item_visibility);
$has_cart_dropdown = blocksy_default_akg(
'has_cart_dropdown',
$atts,
'yes'
) === 'yes';
$cart_drawer_type = blocksy_default_akg('cart_drawer_type', $atts, 'dropdown');
// Force dropdown drawer type if option is not visible.
if (
$cart_drawer_type !== 'dropdown'
&&
apply_filters(
'blocksy:header:cart:cart_drawer_type:option',
'hidden'
) === 'hidden'
) {
$cart_drawer_type = 'dropdown';
}
$cart_total_class = 'ct-label';
$cart_subtotal_visibility = blocksy_default_akg(
'cart_subtotal_visibility',
$atts,
[
'desktop' => true,
'tablet' => true,
'mobile' => true,
]
);
$cart_total_class .= ' ' . blocksy_visibility_classes($cart_subtotal_visibility);
$cart_total_position = blocksy_expand_responsive_value(
blocksy_akg('cart_total_position', $atts, 'left')
);
$icon_type = blocksy_default_akg('mini_cart_type', $atts, 'type-1');
if (empty($icon_type)) {
$icon_type = 'type-1';
}
$icon = $icon[$icon_type];
if (function_exists('blc_get_icon')) {
$icon_source = blocksy_default_akg('icon_source', $atts, 'default');
if ( $icon_source === 'custom' ) {
$icon = blc_get_icon([
'icon_descriptor' => blocksy_akg('icon', $atts, [
'icon' => 'blc blc-cart'
]),
'icon_container' => false
]);
}
}
$item_class = 'ct-cart-item';
$url = wc_get_cart_url();
$auto_open_output = '';
if ($has_cart_dropdown && $cart_drawer_type === 'offcanvas') {
$item_class .= ' ct-offcanvas-trigger';
$url = '#woo-cart-panel';
$auto_open_cart = blocksy_default_akg('auto_open_cart', $atts, [
'archive' => false,
'product' => false,
]);
$components = [];
if ($auto_open_cart['archive']) {
$components[] = 'archive';
}
if ($auto_open_cart['product']) {
$components[] = 'product';
}
if (! empty($components)) {
$auto_open_output = 'data-auto-open="' . implode(':', $components) . '"';
}
}
$url = apply_filters('blocksy:header:cart:url', $url);
ob_start();
$count_output = '';
$current_count = 0;
if (WC()->cart && method_exists(WC()->cart, 'get_cart_contents_count')) {
$current_count = WC()->cart->get_cart_contents_count();
}
$count_output = blocksy_html_tag(
'span',
[
'class' => 'ct-dynamic-count-cart',
'data-count' => $has_badge ? $current_count : 0,
],
$current_count
);
$totals_output = '';
$label_mask = blocksy_expand_responsive_value(
blocksy_default_akg('cart_total_label', $atts, '{price}')
)[$device];
$label_parts = explode(
'{price}',
$label_mask
);
if (WC()->cart) {
$totals_output = WC()->cart->get_cart_subtotal();
$totals_output = blocksy_html_tag(
'span',
[
'class' => 'ct-amount'
],
$totals_output
);
}
$before_totals = isset($label_parts[0]) ? $label_parts[0] : '';
$after_totals = isset($label_parts[1]) ? $label_parts[1] : '';
$aria_label = __('Shopping cart', 'blocksy');
$label = $before_totals . $totals_output . $after_totals;
if (
! empty($before_totals)
||
! empty($after_totals)
) {
$aria_label = '';
}
$screen_reader_text = '';
if (! empty($aria_label)) {
$screen_reader_text = blocksy_html_tag(
'span',
[ 'class' => 'screen-reader-text' ],
$aria_label
);
}
$icon_classes = [
'ct-icon-container',
blocksy_visibility_classes(
blocksy_akg('cart_icon_visibility', $atts, [
'desktop' => true,
'tablet' => true,
'mobile' => true,
])
)
];
?>
<a class="<?php echo $item_class ?>"
href="<?php echo esc_attr($url) ?>"
data-label="<?php echo $cart_total_position[$device] ?>"
<?php echo $auto_open_output ?>>
<?php
echo $screen_reader_text;
echo blocksy_html_tag(
'span',
array_merge(
[
'class' => $cart_total_class,
'data-price' => strpos($label_mask, '{price}') !== false ? 'yes' : 'no'
],
),
$label
);
?>
<span class="<?php echo esc_attr(implode(' ', $icon_classes)) ?>" aria-hidden="true">
<?php
echo $count_output;
/**
* Note to code reviewers: This line doesn't need to be escaped.
* The value used here escapes the value properly.
* It contains an inline SVG, which is safe.
*/
echo $icon;
?>
</span>
</a>
<?php
$item = ob_get_clean();
if ($has_only_item) {
echo $item;
return;
}
global $blocksy_mini_cart_ratio;
global $blocksy_mini_cart_size;
$blocksy_mini_cart_ratio = blocksy_default_akg('thumb_ratio', $atts, '1/1');
$blocksy_mini_cart_size = blocksy_default_akg(
'image_size',
$atts,
'woocommerce_thumbnail'
);
ob_start();
if (isset($render_args['only_cart']) && $render_args['only_cart']) {
woocommerce_mini_cart();
}
$content = ob_get_clean();
$blocksy_mini_cart_ratio = null;
$blocksy_mini_cart_size = null;
$cart_otput = blocksy_html_tag(
'div',
[
'class' => 'ct-cart-content',
'data-count' => $current_count
],
$content
);
if ($has_only_cart) {
echo $cart_otput;
return;
}
if ($has_only_totals) {
echo $totals_output;
return;
}
if ($has_only_count) {
echo $count_output;
return;
}
?>
<div
class="<?php echo esc_attr(trim($class)) ?>"
<?php echo blocksy_attr_to_html($attr) ?>>
<?php
echo $item;
if ($has_cart_dropdown && $cart_drawer_type === 'dropdown') {
echo $cart_otput;
}
?>
</div>
|