Новое API плагинов в 1.2
CppCMS 1.2 ввело новое API плагинов вместе с новой улучшенной поддержкой динамических шаблонов
Написание плагинов
Плагины - это разделяемые (shared) объекты, которые могут зарегистрировать свои функции с помощью синглтона cppcms::plugin::manager
. Например:
Например, вы пишете какой-то класс, реализующий определенное API:
namespace myplugin { class my_class : public plugin_api { public: static my_class *create(std::string const ¶meter) { return new my_class(parameter); } ... }; }
Затем вы можете зарегистрировать его в plugin::manager
используя специальный макрос.
CPPCMS_PLUGIN_ENTRY(myplugin,my_class::create,plugin_api *(std::string const &))
Примечание: третий параметр определяет сигнатуру точки входа (entry) для типобезопасного доступа плагина.
Затем вы можете обратиться к необходимым плагинам из основного кода, вызвав
// callback object booster::callback<plugin_api *(std::string const &)> cb; // get it from plugin cb = cppcms::manager::instance().entry<plugin_api *(std::string const &)>("myplugin","my_class::create"); // call it plugin_api *ptr = cb("foo");
Загрузка плагинов
Время жизни плагина управляется классом cppcms::plugin::scope
. cppcms::service
предоставляет его экземпляр и позволяет загружать плагины из конфигурации
Также можно независимо использовать plugin::scope
- так можно получить раздельное время жизни cppcms::service
и ваших плагинов.
Также можно слинковать views с одним и тем же плагином и они будут загружаться автоматичеки.
Поддержка системой шаблонов
Для создания динамически загружаемых шаблонов из плагинов есть несколько улучшений в системах шаблонов:
Вы можете создать abstract и inline views, чтобы плагины могли легко расширить их.
Используя новые view helpers вы можете вызвать определенные функции из шаблонов по их именам
<% using master_api as m from a_skin, "api" %> <% include foo() from m %> <% end using %>
Вы можете использовать специальный gettext
domain раздельно для каждого views, чтобы плагин мог запускаться в своем собственном домене прозрачно из вызвавшего его view.