Skip to content

Latest commit

 

History

History
120 lines (92 loc) · 6.66 KB

extensions.extdevguide.ru.md

File metadata and controls

120 lines (92 loc) · 6.66 KB

Введение в создание расширений

В этом файле представлен дополнительный материал, для актуализации одноименной статьи в разделе документации 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