Как сделать элемент для Zoo/JBZoo? — Основы

8.8/10 оценка (6 голосов)

Вступление

Многие пользователи Zoo/JBZoo даже не подозревают, что создание собственных элементов — это просто. Имея базовые знания PHP/JS можно без проблем написать простой, но функциональный элемент.

В этой статье мы рассмотрим и научимся:

  • Создавать обычные, повторяемые и отправляемые элементы.

  • Использовать в них ajax.

  • Создавать класс отвечающий за импорт/экспорт.

  • Создавать новые шаблоны элементов в фильтре.

  • Узнаем о системных событиях.

Как устанавливать элемент?

Установка заключается в создании основной папки и файлов.

В нашем случае есть два места, где можно создать элемент:

  • media/zoo/elements/ — стандартная папка zoo. Тут находятся все базовые элементы и элементы ядра .

  • media/zoo/applications/<Application>/elements/ — папка для Application.

Файловая структура элемента

Структура файлов и папок должна выглядеть следующим образом:

jbint — корневая папка элемента.

  • tmpl — папка для шаблонов.

    • default.php — шаблон простого вывода.

    • thousand.php — шаблон вывода с разделением тысячных.

    • edit.php — вывод формы редактирования в административной части.

    • index.html — заглушка.

  • jbint.php — основной файл нашего элемента.

  • jbint.xml — xml файл. В нем можно оставить информацию об авторе, создать необходимые настройки. У xml файла должна быть минимальная структура, о который мы поговорим ниже.

  • index.html — заглушка.

Именование классов

Имя класса любого элемента должно начинаться с префикса Element и заканчиваться названием.

К примеру, классы стандартных элементов:

  • Текст — ElementText.

  • Чекбокс — ElementCheckbox.

  • Изображение — ElementImage.

Разберем несколько типичных элементов и их объявления классов.

Простейший

Element<АЛИАС_ЭЛЕМЕНТА> extends Element {}

Повторяемый

Element<АЛИАС_ЭЛЕМЕНТА> extends ElementRepeatable {}

Отправляемый

Element<АЛИАС_ЭЛЕМЕНТА> extends ElementRepeatable implements iSubmittable {}

Повторяемо-отправляемый

Element<АЛИАС_ЭЛЕМЕНТА> extends ElementRepeatable implements iRepeatSubmittable {}

Ключевые методы

Простейший

Абстрактный класс Element требует от нас определить один метод.

  • edit — выводит информацию в административную часть.

Повторяемый

Наследование от абстрактного класса ElementRepeatable обязывает нас перезагрузить один метод.

  • _edit — выводит информацию в административную часть для повторяемого элемента.

Отправляемый

Интерфейс iSubmittable требует от нас определить два метода:

  • renderSubmission — при подаче материала вывод осуществляется из этого метода.

  • validateSubmission — проверка входящих данных после подачи материала.

Отправляемо-повторяемый элемент

Реализация интерфейса iRepeatSubmittable требует от нас реализации двух методов:

  • _renderSubmission — вывод при подаче материала для повторяемого элемента.

  • _validateSubmission — проверка входящих данных.

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

В случае переопределения какого-то из методов (render, edit, getSearchData, hasValue) вывод повторяемого элемента будет лежать на ваших плечах в переопределенном методе.

За что отвечает каждый из методов?

hasValue — этот метод вызывается перед выводом элемента. Происходит проверка на пустоту, если null | false — он не выводится.

edit — выводит форму редактирования в административную часть сайта.

render — вывод содержимого на сайт.

getSearchData — результаты из этого метода попадают в mysql таблицы, данные из которых используются для поиска и фильтров.

renderSubmission — при подаче материала вывод осуществляется из этого метода.

validateSubmission — проверка входящих данных после подачи материала.

Все те же методы, но с нижним подчеркиванием, вызываются для повторяемых элементов.

API, Создание элемента

У меня остались вопросы, где я могу их задать?

Вы можете обратиться на наш специальный форум техподдержки JBZoo. Если у вас нет активного аккаунта со знаком «плюс» в тарифном плане, то вы можете задать свой вопрос в одном из этих разделов или на любой из наших контактов. Форум специально предназначен для JBZoo, приоритет и скорость ответа там выше.