home chevron_right
2\) Раскладка файлов решения: `file.copy` (+ часто рядом `replace.code`)

Что делаетlink

file.copy — основной шаг, который раскладывает файлы решения в нужные места сайта: шаблоны, публичные страницы, данные simai.data, служебные include и т.д.

Чаще всего file.copy используют списком операций: каждая операция копирует один каталог/набор файлов из пакета решения в целевую директорию.

Рядом почти всегда ставят replace.code — чтобы заменить “жёстко прошитые” коды/пути (например, /ru/) на фактический код/каталог выбранного сайта.

Какие данные ждётlink

file.copy принимает parameter как массив операций вида:

  • source — источник (от docroot или от директории мастера, зависит от вашего пакета)
  • destination — целевой путь (обычно от docroot)
  • rewriteY|N (перезаписывать ли существующие файлы)
  • name — человекочитаемое название операции (опционально, но удобно для логов/UI)

Пример file.copy как “пакетная раскладка”link

<?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',
            ],
        ],
    ],
];

Вариант: тот же шаг, но с “плейсхолдерами сайта” (если вы используете их)link

Если после 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.codelink

Ваше описание 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)link

  1. Все источники существуют внутри пакета мастера (/data/...) и не зависят от окружения.
  2. В целевых директориях хватает прав на запись.
  3. Если rewrite=Y, вы понимаете политику перезаписи: какие файлы вы считаете “системными решения” и какие “проектными”.
  4. После раскладки страницы реально открываются (минимум — главная и тестовая).