Главная  /  Правка  /  История  /   /  Область пользователей

Новое 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 &parameter)
      {
         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.

Проект

CppCMS является основой веб-разработки для выполнения ресурсоемких приложений.

Размещение

SourceForge.net Logo

Поддержать проект

CppCMS needs You


Навигация

Главная страница


Валидация CSS | Валидация XHTML 1.0