vQmod
Хотя строго модули, каналы продуктов и расширения OpenCart должны быть автономными и модульными, некоторые требуют модификации ядра OpenCart. Изменение основных файлов OpenCart значительно снижает Ваши возможности по обновлению магазина до более поздних версий и может повлиять на другие модули и расширения. vQmod предоставляет механизм, с помощью которого модули, требующие модификации ядра OpenCart, могут быть установлены без ущерба для целостности Вашей базовой системы для обновлений. vQmod хранит список имен файлов и необходимых изменений в виде одного файла XML на расширение. Затем эти изменения создаются при использовании основных файлов, а полученные файлы хранятся в виде кэшированных копий, которые выполняются вместо исходного файла ядра PHP или TPL.
Установка vQmod
Если Вы хотите обновить свой магазин или иметь стороннее расширение, которое Вы не использовали ранее, рекомендуется использовать систему vQmod. Скачать vQmod и инструкции по установке можно найти здесь:https://github.com/vqmod/vqmod.
После того, как Вы загрузили соответствующий zip-файл vQmod, указанный в ссылке, Вам нужно распаковать zip-файл и отправить по FTP папку vQmod в корневой каталог вашего сайта. На приведенном ниже снимке экрана Filezilla мы видим, что корневой каталог этого магазина находится по адресу public_html/opencart на стороне удаленного сайта. Загрузка папки vQmod здесь сделает папку vqmod видимой в public_html/opencart.
vQmod советует Вам установить права на запись для папок vqmod/vqcache, index.php и admin/index.php. В Filezilla Вы можете щелкнуть правой кнопкой мыши файл или папку, выбрать «Права на файлы. «, и ввести 755 или 777 в «Числовом значении», чтобы установить его для записи.

Следующим шагом в установке vQmod является посещение страницы установки в Вашем магазине. Введите местоположение Вашего магазина в браузере, а затем «vqmod/install». Если Ваш магазин находится по адресу «www.mystore.com», страница установки vQmod будет расположена по адресу «www.mystore.com/vqmod/install». Следующий текст появится на странице, если он был установлен правильно: «VQMOD HAS BEEN INSTALLED ON YOUR SYSTEM!».
В отличие от папки установки после установки OpenCart, не удаляйте папку установки vQmod после установки vQmod!
vQmod рекомендует загрузить домашнюю страницу, чтобы увидеть, правильно ли она выглядит и работает после установки. Вам также необходимо проверить папку vqmod/vqcache, чтобы увидеть, есть ли новые файлы vq.
Дополнительное поле в карточке товара OpenCart
Статья нашего разработчика из его личного блога.
Разрабатывая модуль для OpenCart, возникла необходимость сделать произвольное поле в карточке товара, которое должно быть видно только в админке. Это должно быть поле с логическим значением «маркирован товар или нет». Вот так в итоге:

Недолго поковыряв админку выяснил, что из коробки OpenCart не поддерживает кастомные поля, однако есть платные модули, например, вот. Значит нужно сделать кастомное поле в OpenCart самому.
Варианты решения задачи:
- заюзать неиспользуемые поля (sku, upc, ean, jan, isbn, mpn) — почти мгновенно, но возможно кто-то из наших клиентов будет использовать занятое нами поле.
- вмешаться в код движка — быстро и мало кода, однако тогда решение не переносимо и при обновлении движка придется обновлять и само решение, так как изменения будут потеряны при обновлении движка.
- разработать модуль — дольше, больше кода, переносимо на другие сайты с той же версией OpenCart, не зависит от обновления движка (за исключением мажорных версий).
Для реализации дополнительного поля в карточке товара будем разрабатывать модуль ProductMarkedField. В общем схема выглядит так:
- изменить таблицу базы данных при установке модуля и прибраться в ней после удаления нашего модуля.
- показать дополнительное поле в карточке товара в админке OpenCart.
- сохранить поле при отправке формы
Последние два пункта должны быть выполнены при подписке на события показа карточки товара и изменения товара.
Про детали разработки модулей для opencart поговорим в другой раз, а пока предположим что читатель имеет минимальный опыт в этом деле.
Основная логика модуля умещается в один файл контроллера admin/controller/extension/module/productmarkedfield.php. Для того чтобы модуль отобразился в разделе «Расширений» (чтобы его можно было инсталлировать/деинсталлировать) надо создать языковой файл admin/language/ru-ru/extension/module/productmarkedfield.php с таким содержимым:
Установка модуля
В методе install нужно модифицировать таблицу product:
$this->db->query("ALTER TABLE `".DB_PREFIX."product` ADD `marked` TINYINT UNSIGNED NOT NULL DEFAULT '0';");
В ocStore 2.3.x все нормально, но в ocStore 3.0.2.0 при использовании MySQL 8, запрос добавления нового столбца в таблицу заканчивался ошибкой:

Для решения этой проблемы изменим значение по умолчанию для столбца date_available:
$this->db->query("ALTER TABLE `".DB_PREFIX."product` CHANGE `date_available` `date_available` DATE NOT NULL;");
Теперь надо добавить обработчики событий, чтобы с их помощью мы могли изменять верстку карточки товара и сохранять значение нашего дополнительного поля (для ocStore 2.3.x):
$this->load->model('extension/event'); //событие "после загрузки формы товара" - для показа дополнительного поля товара (обязательна маркировка или нет) $this->model_extension_event->addEvent( 'productmarkedfield', //код, в данном случае название модуля 'admin/view/catalog/product_form/after', //событие 'extension/module/productmarkedfield/eventProductFormAfter' //обработчик ); //событие "после редактирования товара" - для сохранения статуса маркировки $this->model_extension_event->addEvent( 'productmarkedfield', 'admin/model/catalog/product/editProduct/after', 'extension/module/productmarkedfield/eventProductEditAfter' );
Для ocStore 3.0.x модель событий загружается таким образом:
$this->load->model('setting/event');
И вместо объекта model_extension_event нужно использовать model_setting_event соответственно.
Дополнительное поле в карточке товара
Выводить наше поле в карточку товара мы будем после загрузки admin/view/template/catalog/product_form.twig. наш метод будет принимать 3 аргумента:
public function eventProductFormAfter( &$route, &$args, //переданные аргументы в этот шаблон &$output//html верстка страницы )
Нас интересует третий аргумент &$output, именно его мы и будем модифицировать вставляя туда верстку со значением нашего нового поля.
Для модификации формы нам понадобится Simple HTML DOM, и краткий мануал. Скачиваем и кладём его в system/library, а в коде подгружаем расположенный внутри класс таим образом (@ чтобы не выводить ошибки, так как оригинальная версия этой библиотеки загружается с некритичными ошибками):
@$this->load->library('simple_html_dom');
Затем используя регулярные выражения для того чтобы получить id товара. (Искал другие варианты, но id в нормальном виде в $args массиве не нашел):
preg_match("/product_id=(\d+)/", $args["action"], $aMatch); $idProdict = $aMatch[1];
Загружаем модель описывающую товар и получаем необходимую информацию о товаре (данные из таблиц product и product_description):
$this->load->model('catalog/product'); $aProduct = $this->model_catalog_product->getProduct($idProdict);
Теперь мы имеем доступ к данным товара, среди которых наше дополнительное поле — значение маркировки.
Однако, этот код будет работать только для редактирования уже существующего товара, но при создании нового товара будут ошибки, так как не будет найден id еще несуществующего товара. Изменим вышеприведенный код:
$isMarked = false; if(preg_match("/product_id=(\d+)/", $args["action"], $aMatch)) < $idProduct = $aMatch[1]; $this->load->model('catalog/product'); $aProduct = $this->model_catalog_product->getProduct($idProduct); $isMarked = $aProduct["marked"]; >
То есть мы создали новую переменную isMarked, которая будет хранить в себе значение по умолчанию false и если удастся найти id товара, тогда в isMarked будет записано значение из нашего произвольного поля в карточке товара.
Теперь при помощи Simple HTML DOM найдем вкладку «Данные» и вставим в самое начало наше поле маркировки, предварительно подсмотрев на верстку необходимого gui элемента в admin/view/template/catalog/product_form.twig (в ocStore 2.3.x tpl расширение, и внутри нет Twig):
$html = str_get_html($output); $html->find('div#tab-data', 0)->innertext = ' ' . $html->find('div#tab-data', 0)->innertext;
Код рабочего метода целиком:
public function eventProductFormAfter(&$route, &$args, &$output) < @$this->load->library('simple_html_dom'); $isMarked = false; if(preg_match("/product_id=(\d+)/", $args["action"], $aMatch)) < $idProduct = $aMatch[1]; $this->load->model('catalog/product'); $aProduct = $this->model_catalog_product->getProduct($idProduct); $isMarked = $aProduct["marked"]; > $html = str_get_html($output); $html->find('div#tab-data', 0)->innertext = ' ' . $html->find('div#tab-data', 0)->innertext; $output = $html->outertext; >
Сохранение значения дополнительного поля
Для сохранения результатов в момент когда администратор нажимает кнопку «Сохранить», необходимо вручную (с помощью обработчика события) внести изменения в базу данных, так как модель catalog/product при редактировании товара (ModelCatalogProduct::editProduct) сохраняет только определенный набор данных, и наше новое поле не входит в этот набор.
Для этого мы уже зарегистрировали ранее обработчик события «после редактирования товара»:
public function eventProductEditAfter(&$route, &$args) < //в $args[0] лежит id товара $sSql = "UPDATE " . DB_PREFIX . "product SET marked WHERE product_id = '" . (int)$args[0] . "'"; $this->db->query($sSql); >
Удаление модуля
При деинсталляции модуля надо удалить столбец marked из таблицы product и удалить обработчики событий, установленные нашим модулем. Все это делается в методе uninstall.
Удалить столбец из таблицы товаров:
$this->db->query("ALTER TABLE `".DB_PREFIX."product` DROP `marked`");
Удалить все сообщения (для ocStore 2.3.x):
$this->load->model('extension/event'); $this->model_extension_event->deleteEvent('productmarkedfield');
Удалить все сообщения (ocStore 3.0.x):
$this->load->model('setting/event'); $this->model_setting_event->deleteEventByCode('productmarkedfield');
Послесловие
В целом не так уж и трудно, однако кажется немного странным тот факт, что верстку надо менять руками, так как нет удобного встроенного инструмента для изменения интерфейса.
Для тех, кто дочитал до конца — ссылка на архив с исходным кодом модуля.
Автор: Виталий Бутурлин
Remart — многофункциональная тема MarketPlace Opencart 3

Многоцелевая тема Remart OpenCart. Remart включает в себя большое количество новейших функций, которые помогут вам создать успешный веб-сайт электронной коммерции. Не требует знаний HTML, прост в установке и использовании. Он был создан для мобильных пользователей. . Поэтому он отлично смотрится на настольных компьютерах, планшетах и мобильных телефонах. Remart Multifunction — это потрясающая, надежная и гибкая тема с дизайном и всеми возможностями онлайн-категории, полностью настраиваемая, подходящая для веб-сайтов электронной коммерции. Он предназначен для мультимагазинов, многофункциональной электроники, ювелирных изделий, косметики, бытовой техники, сумок, органических продуктов, ресторанов, часов, многофункциональных товаров, керамики, цветов, обуви, электроинструментов, зоомагазинов.
- Высококачественный перевод
- Автоматическое предложение поиска
- Гибридный модуль
- Уникальный детальный дизайн продукта
- Расширенный усовершенствованный дизайн поиска
- Автоматическое предложение поиска
- Мегаменю
- Удобный просмотр товара
- Увеличение изображения продукта
- Самый продаваемый рекомендуемый продукт
- Блог
ВОЗМОЖНОСТИ И РАСШИРЕНИЯ
- PSD включен
- С модулем БЛОГ
- Кросс-браузерная совместимость
- Установка в один клик
- Удобство для мобильных устройств
- Пользовательское слайд-шоу
- Мега Меню
- Представление в виде сетки/списка
- Многоязычный
- AJAX добавить в корзину
- Слайдер продукта
- Совместимые браузеры
- Адаптивный дизайн
- Динамический макет
- Cloudzoom и слайдер изображений
- Индивидуальная страница продукта
- Отзыв
- Гостевая касса
- Интеграция расширенных фрагментов кода Google
- HTML-документация
- Расширенные возможности типографики!
- Используйте шрифты Google, стандартные шрифты или загрузите свой собственный шрифт!
- Расширенные возможности поиска!
- Найдите товары в каждой категории или во всех категориях.
- Версии с широкой и коробочной планировкой
- Полный контроль над шириной сайта; область контента и боковые панели
- Выберите коробочный или широкий макет
- Используемая графика
Все изображения принадлежат их владельцам. Изображения, используемые в предварительном просмотре в реальном времени, не включены в пакет.
Журнал изменений
## V.2.0.0-Remart-Files - 5 июня 2021 г. - Обновление темы, совместимой с OpenCart 3.0.3.7. - Обновление обратного отсчета - Повысить производительность - Исправлен липкий раздел.
## V.1.0.0 Remart-файлы -Изначальный выпуск
| Opencart | |
| Версии | 3.0 |
Создал расширение для Opencart 3, но не могу понять почему «Доступ запрещен!», при настройке расширения

Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Войти
Уже зарегистрированы? Войдите здесь.
Больше способов поделиться.
Похожие публикации
Удаление модуля, модификаторы, Доступ запрещен(
Автор: ValentinS, 25 января 2022
[Решено] FTP доступ должен быть включен в настройках в Opencart 2.0.3.1 1 2
Автор: MAlexey81, 8 июля 2015
Нужно создать платежный модуль для opencart 2.3
Автор: pokompam, 4 февраля 2022
Проблема с расширением opencart при переходе с php5.6 на 7.2
Автор: gautamb11, 30 августа
Настройка функционала шаблона Chameleon, Opencart 3.0.3.8
Автор: stayalert, 30 сентября
Сейчас на странице 0 пользователей
- Нет пользователей, просматривающих эту страницу.
Покупцям
- Оплата розширень фізичними особами
- Оплата розширень юридичними особами
- Політика повернень
Розробникам
- Регламент розміщення розширень
- Регламент продажу та підтримки розширень
- Віртуальний обліковий запис автора
- Політика просування оголошень
- API каталогу розширень
- Вирішення спорів щодо авторських прав
Корисна інформація
- Публічна оферта
- Політика повернень
- Політика конфіденційності
- Платіжна політика
- Політика передачі особистих даних
- Політика прозорості
Останні розширення
![]()
![]()
![]()
![]()
![]()
Движок интернет магазина OpenCart (ocStore) — официальный сайт OpenCartForum.com Powered by Invision Community
- Уже зарегистрированы? Войти
- Регистрация
Раздел покупок
ocStore
- Назад
- Официальный сайт
- Демо ocStore 3.0.3.2
- Демо ocStore 2.3.0.2.4
- Скачать ocStore
- Документация
- История версий ocStore
Шаблоны
OpenCart.Pro
- Создать.
Важная информация
На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.
