# Работа из командной строки (CLI)

# regenerate.php

Компонент `Gallery3x` включает в себя скрипты для выполнения задач обслуживания и массовой обработки данных напрямую из консоли (терминала) вашего сервера по SSH. Это гораздо быстрее и эффективнее для больших объемов данных, чем выполнение тех же действий через браузер.

## Перегенерация всех превью

Со временем вам может понадобиться обновить все миниатюры в галерее. Например, если вы изменили настройки водяного знака, добавили новый размер превью или изменили параметры фильтров в системных настройках.

Для этой задачи предназначен скрипт `regenerate.php`.

### Использование

1. Подключитесь к вашему серверу по **SSH**.
2. Перейдите в **корневую директорию** вашего сайта MODX (там, где находится папка `core`).
3. Выполните следующую команду:
    
    <div _ngcontent-ng-c1906655948="" class="code-block ng-tns-c1906655948-148 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" jslog="223238;track:impression;BardVeMetadataKey:[["r_740f69ae35b68b9f","c_b8511ae2af5280fd",null,"rc_1a52e10e40078708",null,null,"ru",null,1,null,null,1,0]]" style="display: block;"><div _ngcontent-ng-c1906655948="" class="code-block-decoration header-formatted gds-title-s ng-tns-c1906655948-148 ng-star-inserted"><span class="ng-tns-c1906655948-148">Bash</span><div _ngcontent-ng-c1906655948="" class="buttons ng-tns-c1906655948-148 ng-star-inserted"><button aria-label="Скопировать код" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-mdc-tooltip-trigger copy-button ng-tns-c1906655948-148 mat-unthemed _mat-animation-noopable ng-star-inserted"></button></div></div><div _ngcontent-ng-c1906655948="" class="formatted-code-block-internal-container ng-tns-c1906655948-148"><div _ngcontent-ng-c1906655948="" class="animated-opacity ng-tns-c1906655948-148"></div></div></div>```
    php core/components/gallery3x/cli/regenerate.php
    
    ```
    
    <div _ngcontent-ng-c1906655948="" class="code-block ng-tns-c1906655948-148 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" jslog="223238;track:impression;BardVeMetadataKey:[["r_740f69ae35b68b9f","c_b8511ae2af5280fd",null,"rc_1a52e10e40078708",null,null,"ru",null,1,null,null,1,0]]" style="display: block;"><div _ngcontent-ng-c1906655948="" class="formatted-code-block-internal-container ng-tns-c1906655948-148"><div _ngcontent-ng-c1906655948="" class="animated-opacity ng-tns-c1906655948-148"></div></div></div>

Скрипт начнет свою работу и будет выводить в консоль информацию о прогрессе, обрабатывая каждый найденный файл в галерее.

<div _ngcontent-ng-c1906655948="" class="code-block ng-tns-c1906655948-149 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk--1" jslog="223238;track:impression;BardVeMetadataKey:[["r_740f69ae35b68b9f","c_b8511ae2af5280fd",null,"rc_1a52e10e40078708",null,null,"ru",null,1,null,null,1,0]]" style="display: block;"><div _ngcontent-ng-c1906655948="" class="formatted-code-block-internal-container ng-tns-c1906655948-149"><div _ngcontent-ng-c1906655948="" class="animated-opacity ng-tns-c1906655948-149"></div></div></div>```
MODX Initialized. Starting regeneration...
Found 58 files to process.

Processing file ID: 1 (Resource: 2, Filename: photo1.jpg)
Processing file ID: 2 (Resource: 2, Filename: photo2.webp)
...
Processing file ID: 58 (Resource: 15, Filename: another.png)

----------------------------------------
Done! Regenerated thumbnails for 58 of 58 files.
Site cache has been cleared.

```

<div _ngcontent-ng-c1906655948="" class="code-block ng-tns-c1906655948-149 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" id="bkmrk--2" jslog="223238;track:impression;BardVeMetadataKey:[["r_740f69ae35b68b9f","c_b8511ae2af5280fd",null,"rc_1a52e10e40078708",null,null,"ru",null,1,null,null,1,0]]" style="display: block;"><div _ngcontent-ng-c1906655948="" class="formatted-code-block-internal-container ng-tns-c1906655948-149"><div _ngcontent-ng-c1906655948="" class="animated-opacity ng-tns-c1906655948-149"></div></div></div>После завершения работы скрипта все превью для всех изображений в компоненте `Gallery3x` будут пересозданы с учетом самых последних настроек. В конце скрипт автоматически очистит кеш сайта.

# import_ms2gallery.php

# Импорт из ms2Gallery

Компонент `Gallery3x` включает в себя консольный скрипт для миграции изображений из старого компонента `ms2Gallery`. Это позволяет легко и быстро перенести все существующие галереи на новый, современный движок `Gallery3x` при переезде с MODX 2 на MODX 3.

**Ключевая особенность:** Скрипт работает, даже если вы **уже удалили** пакет `ms2Gallery` из админ-панели. Главное, чтобы его таблица (`modx_ms2_resource_files`) и физические файлы остались на сервере.

### Использование скрипта

- **Автоматизация:** Скрипт автоматически переносит тысячи файлов и их метаданные.
- **Использование процессора:** Для каждого файла вызывается стандартный процессор загрузки `Gallery3x`, что гарантирует применение **всех ваших текущих настроек** (транслитерация, водяные знаки, фильтры, генерация превью).
- **Сохранение данных:** Скрипт переносит не только сами файлы, но и всю важную информацию: название, описание, alt-тег, статус (активен/неактивен) и порядок сортировки.

---

### Подготовка к импорту

Перед запуском убедитесь, что:

1. Старая таблица `ms2Gallery` (обычно `префикс_ms2_resource_files`) все еще существует в вашей базе данных.
2. Физические файлы, загруженные через `ms2Gallery`, все еще находятся на сервере.

---

### Настройка и запуск скрипта

Вся настройка производится прямо в файле скрипта.

1. **Откройте файл скрипта** в текстовом редакторе. Он находится по пути: `/core/components/gallery3x/cli/import_ms2gallery.php`
2. **Настройте параметры** в самом верху файла:
    
    <div _ngcontent-ng-c2201599828="" class="code-block ng-tns-c2201599828-2011 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwiClOCvksyPAxUAAAAAHQAAAAAQ0Qo" decode-data-ved="1" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_5ab0af49da82072d","c_b8511ae2af5280fd",null,"rc_d5557a3270d24242",null,null,"ru",null,1,null,null,1,0]]" style="display: block;"><div _ngcontent-ng-c2201599828="" class="code-block-decoration header-formatted gds-title-s ng-tns-c2201599828-2011 ng-star-inserted"><span class="ng-tns-c2201599828-2011">PHP</span><div _ngcontent-ng-c2201599828="" class="buttons ng-tns-c2201599828-2011 ng-star-inserted"><button aria-label="Скопировать код" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-mdc-tooltip-trigger copy-button ng-tns-c2201599828-2011 mat-unthemed _mat-animation-noopable ng-star-inserted"></button></div></div><div _ngcontent-ng-c2201599828="" class="formatted-code-block-internal-container ng-tns-c2201599828-2011"><div _ngcontent-ng-c2201599828="" class="animated-opacity ng-tns-c2201599828-2011">  
    </div></div></div>```
    // ===================================================================
    // --- НАСТРОЙКИ ИМПОРТА: Укажите ваши значения здесь ---
    // ===================================================================
    
    // ID ресурса для импорта. Укажите 0, чтобы импортировать для ВСЕХ ресурсов.
    $resourceId = 0;
    
    // "Сухой" запуск. 
    // true  - скрипт только покажет, какие файлы он нашел, но ничего не будет импортировать.
    // false - скрипт выполнит реальный импорт.
    $isDryRun = true;
    
    ```
    
    <div _ngcontent-ng-c2201599828="" class="code-block ng-tns-c2201599828-2011 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwiClOCvksyPAxUAAAAAHQAAAAAQ0Qo" decode-data-ved="1" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_5ab0af49da82072d","c_b8511ae2af5280fd",null,"rc_d5557a3270d24242",null,null,"ru",null,1,null,null,1,0]]" style="display: block;"><div _ngcontent-ng-c2201599828="" class="formatted-code-block-internal-container ng-tns-c2201599828-2011"><div _ngcontent-ng-c2201599828="" class="animated-opacity ng-tns-c2201599828-2011"></div></div></div>
3. **Запустите скрипт из консоли (терминала) по SSH.** Сначала всегда запускайте в "сухом" режиме, чтобы убедиться, что скрипт правильно находит ваши файлы. Для этого `$isDryRun` должен быть `true`.
    
    
    - Перейдите в корневую директорию вашего сайта.
    - Выполните команду:
        
        <div _ngcontent-ng-c2201599828="" class="code-block ng-tns-c2201599828-2012 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwiClOCvksyPAxUAAAAAHQAAAAAQ0go" decode-data-ved="1" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_5ab0af49da82072d","c_b8511ae2af5280fd",null,"rc_d5557a3270d24242",null,null,"ru",null,1,null,null,1,0]]" style="display: block;"><div _ngcontent-ng-c2201599828="" class="code-block-decoration header-formatted gds-title-s ng-tns-c2201599828-2012 ng-star-inserted"><span class="ng-tns-c2201599828-2012">Bash</span><div _ngcontent-ng-c2201599828="" class="buttons ng-tns-c2201599828-2012 ng-star-inserted"><button aria-label="Скопировать код" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-mdc-tooltip-trigger copy-button ng-tns-c2201599828-2012 mat-unthemed _mat-animation-noopable ng-star-inserted"></button></div></div><div _ngcontent-ng-c2201599828="" class="formatted-code-block-internal-container ng-tns-c2201599828-2012"><div _ngcontent-ng-c2201599828="" class="animated-opacity ng-tns-c2201599828-2012">  
        </div></div></div>```
        php core/components/gallery3x/cli/import_ms2gallery.php
        
        ```
        
        <div _ngcontent-ng-c2201599828="" class="code-block ng-tns-c2201599828-2012 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwiClOCvksyPAxUAAAAAHQAAAAAQ0go" decode-data-ved="1" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_5ab0af49da82072d","c_b8511ae2af5280fd",null,"rc_d5557a3270d24242",null,null,"ru",null,1,null,null,1,0]]" style="display: block;"><div _ngcontent-ng-c2201599828="" class="formatted-code-block-internal-container ng-tns-c2201599828-2012"><div _ngcontent-ng-c2201599828="" class="animated-opacity ng-tns-c2201599828-2012"></div></div></div>
    - Вы увидите в консоли отчет о том, сколько файлов найдено для импорта.
4. **Запустите реальный импорт.**
    
    
    - Если "сухой" запуск прошел успешно, измените в файле скрипта `$isDryRun = false;`.
    - Сохраните файл и выполните ту же команду в консоли еще раз.
    
    Начнется процесс копирования файлов, создания записей в базе и генерации превью.
    
    <div _ngcontent-ng-c2201599828="" class="code-block ng-tns-c2201599828-2013 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwiClOCvksyPAxUAAAAAHQAAAAAQ0wo" decode-data-ved="1" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_5ab0af49da82072d","c_b8511ae2af5280fd",null,"rc_d5557a3270d24242",null,null,"ru",null,1,null,null,1,0]]" style="display: block;"><div _ngcontent-ng-c2201599828="" class="formatted-code-block-internal-container ng-tns-c2201599828-2013"><div _ngcontent-ng-c2201599828="" class="animated-opacity ng-tns-c2201599828-2013">  
    </div></div></div>```
    MODX Initialized. Starting ms2Gallery import...
    Found 150 files to process.
    
    Processing file: /path/to/site/assets/images/products/12/photo1.jpg
     -> SUCCESS: Imported to Gallery3x file ID 210
    
    Processing file: /path/to/site/assets/images/products/12/photo2.jpg
     -> SUCCESS: Imported to Gallery3x file ID 211
    ...
    ----------------------------------------
    SUCCESS: Imported 150 of 150 found files.
    Site cache has been cleared.
    
    ```
    
    <div _ngcontent-ng-c2201599828="" class="code-block ng-tns-c2201599828-2013 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahgKEwiClOCvksyPAxUAAAAAHQAAAAAQ0wo" decode-data-ved="1" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_5ab0af49da82072d","c_b8511ae2af5280fd",null,"rc_d5557a3270d24242",null,null,"ru",null,1,null,null,1,0]]" style="display: block;"><div _ngcontent-ng-c2201599828="" class="formatted-code-block-internal-container ng-tns-c2201599828-2013"><div _ngcontent-ng-c2201599828="" class="animated-opacity ng-tns-c2201599828-2013"></div></div></div>

---

### После импорта

1. **Проверьте результат:** Зайдите в админ-панели на страницы ресурсов и убедитесь, что изображения появились во вкладке "Галерея" компонента `Gallery3x`.
2. **Проверьте сайт:** Убедитесь, что галереи на сайте отображаются правильно.
3. **Очистка (опционально):** Когда вы будете полностью уверены, что миграция прошла успешно, вы можете вручную удалить старую таблицу `modx_ms2_resource_files` из базы данных, чтобы она не занимала место.