Home Contact Sitemap
Заказать качественные web услуги

Блог web-разработчика

Блог о веб-технологиях, скриптовых языках, CMS.

День недели и дата публикации - Среда, 5 августа 2009 - 1:27 в категории MODx. Вы можете читать сайт в RSS потоке.

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

Категория 5 августа 2009 in 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 всего два файла мы избавляемся от проблем с кодировкой.

13 Ответов на “Проблема c кодировками MODx”

  1. Sceptic сказал:

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

  2. mgordeev сказал:

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

  3. andrey patlatyuk сказал:

    Я попробывал скачать Ваш дистрибутив, поставил, админка работает, сайт нет. 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 такую ошибку выдает

  4. mgordeev сказал:

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

  5. andrey patlatyuk сказал:

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

  6. andrey patlatyuk сказал:

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

  7. mgordeev сказал:

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

  8. filin сказал:

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

  9. Old сказал:

    спасибо :)

  10. Михаил сказал:

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

  11. Snake сказал:

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

  12. mgordeev сказал:

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

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

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

  13. Snake сказал:

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

Оставить комментарий

Вы можете подписаться на RSS ленту комментариев.