Элементные массивы 1с-битрикс

Опубликовано 15.04.2010

За что только не нахваливают битрикс участники партнерской программы - оно и ожидаемо, ведь им нужно продать этот дорогой раскрученный продукт. Однако, гибкость и однотипность его системы вывода контента вскоре привязывает к себе - и не хочется иметь дело с чем-то еще.

Взять вывод продукта из каталога, новости, записи - чего угодно, все это является элементами и создается с помощью инфоблоков. Содержимое элемента выводится из базы данных в виде многомерного массива с ужасающего вида уровнями вложенности. Для просмотра массивов в php можно использовать команду print_r.

В шаблоне компонента вывода каких-либо инфоблоков командой print_r($arElement) или print_r($arItems) - если они переопределены вначале, можно вывести всю подноготную выводимых элементов. Вывод будет примерно таким: “Array ( [0] => Array ( [ID] => 401 [~ID] => 401 [NAME] => Мой продукт [~NAME] => Мой продукт [CODE] =>…” ну и так далее. Прелесть в том, что любую информацию из этой каши можно вывести или использовать где угодно. Если по какое-либо значение упирается в Array: “…[PROPERTIES] => Array (…”, то дальнейшая информация хранится на нисходящем уровне вложенности.

Пример из жизни: имеется список статей, некоторые из них можно найти на сайтах СМИ, другие сохранены в файлах. Нам нужно выводить пользователю ссылку на сайт, либо на скачивание файла.

Реализуя, я создал в выводящем инфоблоке два свойства - file (тип файл) и link (тип строка) - редактором заполняется одно из этих полей. Цикл обхода свойств элемента в шаблонах битрикса обозначен как “foreach($arElement["DISPLAY_PROPERTIES"] as $pid=>$arProperty):”. Внутрь него я вставил следующую проверку: “if($arProperty["CODE"]==”link”){$pressalink=$arProperty["VALUE"];} else {$pressalink=($arProperty["FILE_VALUE"]["SRC"]);}” - если код свойства link, то выводить значение свойства (именно VALUE, а не DISPLAY_VALUE, т.к. в последнем случае, битрикс возвращает обработанную ссылку с прибабахами), иначе выводить ссылку на файл внутри массива свойств файла. Как-то вот так :). Далее выводим эту ссылку, имея текстом имя элемента:<a  href=”<?=$pressalink?>”><?=$arElement["NAME"]?></a>.

Теперь добавим выпадающий список, где редактор выберет тип выкладываемого файла. Возвращаемся в настройки инфоблока и добавляем свойство file_type (тип список). Следует добавить, что тип будет выбираться исключительно для вывода соответствующей ему иконки в нашем списке статей. Иконки хранятся в одном файле, располагаясь вертикально друг под другом - нужную выбираем через смещение фона с помощью CSS. Добавив свойство типа список идем в дополнительные настройки, нажав кнопку с многоточием (…). Столбец “ID/XML_ID” у нас будет содержать смещения иконки (в данном случае 0 -33 -66 и т.д.), столбец “значение” содержит doc, xls, pdf и т.д.

Теперь при добавлении статьи редактор выберет тип прикладываемого файла из списка (также в списке есть пункт для внешней ссылки). Вывод иконки может быть, например, таким: <span style=”background:url(/ru/images/icons.jpg) 0px <?=$arElement["PROPERTIES"]["file_type"]["VALUE_XML_ID"]?>px;width:32px;height:32px;float:left;”></span> - для span мы задали фоном нашу простыню с иконками и вывели VALUE_XML_ID в качестве вертикального смещения фона.

На самом деле, это все проще делать, чем объяснять, сверившись с названиями полей в основном массиве, вы и так поймете, что и как можно выводить :).

upd.: еще интересный пример - перехват параметров, переданных GET. Есть свойство элемента - производитель, по клику на баннер фирмы нужно выдавать только ее продукты. На баннер вешаем ссылку с хвостом типа page.php?firm=microsoft, в page.php у нас осуществляется вывод всех продуктов. В шаблоне компонента вывода ставим проверку if ($_GET['firm']==($arElement["DISPLAY_PROPERTIES"]["producer"]["VALUE"])) и окаймляем ей весь цикл вывода.

Похожие записи

blog comments powered by Disqus