WT Custom RadicalMart add to cart

Скачивания 2 Просмотры 4 CTR 50% Plg Free

Плагин добавляет массив с 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

Что нового

Добавлено

Первая версия

Первая версия расширения

Смотрите также

Расширения Joomla WebTolk

99 Всего расширений
12 Категорий
507 Выпущено версий
594048 Всего скачиваний
Корзина
Корзина пуста