В последней версии MODx исправлены некоторые ошибки, присутствовавшие в предыдущих версиях, но ряд ошибок остался. Для их исправления следует внести небольшие исправления в несколько файлов.
1. При ошибках MODx записывает сообщения в системный журнал, и первая такая ошибка, с которой может столкнуться новичок при установке системы – файл конфигурации все еще доступен для записи. В предыдущих версиях в этом случае выдавалась ошибка «Error while inserting event log into database», но нужная страница при этом выводилась, однако в новой версии изменен способ обращения к базе данных, и вместо нужной страницы выдается страница с ошибкой «MODx Parse Error». Некоторых новичков это точно может отпугнуть от использования системы.
Проблема при проверке конфигурации возникает из-за того, что при вызове функции записи сообщения об ошибке на месте параметра, указывающего на имя компонента, вызвавшего ошибку, стоит длинный текст сообщения. Для исправления нужно в файле
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');
то есть сделать все вызовы одинаковыми.
Этим устраняется ошибка, возникающая при проверке конфигурации, но возможны и другие случаи, при которых запись сообщений об ошибках будет вызывать проблемы. Для полного решения проблем нужно внести исправления в файл
manager/includes/document.parser.class.inc.php:
После строки
добавить строки
if ($GLOBALS['database_connection_charset'] == 'utf8' && extension_loaded('mbstring')) {
$source = mb_substr($source, 0, 50 , "UTF-8");
} else {
$source = substr($source, 0, 50);
}
$LoginUserID=$this->getLoginUserID();
if ($LoginUserID=='') $LoginUserID=0;
и изменить
"VALUES($evtid,$type," . time() . ",'$source','$msg','" . $this->getLoginUserID() . "')";
на
"VALUES($evtid,$type," . time() . ",'$source','$msg','" . $LoginUserID . "')";
Следует отметить, что если ошибок при работе системы не возникает, сообщения в протокол не пишутся, и никаких проблем не возникает. Однако лучше все же внести описанные исправления в систему.
2. Не работает блокировка при неверном вводе пароля менеджера (для веб-пользователей исправления в данной версии внесены). В принципе это не такая важная ошибка, и все можно оставить без изменений. Для исправления нужно в файле
manager/processors/login.processor.php
фрагмент
(time()+($blocked_minutes*60))
изменить на
(time()+($modx->config['blocked_minutes']*60))
а также несколькими строками ниже, сразу после строки
добавить строки