Что делает
file.copy — основной шаг, который раскладывает файлы решения в нужные места сайта: шаблоны, публичные страницы, данные simai.data, служебные include и т.д.
Чаще всего file.copy используют списком операций: каждая операция копирует один каталог/набор файлов из пакета решения в целевую директорию.
Рядом почти всегда ставят replace.code — чтобы заменить “жёстко прошитые” коды/пути (например, /ru/) на фактический код/каталог выбранного сайта.
Какие данные ждёт
file.copy принимает parameter как массив операций вида:
source— источник (от docroot или от директории мастера, зависит от вашего пакета)destination— целевой путь (обычно от docroot)rewrite—Y|N(перезаписывать ли существующие файлы)name— человекочитаемое название операции (опционально, но удобно для логов/UI)
Пример file.copy как “пакетная раскладка”
<?php
declare(strict_types=1);
use SIMAI\Wizard;
return [
[
'name' => 'Копирование файлов решения',
'code' => 'file.copy',
'autocomplete' => 'Y',
'parameter' => [
[
'name' => 'Данные сайта (simai.data)',
'source' => Wizard::getLocal(__DIR__) . '/data/site/ru/simai.data/',
'destination' => '/ru/simai.data/',
'rewrite' => 'Y',
],
[
'name' => 'Публичная часть',
'source' => Wizard::getLocal(__DIR__) . '/data/site/ru/public/',
'destination' => '/ru/',
'rewrite' => 'Y',
],
[
'name' => 'Шаблон (если решение ставит свой шаблон поверх системного)',
'source' => Wizard::getLocal(__DIR__) . '/data/site/ru/template/',
'destination' => '/bitrix/templates/<your_solution_template>/',
'rewrite' => 'Y',
],
],
],
];
Вариант: тот же шаг, но с “плейсхолдерами сайта” (если вы используете их)
Если после site.choice.install вы формируете site_config с ключами (например) SITE_DIR, SITE_ID, DIR, то в источниках/назначениях можно использовать плейсхолдеры вида #DIR#, #SITE#.
Требует уточнения: какие именно плейсхолдеры вы реально используете в мастерах (как называются ключи).
[
'name' => 'Копирование данных сайта',
'code' => 'file.copy',
'data_input_code' => 'site_config',
'autocomplete' => 'Y',
'parameter' => [
[
'source' => Wizard::getLocal(__DIR__) . '/data/site/#SITE_ID#/simai.data/',
'destination' => '#DIR#/simai.data/',
'rewrite' => 'Y',
],
],
],
Пример связки с replace.code
Ваше описание replace.code — “замена кодов ru в публичной части на id сайта”. Это типичный шаг после копирования.
Требует уточнения: точная схема параметров replace.code (какие ключи указывают “что заменить / на что заменить / где искать”).
Паттерн вставки (как концепт):
[
'name' => 'Замена кодов сайта в файлах',
'code' => 'replace.code',
'data_input_code' => 'site_config',
'autocomplete' => 'Y',
'parameter' => [
// пример: заменить "/ru/" на "/#SITE_ID#/" в целевых каталогах
// ключи зависят от реализации replace.code (нужно закрепить в документации после уточнения)
],
],
Что проверить (smoke-check)
- Все источники существуют внутри пакета мастера (
/data/...) и не зависят от окружения. - В целевых директориях хватает прав на запись.
- Если
rewrite=Y, вы понимаете политику перезаписи: какие файлы вы считаете “системными решения” и какие “проектными”. - После раскладки страницы реально открываются (минимум — главная и тестовая).