Пишем свой vQmod для OpenCart 2.0.2.0

Пишем свой vQmod для OpenCart 2.0.2.0

В этой статье мы напишем простенький 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 использует свой кеш. 

vQmod для OpenCart

А если таких xml-модов у Вас три-пять, то можно вообще не переживать.  

И вообще, почему-то говоря про влияние количества плагинов либо модов на скорость загрузки страниц всегда умалчивают про кеш. А ведь это очень хорошая и полезная штука! Ведь в кеше лежат уже полностью сформированные страницы и они отдаются браузеру быстрее, чем загрузка оригинального файла. 

Вот, например, скрин с xml-модами, установленными у меня на реально работающем магазине OpenCart.

Сколько их там я даже не считал, но никаких тормозов не наблюдается. 

Почему не устраивает карта Google

По умолчанию OpenCart адаптирован к работе именно с картами Google.

Я не знаю как где, но Казахстан картографы Google скорее всего видели только на очень некачественных фотографиях со спутника...

Вот, например, как нужное мне место города Алматы выглядит на картах Google:

vQmod для OpenCart

По такой карте что-либо найти очень сложно...

А что говорить о клиентах интернет-магазина, которые захотят приехать в наш реальный магазин...

Таких клиентов, на самом деле, много.

 

 

А вот как выглядит тот-же район на карте 2 ГИС

vQmod для OpenCart

Это уже совсем другое дело!

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

Это и явилось причиной, по которой я взялся за написание данного мода.

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>

Кстати, мод этот показан здесь для темы default, которая идёт с OpenCart по умолчанию. Для его использования с другой темой надо заменить всего лишь одно значение в этой строке:

«catalog/view/theme/default/template/information/contact.tpl»

Здесь «default» меняем на название своего шаблона и всё.

Теги файла 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>:
  1. replace - заменит весь код указанный в <search> на код указанные в теге <add>. Используется по умолчанию.
  2. before - вставит данные из <add> перед данными из <search>
  3. after - вставит данные из <add> после данных из <search>
  4. top - вставит данные из <add> в самом начале файла. Данные из <search> будут проигнорированны.
  5. bottom - вставит данные из <add> в конце файла. Данные из <search> будут проигнорированны.
  6. all - заменит все данные в файле данными из <add>. Данные из <search> будут проигнорированны.

Необязательный атрибут - "offset", используется для работы с позицией вставки кода.

  1. Если в "position" установлено "before" и "offset" установлено 3, тогда данные из <add> будут вставлены на 3 строки до искомых данных
  2. Если в "position" установлено "after" и "offset" установлено 3, тогда данные из <add> будут вставлены на 3 строки после искомых данных
  3. Если в "position" установлено "replace" и "offset" установлено 3, тогда искомые данные будут заменены на данные из <add>
  4. Если в "position" установлено "top" и "offset" установлено 3, тогда данные вставятся после 3 строк от начала файла
  5. Если в "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ГИС, находим нужный нам объект, подстраиваем масштаб, центрируем и затем...

9cff4d1e7286 - Пишем свой vQmod для OpenCart 2.0.2.0...в правом нижнем углу кликаем по кнопке «Поделиться».
97cedd0881b7 - Пишем свой vQmod для OpenCart 2.0.2.0

Нам важны только буковки, которые завершают строку

http://go2gis.com/

А именно, в данном случае - xjts

Затем идём в настройки магазина и вставляем эти буковки в поле Геокод (Geocode) -  в зависимости от перевода оно может называться по-разному, но суть от этого не меняется.

5b5df2b6393f - Пишем свой vQmod для OpenCart 2.0.2.0

Вот в это поле вставляем.

На этом и вся премудрость.

Вот, что получилось:

vQmod для OpenCart

После вставки геокода, на странице контактов (обратной связи) магазина автоматически отобразится кнопка «Показать на карте».

При клике по этой кнопке в новой вкладке откроется наша карта.

По аналогии можно прикрутить и любую другую актуальную для вас карту.

На этом всё.

Удачи Вам и до встречи на моём блоге.

 
 

24 комментария

  1. Здравствуйте, Александр!
    Какой Вы умница!!! Сколько новых слов узнала, благодаря Вам…
    А такая карта в интернет-магазине в самом деле важна! Я не знаю, как но у меня на заказном магазине, который ещё не закончен, она сама появляется, после небольших манипуляций:
    .
     

    • Галина, у Вас магазин на другом движке – umi.ru, там свои сервисы. Но зато, как я понимаю, доступ к функционалу ограничен, потому, что всё создается на бесплатной площадке…

      Например, вряд-ли Вы там сможете вообще изменить карту. Хотя, возможно я и ошибаюсь.

      Мне как-то привычнее OpenCart…

  2. Александр, что ни пост – то новое и уникальное, думаю, многим пригодятся такие статьи. И хоть я совсем не сильна в терминологии, но при необходимости смогла бы разобраться,как ставить такие карты на сайт. 

    Желаю новых творческих идей!

    А я только Яндекс-карты использую, в основном вполне устраивают. 

  3. Саша привет! Согласен с Галиной, очень много умных и не понятных слов А так было интересно. Правда до магазина мне далеко, а показывать свое место нахождение как то пока не думал. Зато твой новый редактор, а особенно смайлы, просто супер!

  4. Я тоже обычно пользуюсь картами 2ГИС, они удобнее.

  5. Максим Исаев

    Вот такой вопрос, а плагин кеширования восстановлен?

  6. Здравствуйте, Александр.

    А разве система 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, но присмотревшись к его работе, честно говоря плюсов не увидел и мне не понравилось, что он прописывается в базу. Не я один так думаю, почитайте, например, вот здесь. Там раздел критика…

          Лично для меня быстрее кинуть файлик в папку, чем устанавливать через админку. Просто быстрее.

  7. Виталий

    Какая разница ОС или не ОС, принцип то ХМЛ файла один.

    Вопрос, а как поставить тему не по умолчанию, но при этом иpначально я не знаю название темы. Спасибо

    • У меня этот мод и установлен для темы НЕ по умолчанию… В статье я писал:

      «catalog/view/theme/default/template/information/contact.tpl»

      Здесь «default» меняем на название своего шаблона и всё.

      Возможно, правда, что придётся некоторые моменты откорректировать в самом vqmod (в search position), так-как в устанавливаемой теме они могут не совсем совпадать со строками дефолтного шаблона. Но в данном конкретном случае это маловероятно.

      • Виталий

        Вы меня не поняли. Я не знаю на какую тему поставят мое дополнение. возможно есть возможность  прописать что то вроде $this->config->get('config_template')?

        спасибо, ушел в документация 🙂 

        • Виталий

          В дополнение к своему вопросу. Поизучав ХМЛ файлы

          Вместо названия темы можно вставить *. Еще не тестировал, но такой способ используют в дополнениях.

          как пример

          <file name="catalog/view/theme/*/template/product/category.tpl">

           

          • Вариант, конечно, интересный. Но если мод привязан к теме, то очень велика вероятность того, что строки для поиска будут отличаться. И тогда смысл такой макроподстановки теряется…

      • Виталий

        Александр, мне просто понравилась статья 🙂

        в действительности иногда можно сделать модуль и поделиться им с миром :),  я не говорю про конкретный случай.

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

        Я же спросил, покопался, вроде нашел решение и просто решил поделиться с вами и вашими читателями, может кому пригодиться 🙂

        Спасибо еще раз, действительно интересные статьи.  

  8. Николай

    Предлагаю воспользоваться авторской сборкой от neoseo. https://neoseo.ru/internet-magazin-seo-magazin-model. Они предоставляют дополнительные модули для работы и взаимодействия с вашим сайтом, современный дизайн, качественную оптимизацию и продвижение. Советую попробовать, не пожалеете.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

 Ясогласен с политикой конфиденциальности сайта и пользовательским соглашением