WT Custom RadicalMart add to cart
- Категории: Плагины Joomla, RadicalMart
- Версия: 1.0.0
- Дата:
Плагин добавляет массив с id товаров в корзине и их количества в макеты вывода в списке товаров для компонента интернет-магазина RadicalMart для Joomla.
Описание
Плагин добавляет массив с id товаров в корзине и их количества в лейауты в списке товаров для компонента интернет-магазина RadicalMart на Joomla. В этом макете templates/<твой_шаблон>/html/com_radicalmart/category/default.php или default_grid.php будет доступно
<?php
$cart_products = [];
if($this->category->plugins) {
$cart_products = $this->category->plugins->get('cart_products', []);
}
Который потом можно передать в рендер лейаута товара следующим образом
<?php
// Файл templates/<твой_шаблон>/html/com_radicalmart/category/default_grid.php
// Где у тебя строка
echo '<div class="mb-3">' . LayoutHelper::render($layout, ['product' => $item, 'mode' => $this->mode]) . '</div>';
// добавь в массив полученные товары
LayoutHelper::render($layout, ['product' => $item, 'mode' => $this->mode, 'cart_products' => $cart_products]) ;
В итоговом файле переопределения уже лейаута товара (элемент списка в списке товаров) templates/<твой_шаблон>/html/layouts/components/radicalmart/products/item/grid.php у тебя уже будут доступны товары корзины.
<?php
// Файл templates/<твой_шаблон>/html/layouts/components/radicalmart/products/item/grid.php
/**
* Layout variables
* -----------------
*
* @var object $product Product object.
* @var string $mode RadicalMart mode.
* @var array $cart_products Товары RadicalMart в корзине. Эту строчку мы добавляем для документации в коде.
*
*/
// Это макет одного товара.
// Добавляем проверку на наличие товара в корзине
// @var bool $in_cart true если товар в корзине
$in_cart = array_key_exists($product->id, $cart_products);
?>
<div class="card-footer border-0 bg-transparent">
<div class="d-flex flex-column justify-content-between gap-2">
<div>
<?php
if (!$hidePrice): ?>
<?php
if ($product->price['discount_enable']): ?>
<div class="small text-muted">
<s><?php
echo $product->price['base_string']; ?></s>
</div>
<?php
endif; ?>
<div class="h3 fw-bold m-0"><?php
echo $product->price['final_string']; ?></div>
<?php
elseif (empty($product->in_stock)): ?>
<span class="text-danger">
<?php
echo Text::_('COM_RADICALMART_NOT_IN_STOCK'); ?>
</span>
<?php
endif; ?>
</div>
<div>
<?php if (!$hidePrice && $mode === 'shop' && (int)$product->state === 1): ?>
<div radicalmart-cart="product" data-id="<?php echo $product->id; ?>">
<?php
/**
* Наши правки. Скрываем кнопку добавления в корзину, если товар уже в корзине.
* Выводим кнопки изменения количества и само количество товара
* Это фрагмент кода из макета корзины,
* которым мы заменили стандартное поле количества
*
*/
?>
<?php /**
* Скрываем кнопки +/- , если товара нет в корзине.
*/
?>
<div class="input-group <?php echo !$in_cart ? 'd-none':'';?>">
<a href="javascript:void(0);"
class="text-danger input-group-text text-decoration-none"
radicalmart-cart="quantity_minus">
<span class="icon-minus"></span>
</a>
<input radicalmart-cart="quantity" type="text" name="quantity" data-set="1"
class="form-control text-center"
step="<?php echo $product->quantity['step']; ?>"
min="<?php
echo $product->quantity['min'] ?? 1; ?>"
<?php
if (!empty($product->quantity['max'])) {
echo 'max="' . $product->quantity['max'] . '"';
} ?>
value="<?php echo $in_cart ? (int)$cart_products[$product->id]: $product->quantity['min']; ?>"
readonly="readonly"/>
<a href="javascript:void(0);"
class="text-success input-group-text text-decoration-none"
radicalmart-cart="quantity_plus">
<span class="icon-plus"></span>
</a>
</div>
<?php /**
* Скрываем кнопку добавления в корзину, если товар уже в корзине.
*/
?>
<button type="button" radicalmart-cart="add"
class="btn btn-outline-primary py-1 fs-6 fw-bold <?php echo $in_cart ? 'd-none':'';?>">
<?php
echo Text::_('COM_RADICALMART_CART_ADD'); ?>
</button>
</div>
<?php
elseif ($hidePrice || $mode === 'catalog'): ?>
<a href="/<?php
echo $product->link; ?>"
class="btn btn-primary fw-bold">
<?php
echo Text::_('COM_RADICALMART_READMORE'); ?>
</a>
<?php
endif; ?>
</div>
</div>
</div>
Для того чтобы кнопки +/- показывались после добавления товара в корзину, нужно добавить в страницу корзины javascript код, который это будет делать. Я пока что добавил в файл templates/<твой_шаблон>/html/com_radicalmart/category/default_grid.php, однако можно вынести этот код и в отдельный файл и подключать с помощью WebAsset Manager.
// Триггер вызывается после добавления товара RadicalMart в корзину
document.addEventListener('onRadicalMartCartAfterAddProduct', function(event) {
// Получаем содержимое ajax-ответа
// cart - это корзина
const cart = event.detail
// entry - это товар, который добавили в корзину
const product_id = cart.entry.product_id;
// кнопки +/- и кнопка добавления в корзину в списке товаров
const product_buttons = document.querySelector(`[radicalmart-cart="product"][data-id="${product_id}"]`);
// кнопка добавления в корзину в списке товаров
let add_button = product_buttons.querySelector('button[radicalmart-cart="add"]');
// скрываем кнопку добавления в корзину
add_button.classList.add('d-none');
// показываем кнопки +/-
let quantity_group = product_buttons.querySelector('.input-group');
quantity_group.classList.remove('d-none');
});
Joomla
- Тип расширения:
- Плагин
- Каталог:
- Radicalmart
- Версия Joomla:
- 5.4.1