5 копеек про Virtuemart

Эта небольшая статья родилась как обсуждение в одном из профильных чатов по Joomla. В ней рассказывается о плюсах и минусах компонента интернет-магазина для Joomla – Virtuemart.

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

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

Virtuemart имеет свои минусы, это несомненно. Его код сложен для понимания, это тоже факт. Но есть и некоторые плюсы, которыми могут похвастаться далеко не все аналоги:

Virtuemart полностью бесплатный

Как Joomla. Там нет никаких хитрых лицензий вроде "нельзя удалять копирайт". Берете и делайте с ним что угодно. Ну или почти =). Код Virtuemart полностью открыт.

Очень широкий функционал из коробки

Который, правда, периодически требует напильника. Многие ли аналоги могут похвастаться своими менеджером доп.полей, интегрированным с товарами, и менеджером пользовательских полей для корзины и кабинета? А еще:

  • Дочерние товары (в том числе, учитывающие остатки)
  • Настраиваемые поля разных типов
  • Поля-атрибуты корзины (влияющие на стоимость)
  • Мультивариант (возможность продавать, например, обувь, где у одного товара будет несколько разных цветов и несколько разных размеров, по каждому сочетанию которых будут контролироваться остатки и доступность будет отображаться в реальном времени)
  • Менеджер статусов заказов
  • Менеджер отзывов
  • Налоговые правила
  • Группы покупателей
  • Мультицены товаров в зависимости от групп или количества, которые работают совместно с налоговыми правилами
  • Минимальная сумма заказа
  • Менеждеры оплаты и доставки, с возможностью использовать сторонние плагины
  • Менеджер производителей
  • Купоны
  • Медиа-менеджер
  • Мультивалютность
  • …и многое другое

Есть и упущения по функционалу

Которые компенсируются парой сторонних расширений.

Я бы здесь выделил безусловно фильтр и еще корзину (если нужна одностраничная).

Фильтр хороший, по сути, один. CF PRO. У него нет привязки к домену а также есть шикарный функционал - например, динамически скрывать опции, которые приведут к пустым результатам отбора. Все работает по AJAX. 

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

Весь остальной основной функционал интернет-магазина покрывают возможности из коробки.

Бесплатные плагины оплаты и доставки

Также хочу отметить большое количество плагинов оплаты и доставки (бесплатные плагины оплаты есть для экваеринга всех ведущих банков - Сбер, Альфа, Тинькофф - эти точно есть в свободном доступе).

Для разработчиков

Отсутствие триггеров плагинов - ложь! Их несколько десятков (ниже приведу).  Есть даже такие, которые способны влиять на выдачу товаров, поиск, сортировку. Есть для корзины, есть для кабинета, есть для смены статуса заказа. Но вот что будет верно - документация по ним ОЧЕНЬ скудная - нужно разбираться в коде.

Функционал в коробке очень широкий.  И именно из-за этого возникают сложности по коду и многие пишут, что код там очень запутанный (отчасти это правда, но далеко не всегда).

Также вы можете:

  • Переопределить почти что угодно,
  • Использовать подмакеты (аналог layout'ов Joomla)
  • Делать модули, которые с легкостью выбирают нужные объекты товаров по ID и другим признакам (можно посмотреть класс товара в VM)
  • Можете влиять на стоимость товаров в зависимости от категории, группы и др. налоговыми правилами - несколькими сразу,
  • Можете влиять на стоимость товара количеством его штук в корзине.

База данных Virtuemart построена достаточно разумно. В отдельных таблицах хранятся:

  • Товары
  • Категории
  • Языковые версии товаров и категорий
  • Цены
  • Настраиваемые поля
  • Медиа
  • Налоговые правила
  • Производители
  • Группы покупателей
  • Купоны
  • Валюты
  • Статусы заказов
  • Заказы
  • Способы оплаты
  • Способы доставки
  • Рейтинги
  • Отзывы
  • Голоса за товары
  • Поля, заполняемые пользователями

К чему это? Такой тип хранения позволяет реализовать функционал, связывающий одну запись таблицы 1 с несколькими записями других таблиц. К примеру, у одного товара может быть несколько разных цен (в зависимости от количества и др.), несколько категорий, производителей, несколько налоговых правил, множество настраиваемых полей, изображений, и т.д.

Такой подход к организации хранения данных делает сложнее выборки (по сравнению с выборками из одной таблицы здесь постоянно приходится использовать JOIN’ы или другие инструменты SQL для выборки из связанных таблиц), но зато существенно расширяет функциональные возможности.

Sublayouts очень удобны для формирования мини-блоков. У меня они всегда формируют мини-карточки, цены, блок добавления в корзину. Вызывается в одну строчку, в него можно передать, например, массив товаров, количество товаров в строке, отображать ли цену и др. Фактически, на все разделы магазина есть всего один макет, который управляет всеми мини-карточками.

По нагрузке

Широкий функционал дает бОльшую нагрузку. Это логично. В целом я бы не назвал Virtumart слишком прожорливым и требовательным к ресурсам. Потребности малого бизнеса (посещаемость до 10 тыс. в сутки) он покроет легко. Десятки тысяч товаров, сотни тысяч значений настраиваемых полей – всё это работает. Также кешируются тяжелые запросы и некоторые наборы данных.

Скорее всего ваш бизнес попадет в те 99%, которым VM хватит за глаза. Если нет, это уже история про свой собственный движок и команду разработки.

Ну и нужно сказать, чего VM не может

За все время работы я столкнулся только с двумя серьезными ограничениями:

  1. Фасовки. VM не умеет в дробное количество товара, добавляемого в корзину. Можно продавать только штуками, но не на вес, например.
  2. Мультисклад. Его нет. Есть возможность добавлять нескольких продавцов, что, по идее, можно было бы использовать как мультисклад (только что пришло в голову =)), но это костыль.

В остальном же VM хорош. Если вы можете программировать на уровне "сам делаю модули", то сможете удовлетворить на нем почти любую хотелку – свою или заказчика. 

Все это про VM3. VM4 пока, к сожалению, довольно забагован. Ошибки исправляют, но не так быстро, как хотелось бы. Такие дела... Ниже обещанный список триггеров для плагинов (инфо устарело и сейчас их даже несколько больше):

//admin

  • plgVmBuildTabs
  • plgVmOnUpdateOrderBEPayment
  • plgVmOnUpdateOrderBEShipment
  • plgVmOnShowOrderLineBEShipment
  • plgVmOnUpdateOrderBEShopper
  • plgVmOnUserStore
  • plgVmAfterUserStore

//calc

  • plgVmGetPluginInternalDataCalc
  • plgVmGetPluginInternalDataCalcList
  • plgVmOnStoreInstallPluginTable
  • plgVmDeleteCalculationRow
  • plgVmInGatherEffectRulesProduct
  • plgVmInGatherEffectRulesBill
  • plgVmInterpreteMathOp
  • plgVmOnDisplayEdit
  • plgVmAddMathOp

//not specific

  • plgVmCalculateDisplayedCartOptions
  • plgVmOnCheckAutomaticSelected
  • plgVmOnViewCartModule
  • plgVmOnViewCart
  • plgVmDisplayInOrder
  • plgVmConfirmedOrder
  • plgVmOnSelfCallBE (type passed)
  • plgVmOnSelfCallFE (type passed)
  • plgVmAfterUserStore

//coupon

  • plgVmCouponHandler
  • plgVmCouponUpdateOrderStatus
  • plgVmValidateCouponCode
  • plgVmRemoveCoupon
  • plgVmCouponInUse

//custom

  • plgVmOnAddToCartFilter
  • plgVmOnRemoveFromCart
  • plgVmOnCheckoutCheckStock
  • plgVmDeclarePluginParamsCustomVM3
  • plgVmOnStoreInstallPluginTable
  • plgVmGetTablePluginParams
  • plgVmOnDisplayProductFEVM3
  • plgVmOnProductEdit
  • plgVmPrepareCartProduct
  • plgVmOnStoreProduct
  • plgVmGetProductStockToUpdateByCustom
  • plgVmBeforeProductSearch
  • plgVmCloneProduct
  • plgVmOnDeleteProduct
  • plgVmOnDisplayEdit
  • plgVmSelectSearchableCustom

//shipment

  • plgVmOnSelectedCalculatePriceShipment
  • plgVmOnSelectCheckShipment
  • plgVmOnCheckoutCheckDataShipment
  • plgVmOnShowOrderBEShipment
  • plgVmOnUpdateOrderShipment
  • plgVmOnShowOrderFEShipment
  • plgVmOnUpdateOrderLineShipment
  • plgVmDeclarePluginParamsShipmentVM3
  • plgVmSetOnTablePluginParamsShipment
  • plgVmSetOnTablePluginShipment
  • plgVmOnStoreInstallShipmentPluginTable
  • plgVmShipmentWeight_countries (in migration script)
  • plgVmDisplayListFEShipment
  • plgVmOnProductDisplayShipment
  • plgVmOnShipmentResponseReceived

//payment

  • plgVmonSelectedCalculatePricePayment
  • plgVmOnSelectCheckPayment
  • plgVmOnCheckoutCheckDataPayment
  • plgVmgetPaymentCurrency
  • plgVmDisplayLogin
  • plgVmOnShowOrderBEPayment
  • plgVmOnUpdateOrderPayment
  • plgVmOnCancelPayment
  • plgVmOnShowOrderFEPayment
  • plgVmOnUpdateOrderLinePayment
  • plgVmDeclarePluginParamsPaymentVM3
  • plgVmSetOnTablePluginParamsPayment
  • plgVmSetOnTablePluginPayment
  • plgVmOnStoreInstallPaymentPluginTable
  • plgVmPaymentStandard (in migration script)
  • plgVmDisplayListFEPayment
  • plgVmgetEmailCurrency
  • plgVmOnProductDisplayPayment
  • plgVmOnPaymentResponseReceived
  • plgVmOnUserPaymentCancel
  • plgVmOnPaymentNotification

//calc, payment, shipment, custom

  • plgVmConfirmedOrder

//shipment, payment, extend, userfield, coupon

  • plgVmOnCheckoutAdvertise

//userfield

  • plgVmInitialise
  • plgVmPrepareUserfieldDataSave
  • plgVmDeclarePluginParamsUserfieldVM3
  • plgVmOnBeforeUserfieldSave
  • plgVmOnStoreInstallPluginTable
  • plgVmOnGetUserfields
  • plgVmOnUserfieldDisplay

//shopper, extended

  • plgVmOnUserOrder
  • plgVmOnUserStore

//shopper, payment, extended

  • plgVmOnUserInvoice

//system, userfield, extended

  • plgVmOnAskQuestion

//extended, userfield

  • plgVmOnBeforeUserfieldDataSave

//vendor

  • plgVmOnVendorStore
  • plgVmAfterVendorStore
Об авторе
Об авторе
Wedal (Виталий). Веб-разработчик полного цикла (Full Stack). Создатель и автор сайта Wedal.ru.
Основной профиль – создание сайтов и расширений на CMS Joomla.
Ваша оценка материала очень важна. Прошу вас оценить статью или оставить отзыв в комментариях.

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

Для отправки комментария введите код с картинки:
Защитный код
Обновить

Комментарии  

0 # Guest 09.10.2022 09:13
да... был хороший сайт по вирутмарту в зоне .su=, а теперь не стало.
Теперь только на вас надежда )))
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 10.10.2022 07:23
Пока сайт только заблокирован. Может быть еще будет работать. Пока берите информацию здесь. Также можно всегда задавать вопросы на форуме, в соотвествующих разделах по Virtuemart.
Ответить | Ответить с цитатой | Цитировать
0 # Guest 08.11.2022 05:13
сайт заработал
Ответить | Ответить с цитатой | Цитировать
0 # spro1 28.10.2022 14:00
Виталий, приветствую! Спасибо за статью! Всегда очень приятно зайти на ваш сайт и почитать что-то новенькое! Хоть сейчас и реже пишете.
Знаком с VM еще версии 1) Вот были времена! Хорошее решение, вот только жаль, что для новичков(а может и не только) на первый взгляд VM сейчас выглядит совсем не дружелюбно)
Спасибо что пишете! Здоровья и вдохновения!
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 31.10.2022 07:42
spro1, да в VM интерфейс не самый приятный на первый взгляд. Но к нему через какое-то время привыкаешь и становится сложно представить, как бы это могло выглядеть, используй они стандартный интерфейс шаблона той же Joomla4. Карточка товара содержит довольно много настроек и вкладок. Сейчас там все заточено под работу через компьютер и, соотвественно, интерфейс довольно мелкий. При работе через ПК это удобнее, чем туча больших кнопок и вертикальный скролл. Но однозначно, там есть над чем работать.
Ответить | Ответить с цитатой | Цитировать