Создание плагина Shop script

От себя скажу сразу, что Shop script (который не 5й, а раньше) мне не нравится, но тем не менее работать с ним приходится.
Приведу простой условный пример создания плагина – вызова специалиста на дом: при нажатии на кнопку должно появляться модальное окно, данные с которого отправятся на сервер и как-то обработаются.
Предполагается, что модальное окно будет реализовано с помощью Fancybox.
В сумме понадобится создать 2 дополнительных файла:

  • 1. function.callspec.php в директории /kernel/includes/smarty/plugins/function.callspec.php – здесь будет происходить вызов нужного темплейта, а так же обработка пришедших с формы (которая на темплейте) данных
  • 2. темплейт с формой, я назвала его callspec.html в директории /published/SC/html/scripts/templates/frontend/callspec.html – просто форма

Что же касается стилей и js скрипта, то здесь все зависит от вас; я, обычно, создаю кастомные css и js файлы для работы с модулями, которые подключаю в заголовке. Если вы не практикуете такой подход, то можете расположить их в любом удобном для вас месте.
Что бы плагин заработал необходимо в шаблоне желаемой страницы (в моем случае это product_info.html) вставить тег с именем функции, в данном случае callspec – вот так {callspec}. В таком случае движок зайдет в function.callspec.php и выполнит указанное там.
Итак, содержимое самого function.callspec.php:

Оно условно разбито на две части: обработку запроса, если он пришел, и отрисовку/возвращение темплейта, если запрос не пришел.
Содержимое файла callspec.html:

Как видите – это просто форма.
Думаю, код для fancybox приводить не стоит – приведу необходимое – отправку данных из шаблона выше на сервер для обработки в function.callspec.php

Теперь картина работы становится ясна полностью:
при отрисовки шаблона, где расположен тег с именем функции (в моем случае product_info.html) {callspec} движок ищет файл function.callspec.php, попадая в него происходит проверка – пришел ли к нам POST или нет, если не пришел – отрисовываем и возвращаем темплейт callspec.html. Когда же мы отправляем ajax запрос на тот же урл, то движок выполняет все те же действия, что и впредыдущем варианте, но здесь он уже проходит проверку с переданным параметром поста и происходит часть с обработкой.
Пример достаточно условный, однако, таким простым способ можно решить большое количество мелких задач.