Как получить измененный текст из редактора Joomla?

У меня есть страница, которая позволяет пользователю редактировать вводный текст конкретной статьи, и я использую этот код, чтобы позволить им сделать это:

$editor = & JFactory::getEditor();
$params = array('smilies'=> '0' ,'style'  => '0' ,'layer'  => '0' ,'table'  => '0' ,'clear_entities'=>'0');
echo $editor->display('introtext',$this->introtext  , '96%', '100px', 250, 40, false, null, null, null, $params);

Проблема в том, что когда я иду для сохранения изменений с помощью jQuery /AJAX, я могу получить доступ к исходному HTML, который был инициализирован редактором. Я использовал редактор TinyMCE во время разработки, но пользователи предпочитают JCE, поэтому специальные ответы, найденные в Google, не делают трюк для меня.

Как получить текст отредактированный , который пользователь хочет сохранить, чтобы его публиковать? Я предположил, что это, или подобное, будет работать, но это явно не так:

var newHTML = $('#introtext').val();
7 голосов | спросил GDP 29 Maypm14 2014, 21:21:36

5 ответов


3

Если я правильно помню, JCE использует iframe для содержимого. Таким образом, вам нужно сначала получить ссылку на iframe, затем получить доступ к внутреннему документу iframe, который предоставит innerHTML в качестве текста, который вы ищете. Я сделал это один раз, но, к сожалению, я не могу получить код до воскресенья.

Я бы начал с чего-то вроде этого (вот как я его помню, не могу проверить его прямо сейчас):

var iframe = document.getElementById('jform_articletext_ifr');
var innerDoc = iframe.contentDocument || iframe.contentWindow.document;
var currentText = innerDoc.innerHTML;

С currentText будет «новый» текст.

ответил elk 31 Mayam14 2014, 01:56:37
2

Вопрос по «ВВП» был

  

«Как получить отредактированный текст, который пользователь хочет сохранить, чтобы его публиковать?

«elk» запустил меня на правильном пути, но я прибегнул к jQuery, чтобы получить отредактированный текст. Это то, что я сделал:

  

JQuery ( "# Array_ifr") содержание () найти ( "тело") находим ( "р") HTML ();....

Где «Array_ifr» - это идентификатор iframe iframe the JCE editor uses. Я нашел это, изучив элементы с Firebug.

Это работало для меня в Joomla! но я не вижу, чтобы это было проблемой в других. Надеюсь, это поможет другим людям с их кодированием.

ответил Sheldon Seale 18 Jpm1000000pmMon, 18 Jan 2016 22:15:55 +030016 2016, 22:15:55
1

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

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

Joomla 3.x + эра загружает Редактор, используя JFormFieldEditor, который загружает выбранный редактор. Пользователь вносит изменения в редактор, но, как вы заметили, они не сразу отображаются в поле. например в статье, которая будет элементом #jform_articletext.

Однако для большинства редакторов по времени элемент сохраняется, элемент формы jform[articletext] содержит обновленный контент. (Это, похоже, не относится к редакторам AJAX, которые я видел).

Я просто размышляю здесь, но я думаю, что они (редакторы) присоединяют событие submit к основной форме и вводят их содержимое в поле в этой точке. Другим местом, которое вы могли бы проверить, является ссылка «Toggle Editor», которую имеют JCE и TinyMCE.

В статье TinyMCE имеет этот триггер click , прикрепленный к кнопке «Toggle Editor»:

function onclick(event) {
    tinyMCE.execCommand('mceToggleEditor', false, 'jform_articletext');
    return false;
}

Что вызывает сброс содержимого редактора в поле #jform_articletext.

Другим подходом может быть отправка события submit в активный редактор, который, надеюсь, заставит его обновить поле с измененным текстом.

Учитывая, что каждый редактор может реализовать обработку submit по-другому, и не у всех из них есть кнопка «Редактор Toggle Editor» MCE, возможно, вам придется создать специальный случай для каждого редактора, который вы хотите поддержка.

ответил Craig 30 Mayam14 2014, 02:46:07
1

попробуйте поставить перед

<?php echo $editor->save('introtext'); ?>
var newHTML = $('#introtext').val();

или

var newHTML = <?php echo $editor->getContent('introtext'); ?>

, поэтому текст из редактора будет скопирован в переменную newHTML

, конечно, ваш код javascript должен находиться в одном файле формы php (не в автономном js-файле)

ответил Gregory Palchikovsky 7 PM00000070000001831 2018, 19:20:18
0

Этот поток довольно старый, но это может помочь другим ...

Ответ elk почти точно на месте, за исключением того, что мне пришлось изменить на

var currentText = innerDoc.body.innerHTML;
ответил mhall 2 J0000006Europe/Moscow 2018, 18:48:35

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132