Форум IP.Board

Дополнения и хаки

Готов поспорить, что многие из вас ждали эту запись. Однако мы хотели быть уверены в том, что большая часть системы реализована прежде чем описывать ее. И вот теперь когда система завершена, мы готовы описать ее!

Общее представление

 

Во-первых, давайте дадим определение термину хук («hook»), который будет использовать в данной записи. Итак, хук — это точка выполнения стороннего кода, в ней происходит вызов и выполнение кода автора модификации и возврат к исполнению основного кода IP.Board. Дополнение («plugin») — это набор хуков (т.е. модификация может содержать несколько хуков из 2 или 3 файлов, но мы все равно ее будем считать единой модификацией, которую и будем называть дополнением).

IP.Board 3, как и обещалось, будет использовать новую систему хуков и дополнений для авторов модификаций. Сама система относительно всесторонняя, без большого количества «точек хуков» (места вызова стороннего кода, вручную вставляемые в исходные файлы), потому что это в конечном счете потребовало бы сложного обслуживания бесконечных запросов «могли бы Вы добавлять точку хука в xyz местоположение». Мы хотели предоставить с форумом решение, которое было бы расширяемым, которым легко было бы управлять и поддерживать, и которое бы удовлетворяло большинству нужд разработчиков без необходимости изменения исходного кода ядра. В то же время во время разработки новой системы хуков мы осознали, что не можем и не хотим сложить всю ответственность за модифицирование на систему шаблонов. И хотя, вероятно, изменить стиль намного проще, чем исходный код файла, полный перенос ответственности не решит проблему, над которой мы упорно работаем. Конечная цель, конечно, предоставить вам возможность улучшать ваши форумы вообще без изменения исходных файлов. Более того, это сделает простым обновление, так как вам больше не надо будет переустанавливать модификации, более простой станет поддержка, так как мы сможем просто отключить ваши хуки, без необходимости проверять все файлы на наличие изменений, ну и конечно же вам не надо будет тратить по 30 минут на добавление кода модификаций в код форума по инструкции для установки оной.

 

Работа системы хуков и дополнений для конечных пользователей

 

Добавлена новая страница в администраторской панели для управления хуками, на ней выводится список всех установленных в системе хуков. С этой страницы вы легко можете отключать и включать хуки, а так же определять порядок выполнения их (хотя в большинстве случаев это не имеет значения, опция существует для тех случаев, когда один плагин должен внедрить свой хук в другой плагин). Так же на данной странице вам будет доступна информация, которую предоставил автор, о самом дополнении (такая как имя автора, email адрес и его сайт, а так же все файлы принадлежащие данному дополнению), вы сможете проверить соответствие вашей системы минимальным/максимальным версиям PHP и IPB, которые необходимы для работы хука. Хук система так же поддерживает механизм обновления с использованием URL проверки версии, таким образом автор может оповещать вас о выходе новой версии мода.

Для установки хука вам просто необходимо загрузить XML файл через админцентр! Система хуков по принципам близка к популярной модификации Universal Mod Installer для ранних версий IP.Board, она так же запускает необходимые запросы для базы данных, импортирует настройки, языки, шаблоны стиля, модули, задачи, файлы помощи пользовательской и администраторской частей. Так же процесс установки хука поддерживает исполнение дополнительных скриптов, которые бывают необходимы в случае если процессу установки необходимо выполнить действия, которые не поддерживаются в самой системе установки хука. Аналогично, при удалении хука все изменения автоматически отменяются, а дополнительный скрипт производит дополнительную очистку, если это необходимо.

Все действительно так просто. Импортируете XML файл и сразу же видите изменения в своей системе.

 

Работа системы хуков и дополнений на системном уровне

 

При импортировании хуков в админцентре сами хуки кеширутся в директорию /hooks. Система использует хуки, которые зарегистрированы через админцентр, это позволяет предотвратить утечку ресурсов, которая может произойти при попытке использовать хуки, не существующие в данный момент в системе.В IP.Board 3 введено три типа хуков:

  • Перегрузчики действий (Action overloaders)
  • Перегрузчики стилей (Skin overloaders)
  • Хуки шаблонов (Template hooks)

Перегрузчики действий позволяют вам расширять файлы действий, что позволяет сделать фактически все, что вы только можете представить. Примером данного расширения может быть изменение файла главной страницы форума (списка форумов): вы добавляете дополнительную информацию для вывода к $this->output, а затем вызываете parent::doExecute() для того, чтобы позволить IP.Board закончить загрузку списка форумов с вашими изменениями. Или вы можете изменить исходный файл таким образом, чтобы после отправки формы дополнительные данные сохранялись в базе. Большинство методов в IP.Board объявлены как protected, поэтому вы будете иметь полный доступ к ним в ваших расширяющих классах.

Перегрузчики стилей работают аналогично перегрузчикам действий, с той лишь разницей, что расширяется файл стиля. Хорошим примером того, для чего вам возможно будет необходимо использовать данный тип хуков — полное изменение шаблона содержимого, если пользователь попадает под какие-то условия или, например, если вы хотите избавить администратора от внесения изменения в шаблоны.И, наконец, хуки шаблонов. Во время вывода контента, если ваш хук включен, он исполняется, и HTML комментарий заменяется данными, поступившими из вашего хука. Перед и после каждого цикла foreach, конструкции if, и конструкции else, добавляются HTML комментарии в HTML выдаче (автоматически при помощи нашей системы стилей) с определенным синтаксисом . Вы регистрируете ваш хук шаблона в админцентре указывая в каком стиле вам необходимо применить данный хук. Во время вывода контента, если ваш хук включен, он исполняется и HTML комментарий заменяется данными, поступившими, из вашего хука.В целом, новая система предоставляет методы для инъекции кода в исходный код и в результаты вывода. Что покрывает основную часть необходимых для разработчика областей.

Мы планируем предоставить несколько примеров с выходом IP.Gallery, IP.Blog и IP.Downloads. Я не буду раскрывать подробности сейчас, но некоторые вещи, которые наши пользователи просили реализовать нас и в реализации которых мы отказывали по причине необходимости изменять исходный код IP.Board, теперь стали возможными, что позволило сделать интеграцию наших продуктов более плотной на сколько это возможно.

 

Работа хуков и дополнений для разработчиков

 

В панеле администратора вы создаете новое дополнение, заполняете несколько базовых полей такие как автор, название дополнения и сайт. Затем создаете файлы хуков и в форме создания нового дополнения выбираете какие файлы являются частью дополнения (количество файлов не ограничено). И дальше пишете модификацию как обычно.

 

При экспортировании плагина вы в интерактивном режиме настраиваете системные настройки, группы настроек, языковые конструкции, шаблоны стиля, модули, файлы помощи, дополнительные скрипты установки/удаления, задачи и изменения в базе данных. Если вы уже использовали universal mod installer, наша система будет похожа на него, с главным отличием, что вы настраиваете эти детали в интерактивном режиме, а не ручной правкой XML файла.И, наконец, когда вы экспортируете хук, ваш код собирается и добавляется в XML файл. Процесс импорта хука заботится о создании кеша кода в системе и импортирования всех данных, которые вы настроили при экспорте дополнения.

 

В заключении

 

Перед началом написания данной записи мы попробовали создать 5 различных популярных модификаций, чтобы убедиться что мы сможем реализовать каждую из этих модификаций без внесения правок в исходный код IP.Board 3 — и мы прошли данный тест. Мы планируем предоставить больше информации по системе для разработчиков ближе к выходу IP.Board 3, чтобы помочь им изучить новую систему.

Back to top button