Как в Modx Revo встроить (включить поддержку) emoji?

Поговорим про то как включить поддержку emoji. Когда в админки их видите, а на самом сайте нет. Это частая проблема для тех кто устанавливал не по моим инструкциям и выбрал при установка кодировку UTF-8 и сопоставление (collation) UTF-8_general_ci, а нужно utf-8mb4 с collation utf8mb4_unicode_ci.

Если у вас на хостинге MySQL 8, то возможно, лучше использовать сопоставление utf8mb4_0900_ai_ci.

Текущее сопоставление базы можно посмотреть в phpMyAdmin, в разделе Структура, в столбце Сравнение.

В общем чтобы MODX начал поддерживать эмодзи, нужно перекодировать БД и ее сопоставление, далее изменить 3 строчки в конфиг файле.

Шаг 1. Изменение кодировки базы данных по умолчанию

Для изменения кодировки базы по умолчанию, зайдите в интерфейс PHPMyAdmin.

  1. В левой колонке выберите нужную базу данных (на многих хостингах вы сразу попадаете в эту базу и слева выбирать ничего не нужно).
    Изменение кодировки базы данных по умолчанию
  2. Перейдите на вкладку Операции.
  3. В блоке Сравнение выберите utf8mb4_unicode_ci.
    Если есть галки (см. скрин) «Изменить сортировки всех таблиц» и «Изменить сортировки столбцов всех таблиц» — отмечаем их.
  4. Нажмите кнопку Вперед.

Если с включенными галками все прошло успешно, то у вас произошла смена кодировки таблиц в БД, и шаг 2 вам не нужен. Перейдите во вкладку структура и посмотрите.

Сравнение изменено

Бывает такое, что запрос с включенными галками не проходит (или вообще таких галок нет), тогда отключите их, нажмите кнопку вперед, и затем переходите к шагу 2 (главное чтобы юникод встал по умолчанию, см. скрин выше).

Шаг 2. Смена кодировки таблиц базы данных MySQL

Перед началом обязательно сделайте бэкап БД.

После выполнения шага 1, у нас есть несколько вариантов поменять сопоставление в таблицах.

Вариант 1: через SQL запросы

https://handyhost.ru/help/hosting/bazyi-dannyix/kak-izmenit-kodirovku-tabliczyi-mysql.html

Откройте раздел SQL. Скопируйте представленный ниже запрос и вставьте его в окно SQL-запроса (не забудьте изменить «имя_базы»). Далее нажмите кнопку «Вперед».

SELECT CONCAT('ALTER TABLE `', t.`TABLE_SCHEMA`, '`.`', t.`TABLE_NAME`, '` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;') as sqlcode
FROM `information_schema`.`TABLES` t
WHERE 1
AND t.`TABLE_SCHEMA` = 'имя_базы'
ORDER BY 1

Выполняем запрос

В ответе появится список запросов для смены кодировки каждой таблицы. Ставим галку на против пункта показать все, после чего во вкладке параметры выберите пункт «Полные тексты» и нажмите «Вперед».

Список запросов для смены кодировки БД

На открывшейся странице скопируйте появившиеся запросы.

Полный список запросов для смены кодировки БД

После этого возвращаемся в раздел SQL и вставляем в окно запроса скопированные данные и нажимаем кнопку «Вперед».

Окно запроса

Если все прошло успешно, тогда кодировка во всех таблицах базы данных успешно изменена. А вот если нет, такое тоже бывает, тогда для вас вариант 2.

Вариант 2: через редактор кода

Скачиваем базу на ПК (вкладка Экспорт).

Экспорт БД

Далее открываем скачанную базу через редактор кода, например VS code, немного проматываем содержимое и в конце первой таблицы базы, вы увидите строку

ENGINE=MyISAM DEFAULT CHARSET=utf8;
Пример записи в бд

Или

ENGINE=InnoDB DEFAULT CHARSET=utf8;
Либо дополнительно еще указанно сопоставление, пример:
ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

В общем не особо важно в каком из приведенных выше форматах у вас данная запись(и). Выделяем ее и заменяем на:

ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

Обычно Поиск и замена по всему документу, вызывается сочетанием клавиш CTRL + H

Поиск и замена

После замены сохраняем базу. Да, еще в некоторых таблицах попадаются строки типа

`target` varchar(100) COLLATE UTF-8_general_ci NOT NULL DEFAULT '',, следовательно в таких местах вам нужно заменить UTF-8_general_ci на utf8mb4_unicode_ci.

Снова открываем PhpMyAdmin, удаляем все таблицы: Структура — Выделить все — Удалить:

Удаление данных из таблицы

И подтверждаем удаление.

Подтверждаем удаление

После этого идем во вкладку Импорт, и импортируем импортируем новый дамп.

Импортируем базу

Если база большая рекомендую сначала запаковать ее в zip и в имени добавить .sql. Например было name_bd.zip, стало name_bd.sql.zip. А потом импортировать ее.

После можно до кучи накатить расширенное обновление.

Шаг 3. Правка конфиг файла

После того как закончили манипуляции с БД, идем в директорию core/config/, открываем файл config и правим в нем значение

$database_connection_charset = 'utf8';

на

$database_connection_charset = 'utf-8mb4'>

.
Сохраняем конфиг файл, далее идем в core/cache/ и удаляем из этой папки все данные.

Все теперь emoji не будут удаляться!

Поделиться с друзьями
Алексей

Веб-дизайнер и SEO оптимизатор. Занимаюсь созданием сайтов с 2010 года и их продвижение с 2012 года!

Оцените автора
( Пока оценок нет )
Web-Revenue.ru
Добавить комментарий