[  Зарегистрироваться  ]  Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны Проекты Забыли пароль?

Вернуться   OpenTrade Commerce Forum > Платформа OpenTrade Commerce > Рецепты

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.03.2014, 19:24  Ссылка на сообщение   #1  
Гончаров Игорь is offline
Гончаров Игорь
Administrator
 
571 / 901 (32) +++++++
Регистрация: 23.01.2013
Lightbulb Пример плагина.

Добрый день.
Уважаемый пользователи, нас часто спрашивают как правильно создать страницу со своей логикой и контентом. Мы всем рекомендуем создать так называемый "плагин".

В данной теме мы рассмотрим пример такого плагина:
http://forum.opentao.net/files/plugin_example.zip

Данный архив необходимо распаковать в папку packages в корне сайта (если папки packages нет - создайте её).

Немного о структуре файлов в плагине.
Плагин должен располагаться в отдельной папке, в данном случае `example`.
В папке должен быть php файл ИмяКлассаPlugin.class.php содержащий php class ИмяКлассаPlugin, в нашем случае это ExamplePlugin.class.php и класс ExamplePlugin.
Так же обязательно должен быть файл config/events.xml - в нем описаны все события на которые реагирует класс. Синтаксис вызова события:
<event name="имяСобытия" pakage_path="имя_папки_плагина" class_name="ИмяКлассаPlugin" />

В нашем случае это:
<event name="onTopMenuRender" pakage_path="example" class_name="ExamplePlugin" />

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

Итак - что же делает наш плагин? Пока по файлу events.xml мы можем понять, что после того как на сайте появится верхнее меню - у нас должен выполниться php код:
ExamplePlugin:: onTopMenuRender()

Открыв файл ExamplePlugin.class.php мы увидим, что метод onTopMenuRender просто выводит еще один пункт меню в верхнее меню сайта, дополнительно проверяя не является ли он текущим.

Далее заглянем в файл config/script_controller.xml. В нем описана конфигурация нашего контроллера, который будет отвечать за всю логику которую мы желаем создать.
Наша цель - вывести страницу: шапка + наш контент (формирующийся по условию) + футер.

Посмотрим наш файл script_controller.xml
<controller>
<script name='example-alias'>
<template name='/../packages/example/templatescustom/example_template' />
<blocks>
<block name='HeaderNew' />
<block name='Example' path="example/blockscustom" />
<block name='FooterNew' />
</blocks>
</script>
</controller>

Строка <script name='example-alias'> означает что при переходе по url:
http://site-name.ru/example-alias у нас будет выведен шаблон: example_template.html (который находится по адресу packages/example/templatescustom/). Он содержит в себе вывод блоков HeaderNew, Example и FooterNew - поэтому подключаем их как показано в примере. Для блока Example - необходимо указать путь, в данном случае мы будем хранить наши блоки в папке blockscustom, находящейся в папке нашего плагина.

В блок Example нам осталось:
- указать название шаблона, на основе которого он будет создаваться:
protected $_template = 'post';
- указать в какой папке хранится данный шаблон:
protected $_template_path = '/../packages/example/templatescustom/views/';
- реализовать свою логику метода setVars()

В нашем случае мы получаем переменную из массива $_GET['id']:
$id = $this->request->getValue('id', 0);

и в наш шаблон post.html передаем переменную $post:
$this->tpl->assign('post', $post[$id]);

Если у Вас возникли вопросы или проблемы: обратитесь, пожалуйста, в нашу службу технической поддержки. Самые популярные вопросы мы будем публиковать в этой теме.

Спасибо.
За это сообщение автора поблагодарили: BTC (1), Валерия (14), Виктория Логачева (6), Данияр (20), Анна Сердюкова (1).
Старый 24.03.2014, 19:35  Ссылка на сообщение   #2  
Гончаров Игорь is offline
Гончаров Игорь
Administrator
 
571 / 901 (32) +++++++
Регистрация: 23.01.2013
Обратная сторона медали.

К сожалению, плагины не являются панацеей при кастомизации Вашего сайта. После обновлений редко, но могут возникать проблемы в работе плагинов.

Важно отметить, что проблемы будут в работе плагинов, а не в работе сайта и это ключевое отличие от обычного копирования html шаблонов в папку templatescustom.

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

Спасибо за Ваше понимание.
За это сообщение автора поблагодарили: Валерия (14).
Старый 17.04.2014, 10:24  Ссылка на сообщение   #3  
Гончаров Игорь is offline
Гончаров Игорь
Administrator
 
571 / 901 (32) +++++++
Регистрация: 23.01.2013
Примечания:

Если у Вас не включено ЧПУ (человеко понятные url), то на страницу, генерируемую плагином, можно попасть по адресу:
http://site-name.ru/index.php?p=example-alias
Старый 17.04.2014, 16:33  Ссылка на сообщение   #4  
Данияр is offline
Данияр
Кастомизация сайтов OT
Аватар для Данияр
 
1,082 / 1043 (37) ++++++++
Регистрация: 29.12.2012
Адрес: Казахстан, Костанай
Цитата:
Сообщение от Гончаров Игорь Посмотреть сообщение
Добрый день.
Уважаемый пользователи, нас часто спрашивают как правильно создать страницу со своей логикой и контентом. Мы всем рекомендуем создать так называемый "плагин".

В данной теме мы рассмотрим пример такого плагина:
http://forum.opentao.net/files/plugin_example.zip

Данный архив необходимо распаковать в папку packages в корне сайта (если папки packages нет - создайте её).

Немного о структуре файлов в плагине.
Плагин должен располагаться в отдельной папке, в данном случае `example`.
В папке должен быть php файл ИмяКлассаPlugin.class.php содержащий php class ИмяКлассаPlugin, в нашем случае это ExamplePlugin.class.php и класс ExamplePlugin.
Так же обязательно должен быть файл config/events.xml - в нем описаны все события на которые реагирует класс. Синтаксис вызова события:
<event name="имяСобытия" pakage_path="имя_папки_плагина" class_name="ИмяКлассаPlugin" />

В нашем случае это:
<event name="onTopMenuRender" pakage_path="example" class_name="ExamplePlugin" />

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

Итак - что же делает наш плагин? Пока по файлу events.xml мы можем понять, что после того как на сайте появится верхнее меню - у нас должен выполниться php код:
ExamplePlugin:: onTopMenuRender()

Открыв файл ExamplePlugin.class.php мы увидим, что метод onTopMenuRender просто выводит еще один пункт меню в верхнее меню сайта, дополнительно проверяя не является ли он текущим.

Далее заглянем в файл config/script_controller.xml. В нем описана конфигурация нашего контроллера, который будет отвечать за всю логику которую мы желаем создать.
Наша цель - вывести страницу: шапка + наш контент (формирующийся по условию) + футер.

Посмотрим наш файл script_controller.xml
<controller>
<script name='example-alias'>
<template name='/../packages/example/templatescustom/example_template' />
<blocks>
<block name='HeaderNew' />
<block name='Example' path="example/blockscustom" />
<block name='FooterNew' />
</blocks>
</script>
</controller>

Строка <script name='example-alias'> означает что при переходе по url:
http://site-name.ru/example-alias у нас будет выведен шаблон: example_template.html (который находится по адресу packages/example/templatescustom/). Он содержит в себе вывод блоков HeaderNew, Example и FooterNew - поэтому подключаем их как показано в примере. Для блока Example - необходимо указать путь, в данном случае мы будем хранить наши блоки в папке blockscustom, находящейся в папке нашего плагина.

В блок Example нам осталось:
- указать название шаблона, на основе которого он будет создаваться:
protected $_template = 'post';
- указать в какой папке хранится данный шаблон:
protected $_template_path = '/../packages/example/templatescustom/views/';
- реализовать свою логику метода setVars()

В нашем случае мы получаем переменную из массива $_GET['id']:
$id = $this->request->getValue('id', 0);

и в наш шаблон post.html передаем переменную $post:
$this->tpl->assign('post', $post[$id]);

Если у Вас возникли вопросы или проблемы: обратитесь, пожалуйста, в нашу службу технической поддержки. Самые популярные вопросы мы будем публиковать в этой теме.

Спасибо.
Отлично. помогло. Спасибо
Старый 04.11.2015, 03:16  Ссылка на сообщение   #5  
Eman5 is offline
Eman5
Участник
 
1 / 10 (1) +
Регистрация: 04.11.2015
Спасибо за пост. Все получилось!!!!
Старый 06.09.2017, 15:10  Ссылка на сообщение   #6  
Гончаров Игорь is offline
Гончаров Игорь
Administrator
 
571 / 901 (32) +++++++
Регистрация: 23.01.2013
Текущая тема про плагины устарела. Свежую информацию про плагины можно прочитать тут:
http://forum.otcommerce.com/forums/s...ad.php?t=49124
__________________
Руководитель отдела РНР-разработки.
 
Теги
кастомизация, кастомизация сайта, плагин

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очередной пример нелогичности решения: отображение товара выше некоторой минимальной цены anyproduct.ru Рабочие вопросы 3 12.07.2013 10:47
Пример создания доставки EMS. Гончаров Игорь База Знаний 0 07.06.2013 11:46
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Рейтинг@Mail.ru
Часовой пояс GMT +4, время: 15:42.
Powered by vBulletin® v3.8.5.