Подтвердить что ты не робот

Tridion - Вставить HTML (литеральные и частичные элементы) в RTF

Я пытаюсь создать расширение GUI в Tridion, где я вставляю конкретный html в RTF при нажатии кнопки. У меня есть кнопка панели инструментов и всплывающее окно, чтобы информировать пользователя. Но когда я нажимаю "ОК" во всплывающем окне, когда я вставляю HTML "</div> < div class= 'Page' > ", он вставляет "< div class= 'Page'/ > ".

Я узнал, что applyHTML-метод - это то, что модифицирует вставляемое. Есть ли какая-либо функция/метод, который вставляет именно то, что я указываю, я имею в виду недопустимый html с отсутствующими закрывающими тегами или открытыми тегами?

4b9b3361

Ответ 1

Если вам нужно сделать недопустимую разметку, рассмотрите текстовое поле. Не знаете, насколько это изменит существующую модель расширения и контента, но вы можете ввести что-либо в текстовое поле, в том числе то, что кажется своего рода "разделенным" или разделительным заполнителем.

</div><div class='Page'>

Чтобы сохранить расширенные текстовые функции и следовать некоторым типичным практикам Tridion, рассмотрите одно из следующих.

Завершить все изменения разметки сразу

Предполагая, что ваша окончательная разметка будет иметь открытую <div> и закрытие </div>, учитывая, что ваша добавка завершает весь набор выделенного богатого текста. В процессе и перед обновлением компонента разрешите автору выбрать местоположение "split" и сохранить все обновление в RTF.

Создайте "расщепления" со встроенными схемами и код шаблона

Встраиваемые поля схемы - гораздо более простой способ разделить контент. Авторы создают новый набор встроенных полей, а код шаблона может изменить это на вкладки, абзацы или то, что может быть страницами (pagination?) В вашем случае.

A "Встроенная схема абзаца" может обрабатывать этот прецедент, насколько я понимаю.

<!-- TemplateBeginRepeat name="Component.Fields.Paragraph" -->
<div class='Page'>
<!-- author-entered content -->
</div>
<!-- TemplateEndRepeat -->

Это создаст промежуточные множества встроенных полей </div><div class='Page'>. Он также позволяет изменять класс и тег в будущем без изменений расширения.

Вставить не-HTML "Слить поля" Вместо

См. параметры в сообщении, которое я написал о пользовательских тегах в расширенных текстовых полях, которые включают в себя:

  • Классы CSS в проводнике Content Manager, такие как class="page-split". Вы можете даже подгонять это, чтобы выглядеть определенным образом (визуально, например, как <hr/>), а затем подбирать его так, как вам нужно в окончательной разметке.
  • Добавьте метки тега поля слияния, такие как "[[end-page]][[start-page]"
  • Пользовательские узлы HTML5, если вы должны

Вы можете вставить любой из них с расширением, необязательно стилизовать их, чтобы посмотреть определенный способ в CME.

Мне нравится предоставлять авторам более простые способы вставки функциональных возможностей в поля расширенного текста, но уловка с вставкой определенного HTML, особенно недействительного HTML, в компоненты заключается в жестком кодировании этой функциональности в контент. Вы столкнетесь с проблемами миграции и изменениями дизайна.

Подумайте о том, как Tridion отделяет дизайн от контента.

Ответ 2

Предположительно, когда вы говорите: </div><div class='Page'>, вы имеете в виду <div class='Page'></div>. Если это так, то, если вы не сможете напрямую контролировать XML-подбор, единственным оставшимся подходом (IMO) является обеспечение того, чтобы div имел некоторый контент. Самый простой способ сделать это - вставить неразрывное пространство.

<div class='Page'>&#160;</div>