- Opencart — как разместить модуль (HTML-инфоблок) в любом месте на странице
- Как вывести модуль на определенной странице Opencart
- Как работают схемы (layout) в Opencart
- Как вывести или скрыть модуль на определенной странице Opencart
- Cоздаем новую позицию в макете для вывода модулей в Opencart 2.3
- Создаем новую позицию в Opencart 2.3
- Создание контроллера
- Создание шаблона новой позиции
- Вывод новой позиции под хэдером
- Переходим к административной части
- Изменяем языковой файл
- Модифицируем контроллер
- После создания новой позиции в макете не работает слайдер или другие модули
- Написание модуля для OpenCart 3.x
- Административная часть модуля
- Контроллер модуля admin/controller/extension/module/example.php
- Модель модуля admin/model/extension/module/example.php
- Языковой файл модуля admin/language/ru-ru/extension/module/example.php
- Представление (шаблон) модуля admin/view/template/extension/module/example.twig
- Пользовательская часть модуля
- Контроллер модуля catalog/controller/extension/module/example.php
- Модель модуля catalog/model/extension/module/example.php
- Языковой файл модуля catalog/langugage/ru-ru/extension/module/example.php
- Представление (шаблон) модуля catalog/view/theme/default/template/extension/module/example.twig
- Создание архива для загрузки модуля установщиком расширений
Opencart — как разместить модуль (HTML-инфоблок) в любом месте на странице
Иногда очень хочется воспользоваться встроенным в Opencart-2 (OcStore-2) модулем «HTML Содержимое«,
причем вставить его не в стандартные позиции:
column_left / column_right / content_top / content_bottom
а в свою собственную позицию.
В данном случае, автору понадобилось вставить текстовую информацию на странице карточки товара сразу под кнопкой «Купить».
Этот инфоблок будет выводиться на страницах всех товаров.
Шаг-1.
Создадим в админке этот самый инфоблок с нужной информацией.
Заходим в Модули, нажимаем на кнопку редактирования модуля «HTML Содержимое» и заполняем поля НазваниеМодуля, Заголовок (можно не заполнять), Описание -> сюда пишем нашу информацию или вставляем HTML-код,
и в самом низу меняем статус на Включено
Добавляем наш модуль в схему Продукт
Теперь, если зайти на страницу карточки товара, то мы увидим содержимое нашего модуля в верхней части страницы
Чтобы вывести модуль в нашей собственной позиции на странице, нужно дать название этой позиции. Мы назвали ее content_infoblock
И в этом месте может возникнуть проблема с количеством символов в названии (спасибо нашему читателю Алексею за подсказку).
Дело в том, что в базе данных по умолчанию установлено ограничение для количества символов = 14 в поле `position` таблицы `oc_layout_module`
Поэтому, нужно либо придумать название модуля не более 14 символов, либо изменить значение для этого поля, например VARCHAR(255). Это можно сделать легко в PhpMyAdmin
Итак, определившись с названием модуля, пропишем его в выпадающем списке в админке.
Для этого открываем файл
и находим часть кода
ниже добавляем название нашей позиции
Далее находим строку
и ниже вставляем
Теперь идем в админку в Схемы, входим в редактор страницы «Продукт» и для модуля «HTML Содержимое > Инфоблок ДоставкаОплата»
выбираем позицию «Инфоблок»
Теперь обновив на сайте страницу карточки товара наш инфоблок исчезнет. Потому что страница ничего не знает о новой позиции. Переходим к шагу 2.
Шаг-2.
Подготовим данные для вывода на странице товара нашего инфоблока.
Данные для страницы карточки товара готовятся в контроллере
Открываем его и, почти в самом конце, сразу после строки
вставляем код после первого вхождения указанной строки:
Ниже этого кода должно быть
Этот блок кода является универсальным и может использоваться для вывода любого модуля в нашей собственной позиции content_infoblock на ЛЮБОЙ странице.
Например, если нам потребуется прикрутить наш инфоблок (или любой другой модуль!) на страницу Категория, то мы вставим этот кусок кода в контроллер Категории
И таких позиций мы можем создавать сколько угодно, с уникальными именами разумеется.
Итак, данные мы получили. Остался последний шаг — вывести их на морде в нужной позиции. Делаем шаг-3.
Шаг-3.
Открываем шаблон страницы продукта
Находим кнопку «Купить» (примерно 313 строка)
и ниже добавляем код вывода нашего инфоблока(ов)
Любуемся на результат нашего труда:
Модуль выводится циклом, потому что мы можем создать несколько разных модулей и указать им нашу позицию, по аналогии со стандартными позициями. Все модули с нашей позицией выведутся на странице один за другим. В данном примере массив состоит из одного элемента-модуля.
Источник
Как вывести модуль на определенной странице Opencart
За все время работы с Opencart, я ни разу не задавался вопросом, как вывести модуль только на одной категории, продукте или странице. Всегда модули расположены на всех страницах одного типа, но тут возник вопрос, как же все таки это реализовать?
В продолжение статьи создание позиции вывода модулей в OpenCart, сегодня мы найдем ответ, как же отображать модуль только на определенных страницах, и сделаем это без вмешательства в код, собственноручно через административную панель!
Как работают схемы (layout) в Opencart
Для того чтобы решить данную задачу, необходимо четко понимать, как работает вывод (layout) в Opencart. Сейчас я попробую объяснить вам как это функционирует как я это понимаю.
В Администраторской панели Opencart присутствует пункт меню «Система» — «Дизайн» — «Схемы». Схемы — это бланки/контейнеры/шаблоны, которые могут быть применены к любой странице. Каждая схема представляет из себя просто список указанных для нее модулей в определенных местах (верх, низ, лево, право).
Каждая схема (layout) может применяться к элементам благодаря двум параметрам:
- по адресу (url), используя переменную route;
- по привязке ее к элементу (категории, продукту, статье).
Таблица layout_route хранит информацию о адресах/разделах, к которым прикреплена та или иная схема:
А связь с определенным элементом указывается для каждого элемента отдельно в его настройках, и таблица связей (в нашем случае категорий со схемами) выглядит следующим образом:
Как вывести или скрыть модуль на определенной странице Opencart
Теперь, когда мы разобрались со связями, давайте разберемся с административной частью и выведем модуль только в одной категории. Стандартные схемы созданы на основе адреса (переменной route) и применяются к разделу (ко всем категориям/статьям/продуктам), в случае если для элемента раздела не указана уникальная схема.
Мы же создадим новую схему, которая не будет привязана по адресу — мы ее будем применять только к одному элементу раздела, а именно к категории Components.
Теперь, нам необходимо указать связь между этим Layout’ом (схемой) и нашим элементом, к которому мы хотим его применить. Сделать это можно, если у вашего элемента присутствует вкладка Дизайн (Design), в которой и указывается схема:
Теперь наша с вами категория Components будет показывать только те модули, которым мы задали отображение в схеме Category Components:
После того как мы добавили нужные модули к нашей схеме, категория Components стала уникальной:
Как видите, для данной категории с уникальной схемой выводится только один модуль, для того чтобы категория или товар выглядела также как и остальные — просто добавьте все нужные модули в эту схему и они появятся на странице с уникальной схемой.
Вот таким незамысловатым способом вы можете вывести модуль только на одной категории, только на одной странице/статье, только на странице одного продукта и т.д. Также вы можете применить одну и ту же схему для нескольких элементов раздела, и «особенными» будут все эти разделы. Также вы можете ознакомиться с оригиналом статьи, про принцип работы схем в Opencart.
Есть вопрос? Что-то не понятно в статье? Хочешь отблагодарить? Пиши комментарий!
Если тебе понравилась статья, а тем более если еще и помогла — поставь +1 и нажми «Мне нравится»!
Источник
Cоздаем новую позицию в макете для вывода модулей в Opencart 2.3
Для вывода модулей не всегда достаточно тех позиций в макете, что предоставляет по-умолчанию Opencart. Поэтому, рано или поздно, возникает необходимость в создании своих кастомных позиций.
В интернете не слишком много информации по поводу решения этого вопроса, однако, некоторые инструкции все же есть. В основном они относятся к версии Opencart 1.5 или Opencart 2.
Создаем новую позицию в Opencart 2.3
В данном примере мы создадим позицию, расположенную ниже блока header, и выведем в новом месте модуль карусели.
Создание контроллера
Начнем с того, что создадим контроллер новой позиции в папке «catalog/controller/common/».
Для этого просто скопируем существующий контроллер content_top.php, который уже находится в указанной папке, и переименуем его в head_bottom.php
Теперь в head_bottom.php необходимо изменить строчку:
Дополнительно, все встречающиеся в этом файле упоминания content_top нужно заменить на head_bottom.
Создание шаблона новой позиции
В папке «catalog/view/theme/ВАШ_ШАБЛОН/template/common/» создаем файл head_bottom.tpl и вставляем в него следующий код (html-контейнер для вывода модулей может быть любой, по вашему усмотрению):
Вывод новой позиции под хэдером
Откроем файл «catalog/view/theme/ВАШ_ШАБЛОН/template/common/header.tpl».
В этом файле, в самом конце, после закрывающей скобки (в дефолтной теме) вставляем код вывода нового шаблона:
Переходим к административной части
Теперь необходимо отобразить новую позицию в админке на странице макета. Для этого перейдем к файлу «admin/view/template/design/layout_form.tpl».
Здесь находим таблицу с id=»module-content-top». Строчка:
Эту таблицу нужно скопировать целиком и вставить выше.
В скопированной таблице надо изменить id=»module-content-top» на id=»module-head-bottom», а так же поменять строчки:
Двигаемся к концу скопированной таблицы и находим кнопку:
меняем её на эту:
Таблица настроена, но это еще не все. Переходим в конец данного файла, к строчке:
Здесь нам нужно добавить id новой таблицы (#module-head-bottom). Должно получиться так:
Ниже аналогичная ситуация. Меняем это:
Изменяем языковой файл
В файле «admin/language/template/ru-ru/design/layout.php» после строчки:
Модифицируем контроллер
Редактировать контроллер вручную не рекомендуется. Поэтому лучше оформить данные изменение в виде модификатора.
В модификатор можно упаковать и остальные изменения, которые мы сделали.
Пока мы в каталоге admin, разберемся с контроллером, находящимся тут. Откроем «admin/controller/design/layout.php» и перед строчкой:
Далее, уже в catalog, откроем контроллер header.php по адресу «catalog/controller/common/header.php» и найдем там строчку:
После нее нужно вставить:
После создания новой позиции в макете не работает слайдер или другие модули
Почему-то на данном этапе некоторые инструкции в интернете останавливаются. И, действительно, если мы перейдем в админку сайта (в раздел Дизайн > Схемы) и попробуем настроить, например, макет главной страницы (или home), то увидим желанную новую позицию для размещения модулей.
Однако, если мы попробуем добавить в него слайдер или карусель (при условии, что на странице они больше нигде не выводятся. Если выводится, то на первый взгляд, все будет хорошо и модуль отработает корректно), то увидим, как изображения из слайдера выстроятся друг под другом и вообще — карусель работать не будет.
Такое происходит потому, что при использовании новой позиции скрипты выбранных модулей не подключаются к странице. Если на странице будет другой такой же модуль, то все будет работать — этот модуль просто инициализирует подключение нужных скриптов и стилей самостоятельно.
Чтобы устранить эту проблему, нужно просто добавить в контроллер home.php нашу новую позицию для вывода.
Для этого откроем файл «catalog/controller/common/home.php» и после строчки
После этого слайдер, карусель или другой стандартный модуль должны заработать.
Источник
Написание модуля для OpenCart 3.x
OpenCart — одна из популярных CMS для магазина, но в стандартном виде в нем не очень-то много возможностей, что компенсируется большим количеством платных и бесплатных модулей. В этой статье на простом примере я постараюсь рассказать как создать свой модуль для OpenCart 3.x.
Модуль OpenCart может быть исполнен в нескольких вариантах:
- Файл-модификатор OCMOD, который изменяет уже существующие в системе файлы. Подробнее о том, как написать модификатор читайте в следующей статье.
- Набор php, twig и других файлов, которые добавляют новые возможности в системе как отдельная программа и не затрагивающие стандартный функционал.
- Комбинированный — сочетание модификатора и файлов php, twig и т.д.
В этой статье рассказывается как написать свой модуль для OpenCart добавляющий новые возможности в систему.
Начну с того, что OpenCart построен на схеме MVC (Model-View-Controller). Это значит, что модуль может состоять из следующих файлов:
- Контроллер (Controller) — php-файл, который будет вызван первым и отвечает за логику работы конкретного модуля, определяет, что именно будет делать модуль, обрабатывает взаимодействие с пользователем и т.д. Контроллер может использовать (хотя и не обязательно) Модель и Представление.
- Модель (Model) — php-файл, отвечающий за чтение и запись данных в базу данных, т.е. содержит функции для получения или сохранения данных. Файл модели не обязателен.
- Представление (View) — файл какого-то html-шаблона, который определяет каким образом будет выведена информация на экран браузера. В OpenCart 3.x для создания шаблонов применяется обработчик шаблонов Twig и поэтому файл имеют расширение .twig.
Для поддержки мультиязычности в OpenCart так же есть языковые файлы, о которых будет чуть ниже. Файлы OpenCart-а организованы по папкам, контроллеры в своих, представления в своих и т.д. Итак, для создания модуля и правильного расположения файлов, нам понядобятся следующие папки и файлы:
Кроме контроллера, модели и представления, у модуля так же обычно есть так называемые языковые файлы, которые находятся в папках:
Впринципе, если планируется только 1 язык, то можно сделать языковые файлы только для него.
Минимально, у модуля должен быть хотя бы 1 php-файл — контроллер. Остальные составляющие, впринципе, могут и отсутствовать, если модуль не работает с базой данных и ничего не выводит пользователю. Но думаю, не имеет смысла рассматривать такой модуль, т.к. таким образом, мы не сможем понять всю цепочку создания полноценного модуля.
Итак, представим, что мы разрабатываем пример модуля для OpenCart 3.x, который будет иметь административную часть (back) и пользовательскую (front). В административной части, он будет иметь лишь одну настройку «Статус», которую можно менять на Включено/Выключено. А в пользовательской части пусть просто выведет страницу с текстом «Пример модуля на OpenCart 3.x», если он включен или сообщение об ошибке, если выключен. Файлы примера модуля пусть будут иметь имя example, т.е. example.php, example.twig и т.д.
Административная часть модуля
Приведу сразу исходные тексты файлов, думаю, на примерах будет проще понять что для чего нужно. Всего их 4 шт: контроллер, модель, представление и языковой файл для русского языка. Вкратце как происходит взаимодействие напишу сразу после исходного кода.
Контроллер модуля admin/controller/extension/module/example.php
Создание контроллера предполагает чтение из базы единственной настройки — статуса (включено/выключено), выведение на экран представления (шаблона) и сохранение настройки, когда пользователь нажал соответствующую кнопку.
Модель модуля admin/model/extension/module/example.php
Создание модели подразумевает работу с базой данных, а именно сохранение и чтение данных. В данном случае, можно использовать стандартные opencart-овские методы, но при необходимости, вы конечно можете, создавать свои таблицы и сохранять и читать из них.
Языковой файл модуля admin/language/ru-ru/extension/module/example.php
Здесь все просто: нужно написать все используемые фразы и предложения и их переводы на русский, которые будут использоваться в представлении (шаблоне).
Представление (шаблон) модуля admin/view/template/extension/module/example.twig
Как упоминалось выше, для создания представлений-шаблонов, нужно использовать twig. Русскоязычную документацию можете посмотреть, например, на x-twig.ru
Теперь еще несколько слов о том, как всё примерно работает и взаимодействует.
Когда мы нажимаем на кнопку перехода в настройки модуля, в адресной строке получается адрес заканчивающийся на index.php?route=extension/module/example&user_token=123. Токен в конце соответственно будет другой. Нас интересует часть extension/module/example — именно она и говорит opencart-у, где находится файл нашего контроллера.
Получивший управление файл контроллера загружает файл-модель для обращения к базе данных, загружает языковой файл и выводит шаблон twig на экран браузера.
Обратите внимание: в первых строках контроллера и модели идут названия классов: class ControllerExtensionModuleExample extends Controller и class ModelExtensionModuleExample extends Model. Как видим, в их названиях присутствует путь к модулю и название модуля. Если назвать классы как-то иначе, ничего работать не будет.
Пользовательская часть модуля
Контроллер модуля catalog/controller/extension/module/example.php
Создание контроллера пользовательской части похоже на административную, только не нужно сохранять настройки, нужно только написать код, который вывводит информацию в зависимости от того включен модуль или нет.
Модель модуля catalog/model/extension/module/example.php
В нашем примере модель пользовательской части маленькая, т.к. нужно лищь прочитать одну настройку.
Языковой файл модуля catalog/langugage/ru-ru/extension/module/example.php
Представление (шаблон) модуля catalog/view/theme/default/template/extension/module/example.twig
Задача представления вывести на экран посетителю либо страницу с заголовком «Пример модуля на OpenCart 3.x», либо с сообщением «Модуль выключен» в зависимости от того, что выбрано в статусе модуля в его настройках.
Принцип работы пользовательской части такой же, как и административной. В адресной строке будет соответственно index.php?route=extension/module/example, что и говорит opencart-у какой файл контроллера нужно использовать и из какой папки.
В административной части и в пользовательской я использовал по 4 файла (контроллер, модель, языковой файл и представление). Однако, как я писал выше, впринципе, вы можете создать более компактный модуль, сократив количество файлов только до одного контроллера, если он всё необходимое сделает сам. Так же, можно и наоборот, написать более сложный модуль, который будет состоять из нескольких контроллеров, нескольких моделей и нескольких шаблонов.
Создание архива для загрузки модуля установщиком расширений
Когда модуль полностью готов, его лучше оформить в виде архивного файла, который OpenCart может загрузить и установить в систему. Для этого нужно создать папку upload и поместить в нее все файлы модуля со всей структурой папок в которых они находятся. Затем папку нужно упаковать в zip-архив с именем название_модуля.ocmod.zip. В примере выше получится архив example.ocmod.zip.
Теперь модуль готов для автоустановки установщиком расширений.
После установки модуля он появляется в списке модулей.
Модуль нужно активировать нажав на зеленую кнопку со знаком «плюс», после чего можно зайти в настройки модуля через синюю кнопку со знаком «карандаш».
Источник