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

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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.09.2015, 14:29  Ссылка на сообщение   #1  
Гончаров Игорь is offline
Гончаров Игорь
Administrator
 
575 / 901 (32) +++++++
Регистрация: 23.01.2013
Что такое плагины?

Плагином мы называем набор файлов, организованных по определенным правилам и добавляющих или меняющих логику работы платформы.

Для простоты понимания рассмотрим пример плагина ItemTargetBlank.
Стояла задача: все ссылки на товары, открывать в новой вкладке, по аналогии с сайтом https://www.taobao.com/

Структура файлов:
packages/
НзаваниеПлагина (основная папка с файлами плагина, например ItemTargetBlank)
- НзаваниеПлагинаPlugin.class.php (основной класс плагина, например ItemTargetBlankPlugin.class.php)
- config (папка содержащая конфигурационный файл плагина)
-- config.xml (файл конфигурации плагина)

Для активации плагина, необходимо поместить основную папку плагина в папку packages, например /packages/ItemTargetBlank/ .

Файл config.xml имеет вид:
X++:
<?xml version="1.0" encoding="UTF-8"?>
<plugin>
    <title>Открыть товар в новой вкладке</title>
    <description>Все ссылки на товары будут открываться в новой вкладке (по аналогии с сайтом taobao)</description>
    <version>1.0.0</version>
    <events>
        <event name="onAfterRenderFooter" />
    </events>
</plugin>
Все узлы конфигурации интуитивно поняты. Отдельно остановлюсь на узле events. Узел содержит список событий, при которых будет вызван наш плагин. В примере это только одно событие "onAfterRenderFooter" (выводит результат плагина в после подвала сайта).

Основная логика плагина содержится в файле ItemTargetBlankPlugin.class.php. Мы постарались минимизировать навязываемые стандарты к написанию данного файла. Вот ряд правил, которые необходимо соблюдать:
- класс должен называться по названию НзаваниеПлагинаPlugin (например ItemTargetBlankPlugin)
- класс должен быть унаследован от GeneralPlugin

Класс плагина содержит методы, название которых соответствует названию событий заявленных в файле конфигурации. Например:
public function onAfterRenderFooter($vars = array()) { ... }
Класс плагина может содержать метод public function renderPluginPage($request) - метод должен вернуть html. Этот html будет отображен администратору сайта в админке сайта. На самом деле в этом методе можно организовать свой роутинг и сделать админку внутри админки. Все ограничено лишь Вашей фантазией.



Рецепты:
- Если администратор сайта изменяет статус строки заказа на "Готово к отправке", необходимо отправить sms уведомление покупателю.
За это сообщение автора поблагодарили: Данияр (31), Анна Сердюкова (3).
Старый 16.09.2015, 17:33  Ссылка на сообщение   #2  
Гончаров Игорь is offline
Гончаров Игорь
Administrator
 
575 / 901 (32) +++++++
Регистрация: 23.01.2013
Дорогие друзья. Задавайте свои вопросы в комментариях к данной теме. По мере возможности буду отвечать и развивать данную тему, добавляя больше интересной информации и примеров.

Спасибо.
Старый 19.10.2017, 15:40  Ссылка на сообщение   #3  
Гончаров Игорь is offline
Гончаров Игорь
Administrator
 
575 / 901 (32) +++++++
Регистрация: 23.01.2013
В обновлении 1.7.13 добавились новые события плагинов для работы с вызовом otapi.

Рассмотрим простую, но универсальную задачу: если администратор сайта изменяет статус строки заказа на "Готово к отправке", необходимо отправить sms уведомление покупателю.

Пример решения задачи.

Для начала добавляем использование необходимых нам событий в config.xml:
onOtapilibAfterGetDataНазваниеМетода - постобработка ответа при вызове сервисов из /otapilib.php
- onOtapilibAfterGetDataChangeLineStatus
- onOtapilibAfterGetDataUpdateOrderLineForOperator
- onOtapilibAfterGetDataUpdateOrderLinesForOperator
onAbstractOTAPILib2AfterCatchResponseНазваниеМетода - постобработка ответа при вызове сервисов из /otapilib2/OTAPILib2.php
- onAbstractOTAPILib2AfterCatchResponseChangeLineStatus
- onAbstractOTAPILib2AfterCatchResponseUpdateOrderLineForOperator
- onAbstractOTAPILib2AfterCatchResponseUpdateOrderLinesForOperator

Теперь в плагине делаем обработку каждого объявленного события.
По условию нашей задачи изменение статуса должно обрабатываться только для статуса "Готово к отправке" (Id=8). Поэтому добавляем дополнительное условие и при его срабатывании по номеру заказа получаем информацию о заказе, а затем и информацию о пользователе. Формируем и отправляем смс через удобный для нас сервис.

Замечания:
- событие onAbstractOTAPILib2AfterCatchResponseНазваниеМетода будет вызвано только при успешном ответе от сервисов, что позволяет пропустить проверку ответа от сервисов. В случае с событием onOtapilibAfterGetDataНазваниеМетода требуется добавить проверку на то, что сервисы успешно изменили статус строки заказа без ошибок: <ErrorCode>Ok</ErrorCode>.
__________________
Руководитель отдела РНР-разработки.
За это сообщение автора поблагодарили: maxirk (15).
 

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что такое "корень сайта" и как его найти? Evgeniya Zykova База Знаний 32 04.02.2014 10:25
Как добавить социальные плагины? Leepey Рабочие вопросы 5 30.03.2013 06:47
Хостинг: что такое, зачем нужен, как регистрировать Tatyana_S Приемная 5 25.02.2013 17:11
Что такое "Интервал отображаемых страниц в постраничном разбиении"? Ольга Бабушкина Рабочие вопросы 2 01.02.2013 11:13
Что такое домен и как его регистрировать? Tatyana_S Приемная 3 29.01.2013 17:31
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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


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