On March 26, 2019 we launched new MODX Forums. Please join us at the new MODX Community Forums.
Subscribe: RSS
  • В последней версии 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:
    После строки
    $evtid= intval($evtid); 

    добавить строки
    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))

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

    добавить строки
    session_unset();
    return; 
      Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
      Статьи о MODx, регулярно новые публикации
    • В файле manage_metatags.dynamic.php с незапамятных времен потерян кусок кода, который отвечает за вывод предупреждений об удалении ключевых слов.
      Нужно строчки
      	<?php for($i=0;$i<$limit;$i++) {
      		$row=mysql_fetch_assoc($rs);
      		?>
      

      поменять на:
      	<?php 	
      	$sql = "SELECT * FROM $dbase.`".$table_prefix."site_keywords` ORDER BY keyword ASC";
      	$rs = mysql_query($sql);
      	$limit = mysql_num_rows($rs); 
      	for($i=0;$i<$limit;$i++) {
      		$row=mysql_fetch_assoc($rs);
      	?>
      
      • В файле mutate_content.dynamic.php потерян в самом низу вызов функции storeCurTemplate();
        Из-за этого если в предупреждении, которое появляется при переключении шаблонов, выбрать Отмена, шаблон сбросится.
        • При нажатии кнопки Сохранить при редактировании документа в IE вываливается предупреждение об уходе со страницы. Ошибка связана с новым TinyMCE.
          Решение описано здесь + плагин Bottom Button Bar тоже надо исправить.
          (Кстати если в этом плагине убрать width:100% у subTitle, и в стилях тоже, то в IE наконец исчезнет горизонтальный скроллинг)
          • При редактировании страницы через QuickEdit в IE7 выдаёт ошибку. Ошибка связана с использованием в id слова "description". IE вместо него ищет что-то другое, и падает на попытке создать для него спецэффект. Решение: заменить в файлах editor.css (line 86), editor.class.inc.php (line 202) и QuickEditor.js (line 28,29,76) "description" на что-нибудь другое, например "descript".

            И, кстати, в файле quick_edit/lang/russian-UTF8.inc.php неверная кодировка прописана.
            • Входящий в комплект плагин Image TV Preview показывает битые картинки в IE при пустых TV-полях.
              Решение: после строки var img ...
              добавить строку:
               if (url == '') img.setStyle('display', 'none');
              • Смотрел тут файловый браузер, в меню который. Там в данной версии есть ошибка с превью картинок и скачиванием файлов, решение которой описано здесь. Но мне ещё не понравилось, что просмотр текстовых файлов русский язык не показывает. Поэтому я добавил такую функцию:
                function detect_encoding($string) { 
                  static $list = array('utf-8', 'windows-1251');
                  foreach ($list as $item) {
                    $sample = iconv($item, $item, $string);
                    if (md5($sample) == md5($string))
                      return $item;
                  }
                  return null;
                }
                

                И заменил htmlentities($buffer) на htmlentities($buffer,ENT_COMPAT,detect_encoding($buffer))
                Ещё там 2 несуществующие языковые переменные указаны: $_lang[’file_editfile’] и $_lang[’file_viewfile’], их нужно заменить на $_lang[’files_editfile’] и $_lang[’files_viewfile’]
                • Quote from: Temus at May 06, 2009, 08:28 PM

                  В файле mutate_content.dynamic.php потерян в самом низу вызов функции storeCurTemplate();
                  Из-за этого если в предупреждении, которое появляется при переключении шаблонов, выбрать Отмена, шаблон сбросится.
                  неужели просто дописать в самом конце:
                  <?php storeCurTemplate(); ?>
                  • ...
                    storeCurTemplate();
                    </script>

                    (это яваскрипт-функция)
                    • Во входящем в комплект модуле Doc Manager при массовом изменении TV-переменных не работает браузер картинок и файлов, а также календарик. Причина - неправильно задан $base_url и ошибка в скрипте.
                      Решение: в файле tv.ajax.php
                      1. заменить строчку
                      $base_url = $modx->config[’base_url’];
                      (так она работать не будет в принципе, ведь даже не было вызова функция getSettings)
                      на $base_url = str_replace("assets/modules/docmanager/includes/", "", MODX_BASE_URL);
                      2. document.mutate заменить на document.templatevariables везде в скрипте
                      3. $base_url .’/manager/media заменить на $base_url .’manager/media