Аналог 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-запрос, если вы уверены в структуре базы данных. Выберите метод, соответствующий вашему уровню подготовки, и не забывайте о резервном копировании.