Что касается шаблонов , плагины, перечисленные слева, имеют приоритет над теми, которые перечислены справа.В вашем примере, если все три плагина предоставляют один и тот же шаблон, чем будет использоваться plugin1
.
Однако это не означает, что изменения шаблона другими плагинами полностью теряются: при реализации шаблонаплагин может решить расширить существующий шаблон, используя синтаксис ckan_extends
.
Если каждый из плагинов в вашем примере использует ckan_extends
для одного и того жешаблон, затем plugin3
расширяет базовую версию CKAN этого шаблона, plugin2
расширяет версию plugin3
и, наконец, plugin1
расширяет версию plugin2
.Если один из плагинов не использует ckan_extends
, то эта цепь разорвана.
В других случаях плагины обычно вызываются в том порядке, в котором они перечислены (слева направо).).Например, если plugin1
и plugin2
реализуют интерфейс IMiddleware
, то сначала вызывается plugin1.make_middleware
, а его результат передается в plugin2.make_middleware
.
Это также означаетчто плагины, перечисленные слева, переопределяют те, что справа, когда они используют одно и то же имя для типа представления ресурса, помощника шаблона и т. д. См. раздел по предотвращению конфликтов имен в документации CKAN для получения дополнительной информации.
Для функций действий , определенных с помощью IActions
, вы можете использовать декоратор ckan.plugins.toolkit.chained_action
для расширения существующих функций действий вместо их замены (аналогично наследованию шаблонов).То же самое относится к функциям авторизации , определенным через IAuthFunctions
, где вы можете использовать декоратор ckan.plugins.toolkit.chained_auth_function
.