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

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

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

 

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

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

 

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

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

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

 

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

 

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

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

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

После этого, используя мастер установки можно смело установить 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»:

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

 

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

  • Я вот попробовал установить MODX себе, а он почемуто создал поумолчанию все таблицы в БД с кодировкой сравнения португалии.

    • Попробуйте вот этот дистрибутив. Я его проверял неоднократно. В нем все проблемы устранены.

  • Я попробывал скачать Ваш дистрибутив, поставил, админка работает, сайт нет. sapr.lti-gti.ru
    Не подскажете, как это можно исправить?
    Deprecated: Assigning the return value of new by reference is deprecated in /var/www/sapr.lti-gti.ru/manager/includes/browsercheck.inc.php on line 16 такую ошибку выдает

    • а в чем собственно проблема? Что не получается?

  • админка работает, сайт нет

  • сейчас перезалил modx последней версии, так теперь проблема с кодировкой.

    • Я смотрю, все заработало. Вероятно вы использовали рекомендации, описанные в моей статье)))

  • filin

    огромное спасибо за наводку. в моем случае была проблема в том, что БД можно создать только из панели хостера, а там по-умолчанию cp1251_general_ci в качестве Collation. А сайт уже установлен и работает. используя phpMyAdmin пришлось менять на utf8-general-ci каждое нужное поле в таблицах templates, sitecontent и htmlsnippets. Т.е. удалось не переставляя сайт сделать фикс и заставить modx корректно сохранять/читать unicod’ные символы в/из базы и соответственно отображать.

  • Old

    спасибо 🙂

  • модх не отображал польские символы, хотя и кодировка была утф8. теперь все ок
    Большое спасибо за файлик.

  • Snake

    Здравствуйте. Направьте пожалуйста новичка. При создании ресурса или шаблона, если я пишу название на русском языке, то создаётся ресурс или шаблон без названия. Что делать? оО Кодировка в админ-панели выбрана ютф8.

  • Выполнить запрос:

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

    Или переустановить MODx по инструкции.

  • Snake

    Прошу прощения, моя невнимательность. Вся соль оказывается состояла в том, что в админ-панели у меня был выбран язык Russian а не Russian-UTF8 =) Большое спасибо за помощь 😉

  • Kinskey

    Какая версия в вашем дистрибутиве?

    Еще у меня одна проблема с кодировкой.

    До этого как-то уже создавала шаблоны по урокам, но в этот раз все через непотребное место.

    Когда захожу Элементы — Управление элементами, выскакивает ошибка:

    Warning: Cannot modify header information — headers already sent by (output started at Z:\home\blueice\www\manager\includes\header.inc.php:11) in Z:\home\blueice\www\manager\includes\document.parser.class.inc.php on line 2793

    А далее:

    MODx encountered the following error while attempting to parse the requested resource:
    « Execution of a query to the database failed — Illegal mix of collations (utf8_general_ci,COERCIBLE) and (latin1_swedish_ci,IMPLICIT) for operation ‘if’ »

    Меняла кодировку у уже созданных таблиц. Еще говорилось о том, что при установке MODX необходимо устанавливать SET NAMES при присоединении к БД, делала.

    Все тоже самое. Ничего не меняется. Локальный сервер, он у меня Denwer, также restart на всякий случай и даже компьютер перезагружала. У меня версия PhpMyAdmin 3.2.4

    ПОДСКАЖИТЕ, ЧТО ЕЩЕ НУЖНО СДЕЛАТЬ!!

    • Правда не знаю что за беда. Посмотрите в базе данных: где-то кодировка стоит неправильная. Может быть и в таблице, и в полях, и в сопоставлении с БД(хотя это самый редкий случай). Если ничего не получится — попробуйте переустановить сайт.