. Дополнительные параметры (свойства) товара Virtuemart
Дополнительные параметры (свойства) товара Virtuemart

Дополнительные параметры (свойства) товара Virtuemart

Обратился ко мне клиент с просьбой разработать функционал для добавления дополнительных свойств товара. Таких как вес, габариты, длина и т.п.

Ну, я клиенту, мол, в Virte есть такой функционал. Когда добавляем товар, можно перейти на вкладочку "Габариты и вес" и указать требуемые параметры. "Э-э-э, нет" - сказал мне клиент. "Там можно указать только жёстко заданные параметры, а что если мне нужно указать материал, из которого сделано то или иное изделие. "

Ну я, не будь дураком, предложил добавить требуемые поля в админку, также "жёстко", но клиент привёл железный аргумент. "А если," - говорит он - "я завтра захочу добавить ещё один параметр? А если вдруг какой-то станет ненужным вообще? Я может вообще завтра поменяю перечень товаров и начну продавать утиное перо. Нафига мне нужна тогда длина?"

Как, говорится, хозяин - барин. Надо - значит сделаем. Вирт установлен, чай заварен и налит, можно приступать к работе. Тем более, вчера мне привезли из Казахстана шаманские тапки Хоттабыча, вот такие:

Не оказалось под рукой фотоаппарата, поэтому щёлнул на свой древний телефон. Ну да не суть, в таких тапках работа пойдёт споро, даже бубен не потребуется. ))

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

Теоретически всё это безобразие я видел так:

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

По структуре таблицы я решил сделать так:

Первая таблица будет содержать поля для ввода id параметра, его имени. Вторая таблица будет содержать id товара, id параметра, значение параметра. Ну что-то типа такого:

С первой таблицей всё понятно, во второй же я сейчас схематически показал, что для товара с заданы три параметра: вес (id = 1), высота (id = 2), материал (id = 3) с соответствующими значениями.

Хотел бы остановиться на том, что данный материал я писал в процессе разработки функционала и первая таблица на самом деле будет иной. Изначально в первой таблице я планировал сделать только два столбца, но но в последствии решил добавить ещё два, один из которых будет хранить метку, опубликован параметр или нет, а второй будет отвечать за сортировку, чтобы клиент мог выводить параметры в той последовательности, в которой ему необходимо.

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

ЧАСТЬ ПЕРВАЯ. Реализация функционала добавления параметров, создание списка параметров.

Шаг 1. Добавляем в БД таблицу 1.

Выполняем запрос в БД. Не забываем указывать вместо jos свой префикс.

Шаг 2. Добавляем ссылку в меню админки Virtuemart.

Редактируем файл /administrator/components/com_virtuemart/header.php

В районе 283 строки, после кода:

Добавляем пункт меню:

Редактируем языковой файл /administrator/components/com_virtuemart/languages/common/russian.php

Вставляем в любое место страницы (я вставил после 432 строки) код:

Обновляем страницу вирта в админке. Должны увидеть нашу ссылку.

Шаг 3. Правим файлы.

Открываем файл /administrator/components/com_virtuemart/toolbar.php. После 80 строки:

Открываем файл /administrator/components/com_virtuemart/toolbar.virtuemart.php. После 74 строки:

Шаг 4. Добавляем новые файлы.

Сначала хотел расписать код, но тогда получится не статья, а длинная портянка. Поэтому я прилагаю данные файлы архивом.

Cкачиваете архив, распаковываете. Внутри будет папка administrator, копируете её в корень сайта, при этом добавляются новые, необходимые для работы файлы, а именно: ps_product_param.php, product.product_param_list.php и product.product_param_form.php.

Шаг 5. Прописываем функции.

В админке переходим: Компоненты -> Virtuemart -> Настройки -> Список модулей, напротив модуля Product кликаем на Список функций.

После того, как перешли на страницу функций кликаем на кнопку Новый вверху и прописываем следующие значения:

Имя функции: paramAdd

Имя класса: ps_product_param

Метод класса: add

Права на функцию: storeadmin, admin

Описание: Добавление параметра

Сохраняем параметр и добавляем новый.

Имя функции: paramDelete

Имя класса: ps_product_param

Метод класса: delete

Права на функцию: storeadmin, admin

Описание: Удаление параметра

Сохраняем параметр и добавляем новый.

Имя функции: paramUpdate

Имя класса: ps_product_param

Метод класса: update

Права на функцию: storeadmin, admin

Описание: Обновление параметра

Сохраняем параметр и добавляем новый.

Имя функции: paramReorder

Имя класса: ps_product_param

Метод класса: reorder

Права на функцию: storeadmin, admin

Описание: Сортировка параметров

Всё, первая часть задачи завершена. Проверяем работу функционала.

ЧАСТЬ ВТОРАЯ. Добавляем параметры в товар.

Шаг 1. Добавляем новую вкладку.

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

📎📎📎📎📎📎📎📎📎📎