Наши заметки о MODx
В этом разделе мы будем собирать небольшую копилку секретов по работе с системой управления контентом сайта (CMS) MODx. Эти заметки ни в коем случае не претендуют на лавры документации. На нашем сайте тема MODx вообще занимает небольшой уголок, и эти материалы мы размещаем только потому, что по роду основной работы нам приходится оказывать техническую поддержку нескольким десяткам организаций, использующих наши прототипы сайтов. В то же время кое-что может пригодиться и другим людям.
Мы не претендуем на изложение "истины в последней инстанции". Наверняка в этих заметках гуру MODx найдут неточности и ошибки. Мы будем очень благодарны, если на это нам укажут в комментариях.
В заметках мы стараемся не просто сразу приводить готовое правильное решение, но и показываем, как мы набивали шишки в процессе поиска.

Настройки новой версии TinyMCE


В начале 2010 года начал интенсивно обновляться редактор TinyMCE до версии 3.3.  Были выпущены несколько версий:

  • 3.3b1 - 25.01.2010
  • 3.3b2 - 04.02.2010
  • 3.3rc1 - 23.02.2010
  • 3.3 - 10.03.2010
  • 3.3.1 - 18.03.2010
  • 3.3.2 - 25.03.2010


Конечно, мы испробовали все эти версии. Улучшения налицо и зафиксированы в файле changelog.txt.

Однако нас больше интересовали "ухудшения" работы TinyMCE в MODx, связанные с особенностями новых версий, тем более, что мы постоянно вносим свои изменения в этот редактор.

Заметим, что для подключения TinyMCE к MODx мы использовали код плагина из MODx 1.0.2 и корректировку function.php.

При установке всех версий 3.3.* обнаружился один общий недостаток - при щелчке по кнопке Сохранить в MODx
выскакивает предупреждение о том, что документ не сохранен. Предупреждение ложное, на самом деле всё сохраняется. Но раздражает.

При повторном сохранении (или при использовании плагина Save) сообщения  может и не быть. Собственными усилиями устранить ошибку не удалось, хотя и стало ясно, почему она происходит.

Обсуждение этого бага было обнаружено в англоязычном форуме.

Там yama выложил сборку версии 3.3 для MODx. Она пригодна и для 3.3.2, выпущенной  позже.  Замеченные недостатки сохранения устранены, они заключаются в настройке MODx.

Принцип настройки изменен, и сделано это правильно и логичней. На деталях мы пока останавливаться не будем.

 

Добавлено 01.04.10.
Там же выложена сборка TinyMCE 3.3.2 для MODx.
Внесены некоторые улучшения, всё работает.



Код плагина мы берем из этой сборки

Конфигурацию плагина делаем такую:

 

 

&customparams=Custom Parameters;textarea; &mce_formats=Block Formats;text;p,h2,h3,h4,h5,h6,div,blockquote,code,pre &entity_encoding=Entity Encoding;list;named,numeric,raw;named &entities=Entities;text; &mce_path_options=Path Options;list;rootrelative,docrelative,fullpathurl;docrelative &mce_resizing=Advanced Resizing;list;true,false;true &disabledButtons=Disabled Buttons;text; &link_list=Link List;list;enabled,disabled;enabled &webtheme=Web Theme;list;simple,editor,creative,custom;editor &webPlugins=Web Plugins;text;style,advimage,advlink,searchreplace,contextmenu,paste, fullscreen,nonbreaking,xhtmlxtras,visualchars,media &webButtons1=Web Buttons 1;text;undo,redo,selectall,|,pastetext,pasteword,|,search,replace,|,nonbreaking,hr,charmap, |,image,link,unlink,anchor,media,|,cleanup,removeformat,|,fullscreen,code,help &webButtons2=Web Buttons 2;text;bold,italic,underline,strikethrough,sub,sup,|,|,blockquote,bullist,numlist, outdent,indent,|,justifyleft,justifycenter,justifyright,justifyfull, |,styleselect,formatselect,|,styleprops &webButtons3=Web Buttons 3;text; &webButtons4=Web Buttons 4;text; &webAlign=Web Toolbar Alignment;list;ltr,rtl;ltr &width=Width;text;100% &height=Height;text;400 &language=Язык;text;russian-UTF8


События плагина остались прежними:


OnRichTextEditorRegister, OnRichTextEditorInit, OnInterfaceSettingsRender  

Однако обнаружился "маленький" недостаток - TinyMCE при русском языке админки вообще не загружается
(при английском, и только английском) всё работает.


После танцев с бубнами установил, что отсутствует языковый файл ru.js для плагина clearfloat.

В результате мы получили работающую версию TinyMCE 3.3.2 в MODx 1.02. Но этого нам мало. Напомним, что нам требуется от TinyMCE сверх возможностей, заложенных в редактор:

1. Подключение AjaxFileManager. Мы описывали это здесь.
2. Отображение редактируемого контента нашими стилями сайта.
3. Отображение списков Стили и Формат нашими стилями.
4. Использование шаблонов оформления.

Кроме того, мы упрошали диалоговые окна плагина XHTMLTRANS, чтобы исключить поля, которые потом никак не используются, но смущают редакторов.



Подключение AjaxFileManager


Мы имеем собственную модификацию AFM. В упоминавшейся сборке TinyMCE для modx в файле
assets\plugins\tinymce\tinymce.functions.php
Есть код:


function build_tiny_callback($params)
    {
        $ph['cmsurl']  = MODX_BASE_URL . 'manager/media/browser/mcpuk/browser.php?Connector=';
        $ph['cmsurl'] .= MODX_BASE_URL . 'manager/media/browser/mcpuk/connectors/php/connector.php&ServerPath=';
        $ph['cmsurl'] .= MODX_BASE_URL . '&editor=tinymce&editorpath=' . $params['mce_url'];
        $modx_fb = file_get_contents($params['mce_path'] . 'js/modx_fb.js.inc');
       foreach($ph as $name => $value)
        {
            $name = '';
            $modx_fb = str_replace($name, $value, $modx_fb);
        }
        return $modx_fb;
    }


Заменяем вызов mcpuk на вызов AFM:

    function build_tiny_callback($params)
    {
        $ph['cmsurl']  = MODX_BASE_URL . 'assets/plugins/ajaxfilemanager4/ajaxfilemanager.php';
        $modx_fb = file_get_contents($params['mce_path'] . 'js/modx_fb.js.inc');
        
        foreach($ph as $name => $value)
        {
            $name = '';
            $modx_fb = str_replace($name, $value, $modx_fb);
        }
        return $modx_fb;
    }



И всё работает - выбор файлов или картинок будем выполнять с помощью AFM:

Модернизированный AjaxFileManager

Модернизированный AjaxFileManager


Отображение редактируемого контента нашими стилями сайта.



Для этого применяется настройка Путь к CSS файлу: в Конфигурация - Интерфейс и представление.


Однако в tinymce.function.php надо подправить строку:

   if ($params['editor_css_path']!=='') $content_css[] = /*MODX_BASE_URL .*/ $params['editor_css_path'];- закомментировать /*MODX_BASE_URL .*/

Хотя, по логике именно так и надо писать, однако в этом случае MODX_BASE_URL в результирующем скрипте почему-то вырезается. Почему именно - не было времени разбираться.


А вот если вместо

$content_css[] = $params['mce_url'] . 'style/content.css';

записать


$content_css[] = MODX_BASE_URL . $params['editor_css_path'];

 

Все будет работать. Чудеса.


Отображение списков Стили и Формат нашими стилями.


Для этого необходимо в

assets\plugins\tinymce\jscripts\tiny_mce\themes\advanced\editor_template_src.js

проделать то же, что и для предыдущих версий

  if (val) {
  //name = 'style_' + (counter++);
   name =  val; //ZU
   ed.formatter.register(name, {
      inline : 'span',
         classes : val
        });
   ctrl.add(t.editor.translate(key), val, {'class' : 'mce_formatPreview mce_' + val});
// ctrl.add(t.editor.translate(key), name);


В результате списки отображаются нашими стилями:

Список стилей

Список форматирования

 

 

Шаблоны контента

В файле assets\plugins\tinymce\js\mce_init.js.inc

В функцию tinyMCE.init({ добавляем настройку:

template_external_list_url : 'assets/templates/site/tiny_mce/templates/template_ext_list.js',

Она будет срабатывать для формирования шаблонов содержимого:

 

Об использовании шаблонов см. главу 3 книги

26-03-2010 15:08:16



    Содержание раздела «TinyMCE 3.3.2»:
Комментарии любых посетителей

Написать комментарий