Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

...

Все узлы конфигурации интуитивно поняты. Отдельно остановлюсь на узле events. Узел содержит список событий, при которых будет вызван наш плагин. В примере это только одно событие "onAfterRenderFooter" (выводит результат плагина в после подвала сайта).

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

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

Рецепты:
- Если В обновлении 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>.

Как правильно создать страницу со своей логикой и контентом.

Мы всем рекомендуем создать так называемый "плагин".

В данной теме мы рассмотрим пример такого плагина:
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 Мы всем рекомендуем создать так называемый "плагин".
В данной теме мы рассмотрим пример такого плагина:
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]);
Если у Вас возникли вопросы или проблемы: обратитесь, пожалуйста, в нашу службу технической поддержки. 

Правила обновления кастомизированных сайтов

Для проверки обновляемости сайта пройдите по ссылке в разделе Обновление, в админке. В случае если перейдя по ссылке Вы увидели сообщение "Сайт можно обновлять", то можете приступить к данному действию (если кастом незначительный, и сделан по правилам).  Если Вы увидите, что сайт нельзя обновлять, то  нужно обновиться самостоятельно согласно инструкции

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]);

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

Правила обновления кастомизированных сайтов

Для проверки обновляемости сайта пройдите по ссылке в разделе Обновление, в админке. ВНИМАНИЕ! Ручное обновление сайта, то есть распаковка архива обновления на сервере хостинга в папке сайта не считается обновлением, так как не были запущенны скрипты для полного обновления сайта, которое возможно произвести только через админ панель сайта.
При обновлении сайтов в которые внесены изменения касающиеся их отображения и/или добавлены сторонние модули необходимо в первую очередь проверить, что существует папки templatescustom/ и blockscustom/, все измененные шаблоны и другие измененные файлы находятся только в этих папках.
Следующим шагом является сохранение всех файлов из папок templatescustom/,blockscustom/, themes/имя-темы/viewscustom/ к себе на компьютер и переименовать или удалить эти папки на хостинге.
Далее можно проверить возможность обновления сайта через раздел в административной его части "Обновление"
В случае если перейдя по ссылке Вы увидели сообщение "Сайт можно обновлять", то можете приступить к данному действию .
После произведенных действий по обновлению необходимо проверить работоспособность сайта и вернуть на хостинг папки templatescustom/, blockscustom/ и themes/имя-темы/viewscustom/.
Стоит отметить, что очень важно запускать обновление через админ панель сайта, что бы скрипты обновления запустились и завершили обновление в полном объеме.
После завершения процесса обновления необходимо ОБЯЗАТЕЛЬНО перенести кастом из старых кастомизированных шаблонов в шаблоны, полученные с обновлением и поместить их в кастомные папки. Процесс обновления без последнего шага по переносу кастома в новые шаблоны считается не завершенным и претензии относительно того, что "что то" не работает на сайте не принимаются.
В случае глубокой кастомизации сайта для обновления необходимо обратиться в службу поддержки Опентрейд (услуга платная).

Мы больше не занимаемся бесплатным обновлением кастомизированных сайтов. Если Вы желаете привести сайт к обновляемости (при этом возможен частичный отказ от ряда кастомизаций) или обновить платформу силами нашей команды - сообщите все кастомизации на своем сайте для оценки времени работ. Стоимость 1 часа работы - 20$. Мы приводим сайт к обновляемости платно, но один раз. После чего он обновляется уже самостоятельно из админки.

Не открывается главная страница сайта. Что делать?

Если главная страница сайта не открывается, а админка открывается нормально — попробуйте очистить кэш из админки.

Как поменять домен сайта.

(если кастом незначительный, и сделан по правилам).  Если Вы увидите, что сайт нельзя обновлять, то  нужно обновиться самостоятельно согласно инструкции

ВНИМАНИЕ! Ручное обновление сайта, то есть распаковка архива обновления на сервере хостинга в папке сайта не считается обновлением, так как не были запущенны скрипты для полного обновления сайта, которое возможно произвести только через админ панель сайта.

При обновлении сайтов в которые внесены изменения касающиеся их отображения и/или добавлены сторонние модули необходимо в первую очередь проверить, что существует папки templatescustom/ и blockscustom/, все измененные шаблоны и другие измененные файлы находятся только в этих папках.
Следующим шагом является сохранение всех файлов из папок templatescustom/,blockscustom/, themes/имя-темы/viewscustom/ к себе на компьютер и переименовать или удалить эти папки на хостинге.
Далее можно проверить возможность обновления сайта через раздел в административной его части "Обновление"

В случае если перейдя по ссылке Вы увидели сообщение "Сайт можно обновлять", то можете приступить к данному действию.
После произведенных действий по обновлению необходимо проверить работоспособность сайта и вернуть на хостинг папки templatescustom/, blockscustom/ и themes/имя-темы/viewscustom/.

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

После завершения процесса обновления необходимо ОБЯЗАТЕЛЬНО перенести кастом из старых кастомизированных шаблонов в шаблоны, полученные с обновлением и поместить их в кастомные папки. Процесс обновления без последнего шага по переносу кастома в новые шаблоны считается не завершенным и претензии относительно того, что "что то" не работает на сайте не принимаются.

В случае глубокой кастомизации сайта для обновления необходимо обратиться в службу поддержки Опентрейд (услуга платная).

Мы больше не занимаемся бесплатным обновлением кастомизированных сайтов. Если Вы желаете привести сайт к обновляемости (при этом возможен частичный отказ от ряда кастомизаций) или обновить платформу силами нашей команды - сообщите все кастомизации на своем сайте для оценки времени работ. Стоимость 1 часа работы - 20$. Мы приводим сайт к обновляемости платно, но один раз. После чего он обновляется уже самостоятельно из админки.

Не открывается главная страница сайта. Что делать?

Если главная страница сайта не открывается, а админка открывается нормально — попробуйте очистить кэш из админки.

Как поменять домен сайта.

Если у агента ОХ, то:  Напишите пожалуйста заявку в саппорт  http://support.otcommerce.com с указанием доступов к новому домену: а именно как зайти на сайт, где вы покупали домен (ссылку на него и логин и пароль).Если у агента ОХ, то:  Напишите пожалуйста заявку в саппорт  http://support.otcommerce.com с указанием доступов к новому домену: а именно как зайти на сайт, где вы покупали домен (ссылку на него и логин и пароль).

Либо можете поменять DNS в ПУ домена самостоятельно:

...

Начиная с версии коробки 1.10.0 появилась возможность создавать свои темы дизайна. Это позволит локализовать свои правки и избежать больших проблем при обновлении.
Для добавления новой темы дизайна вам необходимо скопировать стандартную тему дизайна /themes/lite/ и назвать её, например, /themes/custom. После этих действий в админке в разделе Конфигурация › Система › Общие выберите тему custom как активную:
Image Removed
Такая организация кода позволит при обновлении не затирать js и css файлы вашей уникальной темы.
Важно! Если вам необходимо изменить несколько шаблонов и нет необходимости полного изменения в дизайне, то лучше воспользоваться созданием папки /themes/lite/viewscustom/ ./themes/custom. После этих действий в админке в разделе Конфигурация › Система › Общие выберите тему custom как активную:
Image Added


Такая организация кода позволит при обновлении не затирать js и css файлы вашей уникальной темы.

Важно! Если вам необходимо изменить несколько шаблонов и нет необходимости полного изменения в дизайне, то лучше воспользоваться созданием папки /themes/lite/viewscustom/ 

Фильтрация запрещенных товаров на сайте

Товары можно запрещать к продаже или вовсе скрыть с сайта.

Функционал "Фильтрация запрещенных товаров на сайте" доступен ТОЛЬКО для фильтров:
Товары - по id
Категории - по id
Продавцы - по id

В админке настройка находится в разделе Конфигурация › заказы › Общие и называется "Ограниченные к показу"
Если выбрано "Запретить" - в карточке товара будет отображена информация "Товар запрещен к продаже администрацией сайта".

Image Added

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

2. В админке в разделе "Конфигурация - Заказы - Общие ", есть настройка "Скрыть на сайте ограниченные к показу".
Image Added

Если выбрано "отобразить" - система будет реагировать как описано выше: в списках товаров товар полупрозрачный, в карточке товара выводиться сообщение "Товар запрещен к продаже администрацией сайта".
Если выбрано "скрыть" - в списках товаров (в каталоге и поисковой выдаче) вместо товара будет отображено "Товар запрещен к продаже администрацией сайта". Ссылка на товар отсутствует. Если все же пользователь перейдет по ссылке на товар, то:
произойдет редирект (перенаправление):
- на категорию товара - если для товара известна категория, иначе
- на товары продавца - если для товара известен продавец, иначе
- на главную страницу