В этом файле представлен дополнительный материал, для актуализации одноименной статьи в разделе документации Cotonti, находящейся по адресу: https://www.cotonti.com/ru/docs/ext/extensions/extdevguide
Note: Указанная статья сильно отличается от оригинала на английском и подлежит значительной переработке.
Информация приведенная далее касается раздела «Структура файла установки», и будет актуальна в случае дополнения ядра Cotonti более продвинутым механизмом проверки зависимостей, базой для которого может послужить пакет
versioning(см.описание тут), а также дополнениямиExtensionsAPI и модуля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