CmwFAQDevBeginner: различия между версиями

Материал из CmwCms
Перейти к навигации Перейти к поиску
Строка 22: Строка 22:
 
<:Define VAR "Value1<br>Value2<br>Value3":>
 
<:Define VAR "Value1<br>Value2<br>Value3":>
 
<:Subst @VAR:>
 
<:Subst @VAR:>
 +
</pre>
 +
 +
=== Почему <:ItemLink:> и <:Attr:> заменяют некоторые символы на амперсант последовательности? ===
 +
Q: Пытаюсь в шаблоне отобразить ссылку с текстом собранным из нескольких частей
 +
<pre>
 +
<:Define STR "@NUM. @TITLE":>
 +
<:ItemLink @ITEM_ID @STR:>
 +
</pre>
 +
В случае если в значении атрибута TITLE попадается например символ кавычка, то он в браузере отображается в виде текста амперсанд последовательности
 +
<pre>
 +
1. ООО &amp;quot;Рога и копыта&amp;quot;
 +
</pre>
 +
Если же выводить текст ссылки напрямую из атрибута TITLE
 +
<pre>
 +
<:ItemLink @ITEM_ID @TITLE:>
 +
</pre>
 +
то все кавычки будут отображаться как положено:
 +
<pre>
 +
ООО "Рога и копыта"
 +
</pre>
 +
В чем тут дело?
 +
 +
A: К сожалению внятно объяснить причину этого явления не представляется возможным. К счастью известно как этот эффект обойти. Для того чтобы <:ItemId:> и <:Attr:>(который тоже к стати подвержен этой проблеме) не заменяли символы на амперсанд последовательности, нужно при определении значения атрибута, из которого потом будет браться текст для ссылки, явным образом в качестве типа данных атрибута указать RICHTEXT
 +
<pre>
 +
<:Define STR "@NUM. @TITLE" RICHTEXT:>
 +
<:ItemLink @ITEM_ID @STR:>
 +
</pre>
 +
Тогда полученная ссылка будет содержать сами символы а не текст их амперсанд последовательностей
 +
<pre>
 +
1. ООО "Рога и копыта"
 
</pre>
 
</pre>

Версия от 00:29, 18 февраля 2006

Как в шаблоне вывести тег

Q: У меня есть атрибут в котором находится текст с тегами html. При выводе значения этого атрибута в браузер показывает текст тега вместо того чтобы обработать его значение. Например

<:Define VAR "Value1<br>Value2<br>Value3":>
<:Attr VAR:>

в результате показывает в браузере строку

Value1<br>Value2<br>Value3

тогда как хочется чтобы он показал

Value1
Value2
Value3

A: Динамический элемент <:Attr:> выводит значение атрибута так, чтобы текст в атрибуте одни к одному совпадал с текстом в браузере, соответственно знаки больше и меньше при выводе заменяются на амперсанд последовательности &gt; и &lt; потому браузер и не отрабатывает тег, а заменяет просто выводит его на экран.

Для того чтобы тег попал в текст генерируемой страницы в неизмененном виде следует использовать динамический элемент <:Subst:>, который помещает значение атрибута напрямую в генерируемую страницу не подвергая его никаким изменениям.

<:Define VAR "Value1<br>Value2<br>Value3":>
<:Subst @VAR:>

Почему <:ItemLink:> и <:Attr:> заменяют некоторые символы на амперсант последовательности?

Q: Пытаюсь в шаблоне отобразить ссылку с текстом собранным из нескольких частей

<:Define STR "@NUM. @TITLE":>
<:ItemLink @ITEM_ID @STR:>

В случае если в значении атрибута TITLE попадается например символ кавычка, то он в браузере отображается в виде текста амперсанд последовательности

1. ООО &quot;Рога и копыта&quot;

Если же выводить текст ссылки напрямую из атрибута TITLE

<:ItemLink @ITEM_ID @TITLE:>

то все кавычки будут отображаться как положено:

ООО "Рога и копыта"

В чем тут дело?

A: К сожалению внятно объяснить причину этого явления не представляется возможным. К счастью известно как этот эффект обойти. Для того чтобы <:ItemId:> и <:Attr:>(который тоже к стати подвержен этой проблеме) не заменяли символы на амперсанд последовательности, нужно при определении значения атрибута, из которого потом будет браться текст для ссылки, явным образом в качестве типа данных атрибута указать RICHTEXT

<:Define STR "@NUM. @TITLE" RICHTEXT:>
<:ItemLink @ITEM_ID @STR:>

Тогда полученная ссылка будет содержать сами символы а не текст их амперсанд последовательностей

1. ООО "Рога и копыта"