Действия мастера: где находятся и как используются в реальных сценариях
В SIMAI Framework 4 (SF4) action — это единица работы мастера: отдельная папка в /simai/wizard/action/<code>/, которую шаг мастера вызывает по значению code. Внутри action обычно присутствует описание (.description.php) и исполняемая часть.
По данным поставки SF4 в текущем наборе локальных материалов видно, что исполняемая часть action может быть оформлена двумя способами:
- как
action.php(классический вариант — большинство действий); - как
class.php(в поставке точно встречается для импорта инфоблоков из архива).
Также есть действия, у которых в поставке присутствует только описание (.description.php) — такие действия существуют как “зарезервированные” или исторические элементы, но исполняемого файла в поставке нет.
Отдельно важно для практики: у тебя в .wizard.config.php используется цепочка действий, которая реально демонстрирует «рабочий скелет» мастера SF4. В ней задействованы следующие actions (в порядке выполнения):
site.choice.installfile.copy(копирование системных частей решения)urlrewrite.addsite.updatefile.copy(копирование файлов сайта в выбранную директорию#dir#)replace.codedata.import.file→option.import.datadata.import.file→usergroup.import.datadata.import.file→iblocktype.import.dataiblock.import.archiveredirect
Группы actions и краткое назначение (по поставке SF4)
Ниже — краткий справочник действий, сгруппированный так, как принято в SF4. Я намеренно не помечаю “устаревшие” (ты написал, что не хочешь), но факт наличия/отсутствия исполняемой части отмечаю, потому что это критично для разработчика мастера: иначе можно включить действие в сценарий и получить “пустой шаг”.
file.* — операции с файлами и каталогами
-
file.copy— копирование файлов/каталогов (исполняемая часть:action.php). В твоём мастере используется дважды:- копирование шаблонов в
/bitrix/templates/и файлов в/; - копирование файлов сайта в директорию
#dir#(подставляется по выбранному сайту/директории).
- копирование шаблонов в
-
file.create— создание файла по параметрам (исполняемая часть:action.php). -
file.delete— удаление файлов/каталогов (исполняемая часть:action.php). -
file.rename— переименование файлов/каталогов (исполняемая часть:action.php). -
file.unzip,file.zip,file.encode.win1251,file.add— в поставке присутствуют как описания, но исполняемой части нет (только.description.php).
data.* — загрузка/выгрузка данных мастера
-
data.import.file— загрузка массива данных из файла в хранилище мастера (исполняемая часть:action.php). В твоём мастере используется для поочерёдной загрузки:.option.config.php→ вoption;.usergroup.config.php→ вusergroup;.iblocktype.config.php→ вiblocktype.
-
data.export.file— выгрузка данных мастера в файл (исполняемая часть:action.php). -
data.add.config— “добавить/подмешать” конфигурацию в данные мастера (исполняемая часть:action.php). -
data.add.property— в поставке присутствует как описание, но исполняемой части нет.
option.* — перенос/применение опций
option.import.data— применить импортированные опции (исполняемая часть:action.php). В твоём мастере идёт сразу послеdata.import.file(который загрузил.option.config.php).option.export.data— экспорт опций в пакет мастера (исполняемая часть:action.php).
usergroup.* — группы пользователей
usergroup.import.data— применить импортированные группы (исполняемая часть:action.php). В твоём мастере идёт после загрузки.usergroup.config.php.usergroup.export.data— экспорт групп (исполняемая часть:action.php).
site.* — операции уровня сайта
-
site.choice.install— шаг выбора сайта/директории установки и формированиеsite_config(исполняемая часть:action.php). Это “вход” твоего мастера. -
site.update— обновление/применение решения к выбранному сайту (исполняемая часть:action.php). В твоём сценарии передаются параметры:template = simai.framework;name = SOLUTION_NAME(через локализацию).
-
site.choice,site.create,site.import.data,site.translate— в поставке присутствуют как описания, но исполняемой части нет. -
Также в поставке есть
site.export.dataиsite.update.sveden(исполняемые), но они не используются в твоём конкретном.wizard.config.php.
iblock.* и iblocktype.* — инфоблоки
-
iblock.import.archive— импорт инфоблоков из архивов (в поставке реализовано черезclass.php, то есть “класс-реализация”, а неaction.php). В твоём сценарии action получает список архивов:source(zip),destination(код/цель),site(ru). -
iblock.export.archive— экспорт инфоблоков в архив (исполняемая часть:action.php). -
iblock.import.archive.sveden— импорт по специализированному сценарию (в поставке тоже черезclass.php). -
iblock.translate— действие, связанное с переводом/локализацией данных инфоблоков (исполняемая часть:action.php). -
iblocktype.export.data— экспорт типов инфоблоков (исполняемая часть:action.php). -
iblocktype.import.data— в твоём.wizard.config.phpдействие присутствует как шаг, но в поставке есть только описание безaction.php. Это важная практическая деталь: такой шаг в мастере требует либо:- вашей проектной реализации (своё действие), либо
- подключения другой исполняемой логики (если она хранится в мастере отдельно). Иначе шаг будет “пустым” или завершится ошибкой в зависимости от того, как stage-компонент обрабатывает отсутствие исполняемого файла.
urlrewrite.* — правила маршрутизации
-
urlrewrite.add— добавление правилurlrewriteиз файла-источника (исполняемая часть:action.php). В твоём мастере параметр:source = .../data/config/urlrewrite.php.
shortlink.* — короткие ссылки
shortlink.import.data,shortlink.export.data— импорт/экспорт коротких ссылок (исполняемая часть:action.php). В твоём.wizard.config.phpне используются, но в поставке присутствуют.
misc — сервисные шаги мастера
-
agreement— шаг подтверждения/соглашения (исполняемая часть:action.php). -
info— информационный шаг (исполняемая часть:action.php). -
redirect— перенаправление по завершению (исполняемая часть:action.php). В твоём мастере параметры:link = /simai/wizard/master/simai.sveden/master = simai.sf4university
-
dir.make— создание каталога (исполняемая часть:action.php). -
install.check,language.choice,dir.choice,cut.names,restore.names— присутствуют как описания, но без исполняемой части.
Как документировать actions в SF4 так, чтобы это было полезно разработчику
Самый практичный формат описания action в документации SF4 — не “пересказ кода”, а контракт шага:
- Что делает (в 1–2 предложениях).
- Что принимает на вход:
data_input_code(какой массив ожидается в$arResult["DATA"][...]). - Что пишет на выход:
data_output_code(куда кладёт результат). - Какие параметры нужны: структура
parameter(это самое ценное для сборщика мастера). - Какие файлы/каталоги затрагивает: чтобы понимать риски (особенно для
file.copy,replace.code).
На примере твоего мастера это особенно хорошо видно:
site.choice.installформируетsite_config.file.copyиспользуетsite_configи массивparameter[]сsource/destination/name.data.import.fileпревращает файл-конфиг в массив вDATA[...].option.import.dataиusergroup.import.dataприменяют эти массивы.iblock.import.archiveприменяет список архивов, где каждый элемент описан одинаково.