Проблема c кодировками MODx

Как известно, в достаточно популярной CMS MODx существует проблема отображения русскоязычных сайтов. Она кочует из версии в версию и от дистрибутива к дистрибутиву.

Суть вопроса несколько глубже, чем настроить корректную выдачу страниц, важно настроить и локализовать основные сниппеты (Ditto, Jot, AjaxSearch, Wayfinder и др.). Я решал соответствующие проблемы на старых 0.9** версиях CMS MODx, но сейчас хочу показать, как это делается на версии продукта 1.0.0 MODx Evolution. Скачать эту версию CMS можно здесь, но чтобы все заработало придется дистрибутив немного изменить.

 

Ниже рассказано как установить MODx.

Уточню, что я проверял работу не всех сниппетов, но впоследствии расширю список. Также все советы касаются исключительно сайтов в кодировке utf-8.

 

1 Проблема. Проблема с кодировкой UTF-8.

Для ее решения я использовал стандартный прием — добавление строчек:

mysql_query("SET NAMES 'utf8';", $this->conn);
mysql_query("SET character_set_results = 'utf8';", $this->conn);
mysql_query("SET collation_connection = 'utf8_general_ci';", $this->conn);

Приведенный код надо добавить после инициации соединения и выбора базы данных. Исправленный файл можно скачать здесь.

 

Загрузить файлик надо вместо manager\includes\extenders\dbapi.mysql.class.inc.php. Оптимально это сделать до установки MODx, т. е. в дистрибутиве.

 

2. Проблема. Кодировка соединения modx и настройка конфигурации.

Собственно на этом этапе проблем нет. От того, какие настройки мы выберем здесь зависит отсутствие багов в дальнейшем. Прежде всего необходимо создать базу данных. Это можно сделать с помощью запроса:

CREATE DATABASE `<ваша бд>` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

В этом запросе кодировка новой БД принудительно выставлена UTF-8. Однако, некоторые хостеры не дают выполнять подобного рода запросы на сервере и предлагают использовать уже созданные базы данных. В этом случае имеет смысл выполнить запрос :

ALTER DATABASE `<ваша бд>` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

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

На этапе установки надо выбрать database connection method «SET CHARACTER SET» и кодировку utf8_general_ci (это значения по умолчанию).

Затем необходимо просто поменять в настройках modx (tools->configuration->language) английский язык на Russian-UTF8.

 

3. Проблема. Проблема в обрезании текста.

Суть проблемы состоит в том, что при использовании расширения сниппета Ditto «summary» текст анонса иногда обрезается некорректно, вследствие чего анонс заканчивается черными символами знака вопроса. Пролема решается одной строчкой в файле summary.extender.inc.php перед строкой «return $summary»:

$summary=iconv('utf-8', 'utf-8', $summary);

Измененный скрипт доступен здесь. Загрузить файлик надо вместо manager\assets\snippets\ditto\extenders\summary.extender.inc.php.

 

Таким образом, заменив в дистрибутиве modx версии 1.0.0 всего два файла мы избавляемся от проблем с кодировкой.