Аналог Better Search and Replace для MODX: массовая замена текста на сайте

    При администрировании сайта на MODX часто возникает необходимость глобально заменить фрагмент текста - например, номер телефона в мета-теге description на всех страницах. В WordPress для этих целей существует популярный плагин Better Search and Replace, который выполняет поиск и замену в базе данных за несколько минут. Однако для MODX такого готового расширения «из коробки» нет. Но это не значит, что задачу нельзя решить быстро и без программирования. В этой статье мы разберём все доступные способы: от встроенных инструментов до сторонних утилит.

    Почему в MODX нет прямого аналога Better Search and Replace?

    Архитектура MODX отличается от WordPress. В MODX контент хранится в базе данных, но часто используется в виде чанков, шаблонов и TV-параметров. Плагин Better Search and Replace для WP работает напрямую с таблицами wp_posts и wp_postmeta. В MODX аналогичную задачу можно решить через системные утилиты или SQL-запросы. Однако для типового пользователя без опыта работы с базами данных это может быть сложно. К счастью, существуют более простые подходы.

    Как заменить телефон в description на всех страницах MODX

    Способ 1: Использование системного поиска и замены в админке

    В MODX Revolution есть встроенный инструмент «Поиск» (Find), который позволяет искать текст в ресурсах, чанках, шаблонах и сниппетах. Однако он не поддерживает массовую замену - только поиск. Для замены придётся редактировать каждый ресурс вручную. Если страниц много, это неэффективно.

    Способ 2: Прямой SQL-запрос к базе данных

    Самый быстрый способ - выполнить SQL-запрос через phpMyAdmin или командную строку. Например, чтобы заменить старый телефон на новый в поле description (которое может храниться в TV-параметре или в самом ресурсе), используйте запрос:

    UPDATE modx_site_tmplvar_contentvalues SET value = REPLACE(value, '8-800-123-45-67', '8-800-000-00-00') WHERE tmplvarid = (SELECT id FROM modx_site_tmplvars WHERE name = 'description');

    Важно: Перед выполнением сделайте резервную копию базы данных. Уточните название TV-параметра и ID шаблонов, если нужно ограничить замену.

    Способ 3: Использование сторонних утилит (например, Search and Replace для MODX)

    Существует пакет SearchAndReplace (или sr) для MODX Revolution, который можно установить через менеджер пакетов. Этот компонент позволяет выполнять поиск и замену текста в ресурсах, чанках, шаблонах и TV-параметрах прямо из админки. Это ближайший аналог Better Search and Replace. После установки перейдите в «Компоненты» → «Search and Replace», укажите искомую строку, строку замены и область поиска (например, только TV-параметры).

    Способ 4: Использование сниппета или плагина собственной разработки

    Если вы знакомы с PHP, можно написать простой сниппет, который перебирает все ресурсы и заменяет текст в нужном поле. Пример кода:

    <?php
    $old = '8-800-123-45-67';
    $new = '8-800-000-00-00';
    $resources = $modx->getCollection('modResource');
    foreach ($resources as $resource) {
    $description = $resource->get('description');
    $description = str_replace($old, $new, $description);
    $resource->set('description', $description);
    $resource->save();
    }
    ?>

    Запустите сниппет один раз на пустой странице или через консоль. Этот метод даёт полный контроль над процессом.

    Рекомендации по массовой замене текста в MODX

    • Всегда делайте резервную копию базы данных перед любыми операциями замены.
    • Используйте точные строки для поиска, чтобы случайно не заменить часть другого текста.
    • Проверьте результат на нескольких страницах после замены, особенно если данные хранятся в TV-параметрах.
    • Рассмотрите использование плейсхолдеров в будущем: вынесите телефон в системную настройку или чанк, чтобы менять его в одном месте.

    Заключение

    Хотя в MODX нет точного аналога плагина Better Search and Replace для WordPress, задачу массовой замены текста можно решить несколькими способами: от SQL-запроса до установки специального пакета. Для замены телефона в description оптимально использовать компонент SearchAndReplace или прямой SQL-запрос, если вы уверены в структуре базы данных. Выберите метод, соответствующий вашему уровню подготовки, и не забывайте о резервном копировании.

    Часто задаваемые вопросы