Вывести свойство типа html.

Здравствуйте, дорогие читатели. Сегодня хочу разобрать проблему, связанную с выводом значения свойства инфоблока типа HTML/текст. У меня такая проблема выскочила, когда я реализовывал привязку к Яндекс карте в битрикс.

Например вы редактируете шаблон  детальной страницы комплексного каталога, пытаетесь вывести $arResult[«PROPERTIES»][«DESCRIPTION»][«VALUE»],  где свойство   «DESCRIPTION» в инфоблоке имеет тип HTML/текст. В результате вы получили не то, что хотели увидеть. Вы получили html-безопасный вид вашего текста(что-то вроде этого  "если a>b и b>c, то a>c").

Разработчиками предусмотрен такой исход, и, если вы проверите,  что хранит массив, $arResult[«PROPERTIES»][«DESCRIPTION»] (выведем его с помощью функции print_r();), то увидите кроме поля [«VALUE»] еще и таинственный [«~VALUE»] . Как раз значение этого поля вам и нужно.

Вставляем вместо исходного это$arResult[«PROPERTIES»][«DESCRIPTION»][«~VALUE»]. Наслаждаемся красивым HTML текстом.

Вывод значения свойства HTML/текст средствами битркс Api.

Рассмотрим другой способ. Допустим, вы с помощью Api bitrix выводите значение «проблемного» свойства. У вас получился код на подобии этого:


if(CModule::IncludeModule('iblock')) {

$arSort= Array("name"=>"ASC");

$arSelect = Array("ID","NAME"," DESCRIPTION ");

$arFilter = Array("IBLOCK_ID"=>5);

$res =  CIBlockElement :: GetList ($arSort, $arFilter, false,false, $arSelect);

while($ob = $res->GetNextElement())

{

$arFields = $ob->GetFields();

print_r($arFields[NAME]);

print_r($arFields[DESCRIPTION]);

}

}

Опять проблемы с преобразованными тэгами и кавычками. Тут нам не подходит предыдущий метод. В текущей ситуации воспользуемся функцией Апи 1с-битрикс  htmlspecialcharsBack. Она поможет преобразовать наш текст из html-безопасного вида в исходное представление.

Перед выводом $arFields[DESCRIPTION] применим к этому тексту функцию htmlspecialcharsBack.

В результате рабочий код выглядит так:


if(CModule::IncludeModule('iblock')) {

$arSort= Array("name"=>"ASC");

$arSelect = Array("ID","NAME"," DESCRIPTION ");

$arFilter = Array("IBLOCK_ID"=>5);

$res =  CIBlockElement :: GetList ($arSort, $arFilter, false,false, $arSelect);

while($ob = $res->GetNextElement())

{

$arFields = $ob->GetFields();

print_r($arFields[NAME]);

print_r(htmlspecialcharsBack ($arFields[DESCRIPTION]));

}

}

Верстальщикам советую ознакомиться со статьей — CSS кроссбраузерность.

ПоделитьсяShare on Facebook0Share on VKShare on Google+0Tweet about this on TwitterShare on LinkedIn0Pin on Pinterest0

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