Поговорим про то как включить поддержку 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.
- В левой колонке выберите нужную базу данных (на многих хостингах вы сразу попадаете в эту базу и слева выбирать ничего не нужно).
- Перейдите на вкладку Операции.
- В блоке Сравнение выберите utf8mb4_unicode_ci.
Если есть галки (см. скрин) «Изменить сортировки всех таблиц» и «Изменить сортировки столбцов всех таблиц» — отмечаем их. - Нажмите кнопку Вперед.
Если с включенными галками все прошло успешно, то у вас произошла смена кодировки таблиц в БД, и шаг 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 не будут удаляться!