В этом файле представлен дополнительный материал, для актуализации одноименной статьи в разделе документации Cotonti, находящейся по адресу: https://www.cotonti.com/ru/docs/ext/extensions/extdevguide
Note: Указанная статья сильно отличается от оригинала на английском и подлежит значительной переработке.
Информация приведенная далее касается раздела «Структура файла установки», и будет актуальна в случае дополнения ядра Cotonti более продвинутым механизмом проверки зависимостей, базой для которого может послужить пакет
versioning
(см.описание тут), а также дополнениямиExtensions
API и модуляAdmin
для взаимодействия с ним.
Основная структура описана в оригинальном документе ( :en: ).
Далее приводятся только нововведения, связанные с возможностью задавать зависимости Расширения (от модулей / плагинов / тем / расширений PHP), а так же их версий.
На текущий момент (версия 0.9.18
) задать зависимость для Расширения можно только условно, указав в файле настроек (ext_name.setup.php
) директиву Requires_modules
или Requires_plugins
и соответствующий список имен расширений, которые являются необходимыми для работы текущего и без которых установка будет невозможной.
Requires_modules=page
Однако такой упрощенный механизм имеет ряд недостатков:
- нет возможности указать конкретную версию расширения, необходимую для работы;
- нет возможности задать версию ядра Cotonti;
- нет возможности иметь привязку к определенному расширению PHP
С внедрением нового механизма можно будет более гибко настраивать зависимости:
- указывать тип зависимости:
php
,core
,plugin
,module
,theme
,admin_theme
,system
- задать конкретно необходимую версию, пример
1.2.3
- задать минимальную или максимальную версию:
>1.2.0
,<=2.0.0
- задавать диапазон за счет символов подстановки
*
:1.5.*
- задать зависимость, когда необходимо наличие «пакета» в системе, но не обязательна проверка на его установку (примеры см. ниже)
- безбоязнено указывать и работать с не полным форматом версий:
1.7
,1.*
Далее приведу примеры директив для setup файла, которые можно будет использовать (некоторые примеры надуманные и приведены просто для демонстрации возможностей):
# расширение требует версии (ядра) Cotonti 0.9.19 и выше.
Requires_core= >=0.9.19
# эквивалентный короткий вариант записи
Requires= >=0.9.19
# Расширение будет работать только если в системе установлен модуль page версии 1.1.1
Requires_page_module = 1.1.1
# модуль PFS версии не менее 0.2.0 должен быть в системе (но не обязательно установленым)
Requires_pfs_module = >0.2.0?
# можно задать условие маской
# модуль pm версии >=0.2.0, но <0.3.0
Requires_pm_module = 0.2.*
# Тема Nemesis должна быть установлена (и выбрана основной)
Requires_nemesis_theme = *
# Тема Skeletonti должна присутствовать в системе (но может быть не выбрана основной)
Requires_skeletonti_theme = *?
# Нашему расширению требуется модуль PHP `curl`, версии 7
Requires_php_curl = 7.*
# Расширение зависит от модуля PHP `bcmath`
# Т.к. модуль не имеет своей внутренней версии, указываем что нам годится любой `*`
Requires_php_bcmath = *
# Хотим минимум PHP версии 5.4
Requires_php = >5.4
# нужно расширение с именем `anyext`
# если не указан конкретный тип, поиск будет произведен сначала среди модулей, затем плагинов
# мусор в виде буквы `v` не помеха и будет проигнорирован
Requires_anyext = v1.0
# можно указывать предрелизные теги
Requires_some_ext3 = >=1.0.0-RC3
# в данном случае `1.0.0-beta` не удовлетворит условию, а версии `1.0.0-RC4` или `1.0.0` удовлетворит
# умеем работать со сложно составными строками версий
# здесь часть 3.5.7 трактуется как номер предрелизного выпуска
Requires_ckeditor = >1.0.0-3.5.7
# сложные условия для одного расширения можно задать указав отдельными строками
Requires_ckeditor = >=1.0.0
Requires_ckeditor = <1.5