Здравствуйте, дорогие читатели. Сегодня хочу разобрать проблему, связанную с выводом значения свойства инфоблока типа 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 кроссбраузерность.
Оставить комментарий