We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 785
    • 2,113 Posts
    Исправления, необходимые для версии 0.9.6.2 описаны в разных местах на форуме, и многие не находят всю полезную информацию, в результате чего сталкиваются с проблемами. Я объединил в этой теме все необходимые исправления, а также немного скорректировал некоторые рекомендации.

    1. Критически необходимые исправления, решающие проблемы с кодировкой и русификацией.

    1.1. В файле manager/includes/extenders/dbapi.mysql.class.inc.php
    заменить:
    function DBAPI($host='',$dbase='', $uid='',$pwd='',$pre=NULL,$charset='') {

    на:
    function DBAPI($host='',$dbase='', $uid='',$pwd='',$pre=NULL,$charset='',$connection_method='SET CHARACTER SET') {

    ниже строки:
    $this->config['charset'] = $charset ? $charset : $GLOBALS['database_connection_charset'];

    добавить:
    $this->config['connection_method'] =  $this->_dbconnectionmethod = (isset($GLOBALS['database_connection_method']) ? $GLOBALS['database_connection_method'] : $connection_method);
    

    ниже строки:
    $charset = $charset ? $charset : $this->config['charset'];

    добавить:
    $connection_method = $this->config['connection_method'];

    заменить строку:
    @mysql_query("{$database_connection_method} {$charset}", $this->conn);

    на:
    @mysql_query("{$connection_method} {$charset}", $this->conn);


    1.2. В папке install/lang поменять имя папки russian на russian-UTF8, войти в эту папку и переименовать файл russian.inc.php в russian-UTF8.inc.php.

    1.3. В файле manager/includes/veriword.php
    заменить
    @mysql_query("{$database_connection_method} {$database_connection_charset}");

    на
    @mysql_query("{$GLOBALS['database_connection_method']} {$database_connection_charset}");


    2. Рекомендуемые исправления, решающие проблемы с кодировкой и русификацией.

    2.1. Скачать исправленные языковые файлы, расположенные здесь:
    http://modxcms.com/forums/index.php/topic,29123.msg176816.html#msg176816
    и поместить их в папку manager/includes/lang.

    2.2. В файле install/lang/russian/russian.inc.php
    заменить
    $_lang["status_passed_server"] = 'успех - сопоставление базы данных не доступно';

    на
    $_lang["status_passed_server"] = 'успех - сопоставление базы данных доступно';


    2.3. В файле assets/plugins/tinymce3101/tinymce.linklist.php
    удалить строку
    global $database_connection_charset;

    и заменить
    @mysql_query("{$database_connection_method} {$database_connection_charset}");

    на
    @mysql_query("{$GLOBALS['database_connection_method']} {$GLOBALS['database_connection_charset']}");

    Это исправление должно решить проблему неверного отображения русских названий ссылок в Tinymce, но часто данного исправления бывает недостаточно. Если проблема осталось, следует дополнительно внести исправления по одному из описанных ниже вариантов:
    Вариант 1
    В файл assets/plugins/tinymce3101/jscripts/tiny_mce/plugins/advlink/link.html
    добавить строку
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    но при этом ошибки появятся в других кодировках, отличных от UTF8.
    Вариант 2
    Можно в файл assets/plugins/tinymce3101/tinymce.linklist.php
    перед строкой:
    $list .=($list!='')?",\n":"\n";

    добавить:
    if ($database_connection_charset == 'utf8' && extension_loaded('mbstring')) {
    $caption = mb_convert_encoding($caption, "CP1251", "UTF-8");
    }

    но при этом проблемы возникнут при использовании UTF8 для других языков.

    2.4. В файле install/setup.sql
    заменить
    ('fe_editor_lang','english'),

    на
    ('fe_editor_lang','{MANAGERLANGUAGE}'),


    2.5. В папке manager/includes/lang/country файл russian_country-UTF8.inc.php переименовать на russian-UTF8_country.inc.php.

    3. Дополнительные исправления, решающие другие проблемы.

    3.1. Решение проблем, связанных с работой MySQL в режиме Strict Mode, то есть в режиме строгого соответствия стандартам, и не совсем стандартного формирования запросов в MODx. Можно проверить – в phpMyAdmin при попытке записать пустое значение (не NULL и не 0) в числовое поле выдается ошибка, то внести описанные ниже изменения необходимо.

    3.1.1. В файле manager/processors/save_content.processor.php
    заменить строки
    $tvChanges[] = '(\''.$tvIds[$tvId].'\', '.$tvId.', '.$id.', \''.mysql_escape_string($tvVal).'\')';

    на
    if ($tvIds[$tvId] == '') $tvIds[$tvId]="NULL";
    $tvChanges[] = '('.$tvIds[$tvId].', '.$tvId.', '.$id.', \''.mysql_escape_string($tvVal).'\')';


    3.1.2. В файле manager/processors/save_plugin.processor.php
    добавить строку
    if ($priority=="") $priority=0; 

    перед
    if($i>0) $sql.=","; 


    3.1.3. В файле manager/processors/save_tmplvars.processor.php
    заменить
    $rank = isset ($_POST['rank']) ? mysql_escape_string($_POST['rank']) : 0; 

    на
    $rank = (isset ($_POST['rank']) && $_POST['rank']!='') ? mysql_escape_string($_POST['rank']) : 0; 


    3.2. При ошибках MODx записывает сообщения в системный журнал, и часто при этом возникает ошибка «Error while inserting event log into database». В принципе можно устранить исходную проблему, чтобы писать в журнал было нечего, но лучше внести следующие исправления:
    В файле
    manager/includes/config_check.inc.php
    найти четыре вызова функции logEvent:
    $modx->logEvent(0,2,$warnings[$i][1],$_lang['configcheck_configinc']);
    $modx->logEvent(0,2,$warnings[$i][1],$_lang['configcheck_installer']);
    $modx->logEvent(0,2,$warnings[$i][1],$_lang['configcheck_cache']);
    $modx->logEvent(0,2,$warnings[$i][1],$_lang['configcheck_images']);

    КАЖДЫЙ вызов заменить на
    $modx->logEvent(0,2,$warnings[$i][1],'Config Check');

    То есть сделать все вызовы одинаковыми. Если есть желание, можно сделать их разными, например ’Config Check Installer’ и ’Config Check Сache’.

    В файле
    manager/includes/document.parser.class.inc.php
    вместо
    echo "Error while inserting event log into database.";

    выводить
    echo "Error while inserting event log into database: ". mysql_error().", SQL: ".$sql;

    После строки
    $evtid= intval($evtid);

    добавить две строки
    $LoginUserID=$this->getLoginUserID();	
    if ($LoginUserID=='') $LoginUserID=0;

    и изменить
    "VALUES($evtid,$type," . time() . ",'$source','$msg','" . $this->getLoginUserID() . "')";

    на
    "VALUES($evtid,$type," . time() . ",'$source','$msg','" . $LoginUserID . "')";

    И еще после строки
    $source= mysql_escape_string($source);

    добавить
    if ($GLOBALS['database_connection_charset'] == 'utf8' && extension_loaded('mbstring')) {
    $source = mb_substr($source, 0, 50 , "UTF-8");
    } else {
    $source = substr($source, 0, 50);
    }


    3.3. Не работает блокировка при неверном вводе пароля. Для менеджеров исправления вносятся в файл manager/processors/login.processor.inc.php
    вставить строку
    $blocked_minutes=$modx->config['blocked_minutes'];

    после строки с комментарием
    increment the failed login counter, and block!

    а также несколькими строками ниже, сразу после строки
    @session_destroy();

    добавить строку
    return;

    Аналогичные изменения для web-пользователей следует внести в файл
    assets/snippets/weblogin/weblogin.processor.inc
      Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
      Статьи о MODx, регулярно новые публикации
      • 32773
      • 118 Posts
      Огромнейшее спасибо за ваш труд wink
        • 18573
        • 30 Posts
        Немедленно перенести в [FAQ]! smiley
        а то еще похериться
          • 1788
          • 1,103 Posts
          Вышел modx-0.9.6.3-rc1
          1.1 исправлено
          1.2 оставлено без изменений
          1.3 оставлено без изменений
          2.1 оставлено без изменений
          2.2 оставлено без изменений
          2.3 исправлено (до вариант1)
          2.4 оставлено без изменений
          2.5 оставлено без изменений
          3.1.1 не найдено
          3.1.2 исправлено
          3.1.3 не найдено
          3.2 оставлено без изменений
          3.3 оставлено без изменений
            • 785
            • 2,113 Posts
            Quote from: antey at Oct 14, 2008, 07:04 AM

            1.3 оставлено без изменений
            1.3 исправлено, просто другим способом.

            3.1.1 – оставлено без изменений
            3.1.2 – частично исправлено, но все равно лучше внести описанные изменения
            3.1.3 – исправлено другим способом
              Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
              Статьи о MODx, регулярно новые публикации
              • 2656
              • 44 Posts
              Îãðîìíîå ñïàñèáî! Ïèöåïèòå ýòó òåìó!
                • 31735
                • 1 Posts
                Да. Все верно, помогло! Нельзя не поблагодарить автора! wink
                  • 7151
                  • 61 Posts
                  Спасибки!
                  Было бы проще, если бы сразу архив с исправлениями прикрепили wink
                    • 6862
                    • 97 Posts
                    В плагине "Forgot Manager Login" если юзать кодировку utf8 чтобы письма по восстановлению пароля отсылались читабельными надо тоже делать исправления.

                    Возможно не самый правильный путь, но быстро решить вопрос можно так:
                    Меняем этот кусок:
                      $subject = $_lang['password_change_request'];
                      $headers  = "MIME-Version: 1.0\n".
                                  "Content-type: text/html; charset=iso-8859-1\n".
                                  "From: MODx\n".
                                  "Reply-To: no-reply@{$_SERVER['HTTP_HOST']}\n".
                                  "X-Mailer: PHP/".phpversion();
                    

                    На этот:
                      $subject = "=?UTF-8?B?".base64_encode($_lang['password_change_request'])."?=";
                      $headers  = "MIME-Version: 1.0\n".
                                  "Content-type: text/html; charset=utf-8\n".
                                  "From: MODx\n".
                                  "Reply-To: no-reply@{$_SERVER['HTTP_HOST']}\n".
                                  "X-Mailer: PHP/".phpversion();
                    
                      • 785
                      • 2,113 Posts
                      Quote from: nikolay.shabak at Mar 07, 2009, 08:35 AM

                      конкретно вот эта строчка ВЫЗЫВАЕТ БОЛЬШИЕ СОМНЕНИЯ.
                      Вызывает сомнения – не добавляйте. Развеивать чьи-то беспочвенные страхи не собираюсь. И вряд ли сомнения человека, написавшего на форуме всего два сообщения, и даже не потрудившегося объяснить, в чем он видит суть проблемы, кого-то могут заинтересовать.
                      Кстати, заодно лучше не пользуйтесь версией 0.9.6.3 системы, где это исправление включено в дистрибутив.
                        Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
                        Статьи о MODx, регулярно новые публикации