Заметим, что для подключения TinyMCE к MODx мы использовали код плагина из MODx 1.0.2 и корректировку function.php.
При установке всех версий 3.3.* обнаружился один общий недостаток - при щелчке по кнопке Сохранить в MODx
выскакивает предупреждение о том, что документ не сохранен. Предупреждение ложное, на самом деле всё сохраняется. Но раздражает.
При повторном сохранении (или при использовании плагина Save) сообщения может и не быть. Собственными усилиями устранить ошибку не удалось, хотя и стало ясно, почему она происходит.
Обсуждение этого бага было обнаружено в англоязычном форуме.
Там yama выложил сборку версии 3.3 для MODx. Она пригодна и для 3.3.2, выпущенной позже. Замеченные недостатки сохранения устранены, они заключаются в настройке MODx.
Принцип настройки изменен, и сделано это правильно и логичней. На деталях мы пока останавливаться не будем.
Там же выложена сборка TinyMCE 3.3.2 для MODx.
Внесены некоторые улучшения, всё работает.
Код плагина мы берем из этой сборки
Конфигурацию плагина делаем такую:
События плагина остались прежними:
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:
Отображение редактируемого контента нашими стилями сайта.
Для этого применяется настройка Путь к 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
проделать то же, что и для предыдущих версий
//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({ добавляем настройку:
Она будет срабатывать для формирования шаблонов содержимого:

Об использовании шаблонов см. главу 3 книги
Написать комментарий