Недавно поступила просьба добавить категории товаров в RokQuickCart. Компонент, довольно интересный и удобный, но настолько простой, что в нем не реализованы категории. Потому данный вопрос мне стал интересен.
В статье описано решение исключительно для Joomla 3+. Связано это с неактуальностью Joomla 2.5. Для написания статьи использовалась сборка: Joomla 3.9.16 + RokQuickCart 2.1.3
Важное уточнение. В данной статье не предвидится целой разработки функционала по созданию категорий. Здесь я опишу лишь возможность деления товаров на группы, а также создание пунктов меню для групп. Это и позволит добиться нужного эффекта.
Помимо этого, правки затронут ядро плагина, поэтому его дальнейшее обновление будет невозможным, в противном случае все изменения пропадут.
Как это работает?
1. База данных
Первое, что нам необходимо, это отредактировать в базе данных таблицу с товарами, чтобы можно было указать каждому товару, к какой группе (категории) они относятся.
Для этого переходим в базу данных сайта и открываем таблицу #__rokquickcart, переходим на вкладку «Структура» и добавляем новое поле (category).
В рамках решения вопроса не вижу смысла заморачиваться с текстовыми определениями категорий, поэтому ограничусь лишь указанием их ID, поэтому поле буду создавать типа INT.
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."
Готово. Если сейчас перейти в административную панель и открыть карточку товара, то можно увидеть наше поле, и оно даже работает — сохраняет наш идентификатор категории (группы).
Как писал ранее, мы будем просто делить товары на группы, поэтому просто решаем для себя какие идентификаторы к какой группе относятся, например «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. Это позволит определить для каждого из пунктов меню товары из каких групп отображать.
Если Вам хочется еще добавить пункт меню, в котором будут отображаться все товары без деления на группы, то в поле «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'));
}
Готово. Вернемся к нашему примеру. Если зайти в меню «Кроссовки» или «Футболки», то мы увидим товары, назначенные этим группам соответственно.
Комментарии
Здесь еще никто не оставлял комментарии.