Визуальный редактор TinyMCE режет код при его загрузке в редактор, TinyMCE режет код даже не смотря на то, что код превращён в ХТМЛ сущности! Сохранить код пропустив его через TinyMCE можно бес проблем, а вот загрузить его в TinyMCE и там отредактировать уже нельзя куски кода пропадают, код дико перекашивает;(
В Joomla 1.5 если не получается даже сохранить код через TinyMCE , то нужно пойти в настройки плагина TinyMCE и там в "Параметры плагина" установить:
- Очищать код при запуске - Выкл
- Очищать код при сохранении - Никогда
Ещё как вариант есть настройки фильтрации в менеджере материалов "Материалы - Менеджер материалов - Параметры", там в "Параметры фильтрации" отмечаем группу к которой стоит применять фильтрацию по черному списку тегов. По умолчанию Чёрный Список содержит следующие теги: 'applet', 'body', 'bgsound', 'base', 'basefont', 'embed', 'frame', 'frameset', 'head', 'html', 'id', 'iframe', 'ilayer', 'layer', 'link', 'meta', 'name', 'object', 'script', 'style', 'title', 'xml' и атрибуты 'action', 'background', 'codebase', 'dynsrc', 'lowsrc'. Этот список определён в файле /libraries/joomla/html/editor.php
Обратите внимание, эти параметры работают независимо от визуального редактора. Даже если вы используете визуальный редактор, фильтруемые теги и атрибуты могут быть удалены из текста в момент сохранения.
Но все эти настройки до лампочки если нам потребуется отредактировать статью с ХТМЛ кодом превращённым в ХТМЛ сущности! Вставив/сохранив код/статью в простом редакторе или же в самом TinyMCE, после его открытия/загрузки в визуальном редакторе TinyMCE само содержимое из БД корректно загружается в текстовую область <textarea>-какой-то-текст-<textarea>...-какой-то-текст-</textarea>-какой-то-текст-</textarea>, а вот в самом браузере и визуальном редакторе TinyMCE текст выглядит перекошенным и при попытке отобразить в визуальном редакторе TinyMCE код статьи (как ХТМЛ), также получаем кривой и дико перекошенный код, а всё, что между тегами <textarea> и </textarea>, а вернее сущностями тегов, не будет отображено вовсе, как собственно и сами теги!
С редактором JCE та же история, так как он использует TinyMCE... - выходят те же яйца но, уже вид сбоку... Для того, чтобы TinyMCE начал воспринимать ХТМЛ сущности за сущности, их следует перед загрузкой в редактор экранировать извратным образом:
Вместо < нужно писать: &lt;
При этом, так нужно извращаться только при "скармливании" контента в TinyMCE. Съев такой код, редактор TinyMCE переварит его в "<" - вот такой изврат получается!;(
Потому как в Joomla 1.5 могут стоять и использоваться разные редакторы, то вероятно такой изврат потребуется не во всех редакторах, например перед загрузкой контента в "Простой редактор" нам так извращаться ненужно иначе код будет испорчен!
Для превращения "<" в "&lt;" только для избранных редакторов мы можем определять их по идентификатору CSS класса, например:
Простой редактор <!-- Start Editor --><textarea name="text" id="text" cols="75" rows="20" style="width: 100%; height: 550px;"> JCE <!-- Start Editor --><label for="text" style="display:none;" aria-visible="false">text_textarea</label><textarea id="text" name="text" cols="70" rows="15" style="width:100%;height:400px;" class="wfEditor source" wrap="off"> TinyMCE <!-- Start Editor --><textarea id="text" name="text" cols="70" rows="15" style="width:100%; height:400px;" class="mce_editable">
Теперь для подготовки содержимого перед загрузкой в TinyMCE, откроем /templates/remotehelp/html/com_content/article/form.php, найдём строку echo $this->editor->display('text', $this->article->text, '100%', '400', '70', '15'); и доведём её до такой кондиции:
editor->display('text', $this->article->text, '100%', '400', '70', '15'); $editorSrc = $this->editor->display('text', $this->article->text, '100%', '400', '70', '15'); if (preg_match('/(wfEditor|mce_editable)/', $editorSrc)) { $entity_from = array('&', '<', '>', ' ', '"'); $entity_to = array('&amp;', '&lt;', '&gt;', '&nbsp;', '&quot;'); $editorSrc = str_replace($entity_from, $entity_to, $editorSrc); return $editorSrc; } else { echo $editorSrc; } ?>
Эта проблема не в Joomla 1.5 или Joomla 1.7 (Joomla 2.5) - эта проблема в TinyMCE!
Теперь TinyMCE должен перестать резать код и можно спокойно использовать TinyMCE не только для написания HTML/XML кода но, и для его редактирования!
Однако!
ВНИМАНИЕ!!! В некоторых случаях если нам нужно отобразить на странице ХТМЛ сущности используя при этом GeShi, то при использовании GeShi с отображением ХТМЛ сущностей у нас может ничего не получится - здесь уже всплывает проблема с GeShi :)) Для корректного отображения ХТМЛ сущностей нужно отказаться от GeShi там, где планируется отображение ХТМЛ сущностей, для этого в теге <pre xml:lang="html"> удаляем xml:lang="html" и оставляем только голимый <pre>
Заключение!
TinyMCE не дружит с сущностями ХТМЛ тегов! и не корректно отображает их в редакторе при попытке повторного редактирования, а GeShi в свою очередь дружит с сущностями ХТМЛ тегов но, не дружит с сущностями ХТМЛ сущностей! и отображает их как есть - Во как оно всё лихо закручено!:))
Ещё как вариант корректной раскраски кода с сущностями ХТМЛ сущностей можно отказаться от GeShi и использовать другие плагины или же красить его вручную:)
Вот такая вот ботва получается...
А по большому счету самый лучший визуальный редактор - это ровные руки!;)