Расширения CKAN перезаписывают друг друга, каков правильный порядок? - PullRequest
0 голосов
/ 22 октября 2018

Когда установлено несколько расширений CKAN, они перезаписывают друг друга.e.g.ckan.plugins = pulgin1, plugin2, plugin3

Если и плагин1, и плагин2 изменяют внешний вид (jinja tempaltes) страницы, кажется, что плагин1 имеет приоритет над плагином2.Это всегда так?

А как насчет функций (функций и т. Д.)?Не нашел код, относящийся к этому или документации.

1 Ответ

0 голосов
/ 23 октября 2018

Что касается шаблонов , плагины, перечисленные слева, имеют приоритет над теми, которые перечислены справа.В вашем примере, если все три плагина предоставляют один и тот же шаблон, чем будет использоваться 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.

...