Новое 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.
