Зачем TinyMCE режет код в Joomla 1.5 и как с этим бороться

archive view archive save

Зачем TinyMCE режет код в Joomla 1.5 и как с этим бороться Визуальный редактор 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>-какой-то-текст-&lt;textarea&gt;...-какой-то-текст-&lt;/textarea&gt;-какой-то-текст-</textarea>, а вот в самом браузере и визуальном редакторе TinyMCE текст выглядит перекошенным и при попытке отобразить в визуальном редакторе TinyMCE код статьи (как ХТМЛ), также получаем кривой и дико перекошенный код, а всё, что между тегами &lt;textarea&gt; и &lt;/textarea&gt;, а вернее сущностями тегов, не будет отображено вовсе, как собственно и сами теги!

С редактором JCE та же история, так как он использует TinyMCE... - выходят те же яйца но, уже вид сбоку... Для того, чтобы TinyMCE начал воспринимать ХТМЛ сущности за сущности, их следует перед загрузкой в редактор экранировать извратным образом:

Вместо

&lt;

нужно писать:

&amp;lt;

При этом, так нужно извращаться только при "скармливании" контента в TinyMCE. Съев такой код, редактор TinyMCE переварит его в "&lt;" - вот такой изврат получается!;(

Потому как в Joomla 1.5 могут стоять и использоваться разные редакторы, то вероятно такой изврат потребуется не во всех редакторах, например перед загрузкой контента в "Простой редактор" нам так извращаться ненужно иначе код будет испорчен!

Для превращения "&lt;" в "&amp;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('&amp;', '&lt;', '&gt;', '&nbsp;', '&quot;');
    $entity_to = array('&amp;amp;', '&amp;lt;', '&amp;gt;', '&amp;nbsp;', '&amp;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 и использовать другие плагины или же красить его вручную:)

Вот такая вот ботва получается...

А по большому счету самый лучший визуальный редактор - это ровные руки!;)

Автор: Олег Головский


Нет комментариев

Вы можете стать первым, кто добавит комментарий к этой записи.

Добавить комментарий

АХТУНГ! Все комменты гостей модерасятся модерастом.
  1. Мессаги исключительно рекламного содержания, либо содержащие только одни оценочные суждения типа "круто" ("отлично", "спасибо", "автор дебил" и т.п.) не публикуются;
  2. Злостным спамерам, пранкерам и прочей сетевой нечисти рекомендуем напрасно не тратить своего времени и удовлетворять свои больные фантазии на специализированных Интернет ресурсах!;
  3. Разумная обоснованная критика, замечания, дополнения приветствуются. Поля помеченные символом * обязательны к заполнению.


Защитный код
Обновить

Комментарии в блоге
Новое на форуме