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