Руководство по написанию кода плагинов
В дополнение к стандартам кодирования Elgg, это руководство по созданию плагинов. Встроенные плагины обновляются до этого формата, и все авторы плагинов должны следовать этим рекомендациям в своих плагинах.
См.также
Обязательно следуйте Структура плагина для структуры вашего плагина.
Предупреждение
Содержание
Используйте стандартизированную маршрутизацию с обработчиками страниц
Пример: плагин закладок
- Обработчики страниц должны принимать следующие стандартные URL:
Назначение
URL
Все
page_handler/all
Пользователь
page_handler/owner/<username>
Друзья пользователя
page_handler/friends/<username>
Отдельная сущность
page_handler/view/<guid>/<title>
Добавить
page_handler/add/<container_guid>
Редактировать
page_handler/edit/<guid>
Список групп
page_handler/group/<guid>/owner
Включайте скрипты обработчика страниц из обработчика страниц. Почти каждый обработчик страниц должен иметь скрипт обработчика страниц. (Пример:
bookmarks/all=>mod/bookmarks/views/default/resources/bookmarks/all.php)Передавайте аргументы, такие как guid сущностей, в представление ресурса через
$varsвelgg_view_resource().Вызывайте
elgg_gatekeeper()иelgg_admin_gatekeeper()в функции обработчика страниц, если требуется.URL группы должен использовать представления типа
resources/groups/*.phpдля отрисовки страниц.Обработчики страниц не должны содержать HTML.
Используйте стандартизированные обработчики страниц и скрипты
Пример: плагин закладок
Храните функциональность страниц в
mod/<plugin>/views/default/resources/<page_handler>/<page_name>.phpИспользуйте
elgg_view_resource('<page_handler>/<page_name>')для отрисовки.Используйте макет страницы по умолчанию в скриптах обработчика страниц:
$content = elgg_view_layout('default', $options);Скрипты обработчика страниц не должны содержать HTML
Вызывайте
elgg_push_entity_breadcrumbs()илиelgg_push_collection_breadcrumbs()в скриптах обработчика страниц.Нет необходимости беспокоиться об установке владельца страницы, если URL в стандартизированном формате
Для контента группы проверяйте
container_guidс помощьюelgg_get_page_owner_entity()
Представление object/<subtype>
Пример: плагин закладок
Убедитесь, что есть представления для
$vars['full_view'] == trueи$vars['full_view'] == falseПроверяйте объект в
$vars['entity']. Используйтеelgg_instance_of(), чтобы убедиться, что это сущность нужного типа. Вернитеtrueдля прерывания представления, если сущность отсутствует или неверна.Используйте новые представления list body и list metadata для помощи в форматировании. Вы должны использовать почти никакой разметки в этих представлениях.
Обновите структуру действий — Пример: плагин закладок.
Используйте пространства имён для файлов действий и имён действий (пример:
mod/blog/actions/blog/save.php=>action/blog/save)- Используйте следующие URL действий:
Назначение
URL
Добавить
action/plugin/save
Редактировать
action/plugin/save
Удалить
action/plugin/delete
Сделайте так, чтобы действие удаления принимало
action/<handler>/delete?guid=<guid>, чтобы меню сущности метаданных имело правильный URL по умолчанию
Действия
Действия — это переходные состояния для выполнения действия, такого как обновление базы данных или отправка уведомления пользователю. При правильном использовании действия обеспечивают уровень контроля доступа и защищают от атак CSRF.
Действия требуют отправки токенов действия (CSRF) через GET/POST, но они добавляются автоматически elgg_view_form() и при использовании аргумента is_action представления output/url.
Лучшие практики для действий
Файлы действий включаются в систему действий Elgg; как и представления, они не являются обычными скриптами, исполняемыми пользователями. Не загружайте ядро Elgg в вашем файле и не направляйте пользователей загружать его напрямую.
Поскольку действия чувствительны ко времени, они не подходят для ссылок в электронных письмах или других отложенных уведомлениях. Примером этого могут быть приглашения присоединиться к группе. Чистый способ создания ссылки-приглашения — создать обработчик страниц для приглашений и отправить эту ссылку пользователю по электронной почте. Затем ответственность за создание ссылок действий для пользователя, чтобы присоединиться или проигнорировать запрос на приглашение, лежит на обработчике страниц.
Учитывайте, что действия могут отправляться через запросы XHR, а не только через ссылки или отправку форм.
Прямой вызов файла
Это просто: Не делайте этого. За исключением интеграции сторонних приложений, нет причин напрямую вызывать файл в директории mods.
Рекомендуется
Эти пункты — хорошие идеи, но они ещё не включены в официальные рекомендации. Следование этим предложениям поможет сохранить ваш плагин согласованным с ядром Elgg.
Обновите представления виджетов (см. виджеты блога или файлов)
Обновите „виджет“ профиля группы, используя плагины блога или файлов в качестве примера
- Обновите формы
Переместите тела форм в
/forms/<handler>/<action>для использования новогоelgg_view_form()от ЭванаИспользуйте представления input в телах форм вместо HTML
Добавьте функцию, которая подготавливает форму (см.
mod/file/lib/file.phpв качестве примера)Интегрируйте липкие формы (см. действие загрузки плагина file и функцию подготовки формы)
- Очистите CSS/HTML
Должно быть возможно удалить почти весь CSS (ищите шаблоны, которые можно перенести в ядро, если вам нужен CSS)
Используйте дефисы вместо подчёркиваний в классах/идентификаторах
Не используйте категорию
bundledс вашими плагинами. Это для плагинов, распространяемых с ElggНе используйте
register_shutdown_function, так как у вас может не быть доступа к определённым частям Elgg (например, базе данных). Вместо этого используйте событиеshutdownsystem