Категории товаров в RokQuickCart

Недавно поступила просьба добавить категории товаров в RokQuickCart. Компонент, довольно интересный и удобный, но настолько простой, что в нем не реализованы категории. Потому данный вопрос мне стал интересен.

В статье описано решение исключительно для Joomla 3+. Связано это с неактуальностью Joomla 2.5. Для написания статьи использовалась сборка: Joomla 3.9.16 + RokQuickCart 2.1.3

Важное уточнение. В данной статье не предвидится целой разработки функционала по созданию категорий. Здесь я опишу лишь возможность деления товаров на группы, а также создание пунктов меню для групп. Это и позволит добиться нужного эффекта.

Помимо этого, правки затронут ядро плагина, поэтому его дальнейшее обновление будет невозможным, в противном случае все изменения пропадут.

Как это работает?

1. База данных

Первое, что нам необходимо, это отредактировать в базе данных таблицу с товарами, чтобы можно было указать каждому товару, к какой группе (категории) они относятся.

Для этого переходим в базу данных сайта и открываем таблицу #__rokquickcart, переходим на вкладку «Структура» и добавляем новое поле (category).

В рамках решения вопроса не вижу смысла заморачиваться с текстовыми определениями категорий, поэтому ограничусь лишь указанием их ID, поэтому поле буду создавать типа INT.

Категории товаров в RokQuickCart - Создаем поле в базе данных
Категории товаров в RokQuickCart — Создаем поле в базе данных

2. Административная часть — Карточка товара

Теперь нам необходимо создать поле ввода категории (группы) в административной панели.

Открываем файл cartitem.xml в каталоге /administrator/components/com_rokquickcart/models/forms/ и находим в данном файле следующий код (14-21 строки):

<field name="name" type="text" label="ROKQUICKCART_NAME" description="ROKQUICKCART_TIP_NAME" class="inputbox" size="100" required="true" />

Сразу после него добавляем наше новое поле:

<field name="category" type="text" label="ROKQUICKCART_CATEGORY" description="ROKQUICKCART_TIP_CATEGORY" class="inputbox" default="0" size="100" required="true" />

Поле создали, теперь необходимо его отобразить. Открываем файл edit_30.php в каталоге /administrator/components/com_rokquickcart/views/cartitem/tmpl/ и находим в данном файле следующий код (62-65 строки):

<div class="control-group">
	<div class="control-label"><?php echo $this->form->getLabel('name'); ?></div>
	<div class="controls"><?php echo $this->form->getInput('name'); ?></div>
</div>

Сразу после него добавляем наше поле:

<div class="control-group">
	<div class="control-label"><?php echo $this->form->getLabel('category'); ?></div>
	<div class="controls"><?php echo $this->form->getInput('category'); ?></div>
</div>

Также, нам потребуется добавить языковые константы, откроем файл en-GB.com_rokquickcart.ini в каталоге /administrator/components/com_rokquickcart/language/en-GB/ (у меня английская версия) и добавьте строки в конце:

ROKQUICKCART_CATEGORY="Category"
ROKQUICKCART_TIP_CATEGORY="ID category."

Готово. Если сейчас перейти в административную панель и открыть карточку товара, то можно увидеть наше поле, и оно даже работает — сохраняет наш идентификатор категории (группы).

Категории товаров в RokQuickCart - Параметры товара
Категории товаров в RokQuickCart — Параметры товара

Как писал ранее, мы будем просто делить товары на группы, поэтому просто решаем для себя какие идентификаторы к какой группе относятся, например «1» у нас будет «Кросовки», а «2» — «Футболки», поэтому всем кросовкам на сайте указываем Category = 1, а футболкам — Category = 2. Далее еще вернемся к этому.

3. Административная часть — Пункты меню

Итак, товары мы поделили на группы, идем дальше, теперь нам нужны соответствующие пункты меню под каждую группу.

Как мы знаем, RockQuickCart дает возможность создать пункт меню, в котором будут отображаться все товары. Нам, в свою очередь, необходимо внести изменения так, чтобы можно было создать несколько пунктов меню типа «RockQuickCart» и чтобы каждый из них отображал свою группу товаров.

Откроем файл default.xml в каталоге /components/com_rokquickcart/views/rokquickcart/tmpl/ и сразу после закрывающего тега дописываем вывод поля, должно получиться следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<metadata>
	<layout title="RokQuickCart">
		<message>TYPEROKQUICKCARTQUICKCART</message>
	</layout>
	<fields name="params">
		<fieldset name="request">
			<field name="category_id" type="text" description="ROKQUICKCART_TIP_CATEGORY" label="ROKQUICKCART_CATEGORY"></field>
		</fieldset>
	</fields>
</metadata>

Готово. Теперь мы можем смело создавать пункты меню типа «RokQuickCart» с делением на подгруппы. Вернемся к примеру выше. Создадим пункт меню «Кроссовки» и укажем в поле «Category» = 1. Создадим пункт меню «Футболки» с «Category» = 2. Это позволит определить для каждого из пунктов меню товары из каких групп отображать.

Категории товаров в RokQuickCart - Параметры меню
Категории товаров в RokQuickCart — Параметры меню

Если Вам хочется еще добавить пункт меню, в котором будут отображаться все товары без деления на группы, то в поле «Category» укажите ноль (0). В этом случае будут показаны все товары.

4. Лицевая часть — Список товаров

Если сейчас посмотреть с лицевой стороны все эти пункты меню, то ничего не изменилось. Каждый из них продолжает отображать все товары независимо от групп.

Открываем файл rokquickcart.php в каталоге /components/com_rokquickcart/models/ и находим в нем следующую строку (84 строка):

$this->setState('layout', JFactory::getApplication()->input->get('layout'));

Сразу после нее пишем:

$this->setState('category_id', $params->get('category_id'));

В этом же файле находим строку (примерно 103-105 строка):

$query->where('published = 1');

И сразу после нее добавляем следующее условие:

if ($this->getState('category_id')) {
	$query->where('category = ' . $this->getState('category_id'));
}

Готово. Вернемся к нашему примеру. Если зайти в меню «Кроссовки» или «Футболки», то мы увидим товары, назначенные этим группам соответственно.

Комментарии

Здесь еще никто не оставлял комментарии.

Добавить комментарий