В этой статье мы напишем простенький vQmod для OpenCart 2.0.2.0, который на странице контактов заменит карту от Google на карту 2ГИС.
Для начала немного теории.
С понятием vQmod я столкнулся только при работе с OpenCart - на этом движке я делаю интернет-магазины. Система мне настолько понравилась, что я даже был удивлён, почему она не используется в других сайтовых движках, по крайней мере известных мне.
Что такое vQmod
"vQmod™" (Virtual Quick Mod) — это система, которая вносит виртуальные изменения в исходный код OpenCart. Принцип vQmod довольно прост: файл считывается в память, здесь vQmod вносит свои изменения, а затем уже файл отдаётся браузеру (пользователю).
Таким образом, исходные файлы OpenCart не затрагиваются — в этом и есть основная идея vQmod.
Изменения вносятся путем инструкций, заданных в специальном XML-файле, где описывается, что и где найти, заменить, добавить и т.д. Эти файлы обрабатываются во время загрузки страницы. Затем файлы с уже внесенными изменениями сохраняются как временные, после чего эти файлы будут использоваться в дальнейшем при загрузке страниц.
Здорово, правда?
Надо сказать, что vQmod не входит в дистрибутив OpenCart и устанавливается при желании отдельно, а можно и не ставить. Я всегда устанавливаю - удобно, да и существует великое множество дополнений, основанных именно на vQmod.
Берёшь xml-файлик, кидаешь его в специальную папку (/vqmod/xml/) и все дела - он начинает работать. Удалишь этот файлик и система в исходном состоянии.
Есть и минусы - несколько теряется скорость работы, но не настолько, чтобы это было вообще заметно. Нет, конечно, если у Вас установлено несколько десятков xml-файлов, то тут да - падение производительности может быть уже довольно ощутимым. Это как с плагинамиWordPress. И опять-же, не следует забывать про кеш! Ведь в большинстве случаев файл уже просто берётся из кеша и скорость загрузки тут уже никак не страдает. Кстати, vQmod использует свой кеш.
А если таких xml-модов у Вас три-пять, то можно вообще не переживать.
И вообще, почему-то говоря про влияние количества плагинов либо модов на скорость загрузки страниц всегда умалчивают про кеш. А ведь это очень хорошая и полезная штука! Ведь в кеше лежат уже полностью сформированные страницы и они отдаются браузеру быстрее, чем загрузка оригинального файла.
Вот, например, скрин с xml-модами, установленными у меня на реально работающем магазине OpenCart.
Сколько их там я даже не считал, но никаких тормозов не наблюдается.
Почему не устраивает карта Google
По умолчанию OpenCart адаптирован к работе именно с картами Google.
Я не знаю как где, но Казахстан картографы Google скорее всего видели только на очень некачественных фотографиях со спутника...
Вот, например, как нужное мне место города Алматы выглядит на картах Google:
По такой карте что-либо найти очень сложно...
А что говорить о клиентах интернет-магазина, которые захотят приехать в наш реальный магазин...
Таких клиентов, на самом деле, много.
А вот как выглядит тот-же район на карте 2 ГИС
Это уже совсем другое дело!
А ещё, если кликнуть (не на скриншоте конечно) по выделенной точке, то появится информация об организации, её телефоны, график работы, маршруты проезда и много ещё чего...
Это и явилось причиной, по которой я взялся за написание данного мода.
vQmod практика
Сначала покажу этот небольшой xml-мод, а затем дам пояснения...
XML-мод
<modification> <id></id> <name>2 GIS to Contact</name> <code>2gis_to_contact</code> <version>1.0.0</version> <vqmver>2.5.1</vqmver> <author>AlexKar (a_r_karataev@mail.ru)</author> <link>http://ok.ddw.kz</link> <file path="catalog/view/theme/default/template/information/contact.tpl"> <operation> <search position="replace"><![CDATA[<a href="https://maps.google.com/maps?q=<?php echo urlencode($geocode); ?>&hl=en&t=m&z=15"]]></search> <add><![CDATA[ <a href="http://go.2gis.com/<?php echo urlencode($geocode); ?>"]]></add> </operation> <operation> <search position="replace"><![CDATA[<a href="https://maps.google.com/maps?q=<?php echo urlencode($location['geocode']); ?>&hl=en&t=m&z=15"]]></search> <add><![CDATA[ <a href="http://go.2gis.com/<?php echo urlencode($location['geocode']); ?>"]]></add> </operation> </file> </modification>
Теги файла xml, что означают:
Это скорее подсказка для себя (утянул с другого сайта), чтобы потом не искать информацию... Очень полезная шпаргалка.
<modification> - это основа, самый главный родитель, он должен быть только один во всем файле
<id> - это название и идентификатор модуля. Это любой текст. В приведённом примере я его оставил пустым.
<version> - версия модификации в формате "1.0.0"
<vqmver> - это минимальная версия vQmod в формате "1.0.0"
<author> - имя автора
<file> - имя изменяемого файла. Задается от корня сайта, где лежит index.php (например catalog/controller/product/product.php). Этот тег можо несколько раз использовать во всем .xml файле
<operation> - это обертка над конкретной операцией с файлом, определенном в теге file. Может содержать необязательный атрибут "errors" с одним из двух значений - "skip" (пропустить ошибку и продолжить работу модуля) и "abort"(откатить все изменения)
<search> - первый шаг выполнения модификации. Найти можно только одну строку. Это важно! Я сначала голову сломал, почему мой мод не работает, когда я задал для поиска блок из нескольких строк. Автоматически обрезаются пробелы и разрывы строк. Этот тег может быть только один по отношению к тегу <operation>. Рекомендуется использовать CDATA для оборачивания кода. Обязательный атрибут - "position", может принимать значения before, after, replace, top, bottom и all.
Особенности тега <search>:
- replace - заменит весь код указанный в <search> на код указанные в теге <add>. Используется по умолчанию.
- before - вставит данные из <add> перед данными из <search>
- after - вставит данные из <add> после данных из <search>
- top - вставит данные из <add> в самом начале файла. Данные из <search> будут проигнорированны.
- bottom - вставит данные из <add> в конце файла. Данные из <search> будут проигнорированны.
- all - заменит все данные в файле данными из <add>. Данные из <search> будут проигнорированны.
Необязательный атрибут - "offset", используется для работы с позицией вставки кода.
- Если в "position" установлено "before" и "offset" установлено 3, тогда данные из <add> будут вставлены на 3 строки до искомых данных
- Если в "position" установлено "after" и "offset" установлено 3, тогда данные из <add> будут вставлены на 3 строки после искомых данных
- Если в "position" установлено "replace" и "offset" установлено 3, тогда искомые данные будут заменены на данные из <add>
- Если в "position" установлено "top" и "offset" установлено 3, тогда данные вставятся после 3 строк от начала файла
- Если в "position" установлено "bottom" и "offset" установлено 3, тогда данные вставятся после 3 строк начиная с конца файла
Необязательный атрибут - "index", для указания, какие найденные экземпляры кода из тегов <search> должны быть учтены. Если мы ищем "echo" и найдено 5 "echo", но нам нужны только первое и третье, тогда мы можем использовать index="1,3". Запятая для определения нескольких элементов. Для работы со всеми найденными элементами нужно использовать index="false".
Необязательный атрибут - "regex". Устанавливается в true, если поиск выполняется с помощью регулярного выражения. Чтобы выполнять обычный поиск установите параметр в false(стоит по умолчанию)
Необязательный атрибут - "trim". Если нужно искать без обрезания пробелов - устанавливаем в false. По умолчанию пробелы обрезаются и параметр установлен в true.
<add> - Это вторая часть работы с файлом. Может состоять из нескольких строк. Обязательно только один на одну операцию с файлом. Нужно оборачивать код в CDATA.
Необязательный атрибут - "trim". Используется также, как и при поиске, но по умолчанию установлен false (пробелы не обрезаются)
<![CDATA[ ]]> - это CDATA xml тег. Означает, что данные в них не нужно обрабатывать как xml
Как вставить карту
Открываем онлайн карту 2ГИС, находим нужный нам объект, подстраиваем масштаб, центрируем и затем...
...в правом нижнем углу кликаем по кнопке «Поделиться». | |
Нам важны только буковки, которые завершают строку http://go2gis.com/ А именно, в данном случае - xjts |
Затем идём в настройки магазина и вставляем эти буковки в поле Геокод (Geocode) - в зависимости от перевода оно может называться по-разному, но суть от этого не меняется.
Вот в это поле вставляем. На этом и вся премудрость. |
Вот, что получилось:
После вставки геокода, на странице контактов (обратной связи) магазина автоматически отобразится кнопка «Показать на карте».
При клике по этой кнопке в новой вкладке откроется наша карта.
По аналогии можно прикрутить и любую другую актуальную для вас карту.
На этом всё.
Удачи Вам и до встречи на моём блоге.
Здравствуйте, Александр!
Какой Вы умница!!! Сколько новых слов узнала, благодаря Вам…
А такая карта в интернет-магазине в самом деле важна! Я не знаю, как но у меня на заказном магазине, который ещё не закончен, она сама появляется, после небольших манипуляций:
.
Галина, у Вас магазин на другом движке – umi.ru, там свои сервисы. Но зато, как я понимаю, доступ к функционалу ограничен, потому, что всё создается на бесплатной площадке…
Например, вряд-ли Вы там сможете вообще изменить карту. Хотя, возможно я и ошибаюсь.
Мне как-то привычнее OpenCart…
Александр, что ни пост – то новое и уникальное, думаю, многим пригодятся такие статьи. И хоть я совсем не сильна в терминологии, но при необходимости смогла бы разобраться,как ставить такие карты на сайт.
Желаю новых творческих идей!
А я только Яндекс-карты использую, в основном вполне устраивают.
Спасибо, Людмила! Опечатку исправил.
Если честно, то по OpenCart статьи пишу больше как шпаргалку для себя самого. Но если кому-то пригодится, то это хорошо…
Саша привет! Согласен с Галиной, очень много умных и не понятных слов А так было интересно. Правда до магазина мне далеко, а показывать свое место нахождение как то пока не думал. Зато твой новый редактор, а особенно смайлы, просто супер!
Улыбнуло…
Андрей, ты зачем все смайлики картинкой вставил? Я в твой ответ пытался смайлик вставить оттуда… И только после четвёртой неудачной попытки я понял, что тыкаю не по смайликам плагина, а по твоему рисунку…
Саша, вот уж от кого не ожидал, так это от тебя. Зачем в картинку тыкать то?
Ну так чисто машинально… Пишу коммент, а они прям перед глазами – полная иллюзия получилась…
Я тоже обычно пользуюсь картами 2ГИС, они удобнее.
Может быть где-то карты от Яндекс или Гугл детально отображают план местности, но у нас самая точная карта – это "ГИС.
Вот такой вопрос, а плагин кеширования восстановлен?
Да, Максим, только что восстановил. Вот и проверим…
Здравствуйте, Александр.
А разве система vQmod не устарела и не стала не нужной?
В OpenCart со второй версии по стандарту встроен OCMOD, который несёт аналогичные функции, поддержку модификаторов, но не нужно систему нагружать сторонним vQmod.
Что скажите по этому? Пытаюсь разобраться в этом вопросе, что удобнее использовать для написания модификаторов?
Здравствуйте, Владислав! Извините, может быть надо было только по нику, скажите – я исправлюсь…
Насчёт vQmod и OCMOD… Знаете, наверное тут дело личных предпочтений. На мой взгляд, OCMOD имеет бо-ольшой минус. Я даже не о том, как надо устанавливать очередное расширение – куча действий в админке, тогда как для vQmod достаточно просто закинуть файл в определённую папку… Я о том, что OCMOD записывает данные в базу, и при каком-то конфликте выковыривать оттуда коды не очень развлекательное действо. В случае с vQmod – удалил ранее закинутый файлик и всё.
Просто на мой взгляд OCMOD ещё дорабатывать и дорабатывать в этом смысле. Да и не вижу какого либо преимущества его над vQmod.
Но ещё раз повторюсь – тут дело личных предпочтений, поэтому спорить не буду. Я делаю так, кто-то по-другому…
Кстати, а почему у Вас на блоге нет комментариев? Получилось только звезду поставить под статьёй о запрещённых казахстанских сайтах…
Вы не поняли меня, в данный момент ocmod поддерживает xml, и большинство функций vQmod.
Попробуйте установить/загрузить свой модификатор с помощью стандартного установщика, он также будет лишь на лету редактировать, то есть работать как надо. Устанавливая через установщик у Вас появляется возможность отключать данный мод, удалять прямо из панели управления магазином, не заходя на фтп.
С версии 2 опенкарт, Я не пойму целесобразности установки vQmod'a, так как он по умолчанию поддерживается.
Не нужно модификаторы ложить в папку vQmod/xml
просто переименовываете свой xml файл в naimenovanie.ocmod.xml
Я в этом не разобрался, вот и хотел уточнить, думал Вы в курсе. И изначально тоже писал модификатор для vQmod и также заливал в папке, а оказалось что написанный модификатор легко устанавливается через установщик, что порадовало.
P.S. По блогу, сейчас он грубо говоря заброшен. Некоторое время назад его активно спамили, в комментариях и других модулях, и данная информация висела на нём приличное время, почему и закрыл комментарии. После этого блог не любим поисковиками, трафик просто нулевой, однако в индексе поисковиков присутствует.
Да понял я, понял… Знаю я про OCMOD. Некоторые вещи так и устанавливаю… Я когда с 1.5.5.1 магазин перетягивал на 2.0.2.0 уже не вникая автоматом установил vQmod… А потом уже сообразил, что существует ocmod, но присмотревшись к его работе, честно говоря плюсов не увидел и мне не понравилось, что он прописывается в базу. Не я один так думаю, почитайте, например, вот здесь. Там раздел критика…
Лично для меня быстрее кинуть файлик в папку, чем устанавливать через админку. Просто быстрее.
Какая разница ОС или не ОС, принцип то ХМЛ файла один.
Вопрос, а как поставить тему не по умолчанию, но при этом иpначально я не знаю название темы. Спасибо
У меня этот мод и установлен для темы НЕ по умолчанию… В статье я писал:
Возможно, правда, что придётся некоторые моменты откорректировать в самом vqmod (в search position), так-как в устанавливаемой теме они могут не совсем совпадать со строками дефолтного шаблона. Но в данном конкретном случае это маловероятно.
Вы меня не поняли. Я не знаю на какую тему поставят мое дополнение. возможно есть возможность прописать что то вроде $this->config->get('config_template')?
спасибо, ушел в документация 🙂
В дополнение к своему вопросу. Поизучав ХМЛ файлы
Вместо названия темы можно вставить *. Еще не тестировал, но такой способ используют в дополнениях.
как пример
<file name="catalog/view/theme/*/template/product/category.tpl">
Вариант, конечно, интересный. Но если мод привязан к теме, то очень велика вероятность того, что строки для поиска будут отличаться. И тогда смысл такой макроподстановки теряется…
Александр, мне просто понравилась статья 🙂
в действительности иногда можно сделать модуль и поделиться им с миром :), я не говорю про конкретный случай.
Конечно бывает, что разработчики переделывают тему так, что ее уже ни чем не исправить, но это не частый случай. А в основном все придерживаются оригинальных переменных и структуры, тем более на 2х, где темы зачастую подвязаны под будстрап.
Я же спросил, покопался, вроде нашел решение и просто решил поделиться с вами и вашими читателями, может кому пригодиться 🙂
Спасибо еще раз, действительно интересные статьи.
Предлагаю воспользоваться авторской сборкой от neoseo. https://neoseo.ru/internet-magazin-seo-magazin-model. Они предоставляют дополнительные модули для работы и взаимодействия с вашим сайтом, современный дизайн, качественную оптимизацию и продвижение. Советую попробовать, не пожалеете.
Подборка хорошая, спасибо, но в принципе – всё это уже есть… Реализовано.