В этом посте я описал основные сложности, возникающие при работе с элементами, разделами и свойствами инфоблоков. Ну, и, естественно, решения этих сложностей.
Задача 1: достать значения всех свойств элемента, зная его ID
Бывает нужно, если у вас, например, есть массив айдишников элементов, и для каждого надо получить все свойства. Ну
или сами можете придумать применение :)
<? $db_props = CIBlockElement::GetProperty(IBLOCK_ID, ELEMENT_ID, "sort", "asc", array()); $PROPS = array(); while($ar_props = $db_props->Fetch()) $PROPS[$ar_props['CODE']] = $ar_props['VALUE'];?>
Теперь символьный код свойства является ключом ассоциативного массива $PROPS, то есть, если вам нужно значение свойства с кодом price, то оно будет хранится в $PROPS['price'].
Задача 2: вытащить свойства элементов, используя метод CIBlockElement::GetList
<? $arSelect = array("ID", "NAME", "PROPERTY_prop_code_1", "PROPERTY_prop_code_2");
$res = CIBlockElement::GetList(array(), array(), false, array(), $arSelect);?>
Ну дальше цикл. И свойства с символьными кодами prop_code_1 и prop_code_2 у вас в руках.
Задача 3: забить свойство типа TEXT/html для элемента
Не нашёл этого в документации, однако, операция это довольно частая.
Если свойство не множественное:
<? $element = new CIBlockElement; $PROP = array(); $PROP['символьный код свойства']['VALUE']['TYPE'] = 'text'; // или html $PROP['символьный код свойства']['VALUE']['TEXT'] = 'значение, которое нужно забить'; $arLoadArray = array( "IBLOCK_ID" => IBLOCK_ID, "PROPERTY_VALUES"=> $PROP, "NAME" => "Название элемента" ); $element->Add($arLoadArray);?>
Если свойство множественное, то получится на пару строк больше:
<? // В $ITEMS хранятся значения множественного свойства, которое нужно забить
foreach($ITEMS as $item)
{
$VALUES[]['VALUE']['TYPE']= 'text'; // или html
$VALUES[]['VALUE']['TEXT']= $item;
}
$element = new CIBlockElement;
$PROPS = array();
$PROPS['символьный код свойства'] = $VALUES;
$arLoadArray = array(
"IBLOCK_ID" => IBLOCK_ID,
"PROPERTY_VALUES"=> $PROPS,
"NAME" => "Название элемента"
);
$element->Add($arLoadArray);?>
Задача 4: забить множественное свойство типа «Файл»
Довольно часто при добавлении элемента в инфоблок может понадобиться привязать к нему несколько файлов. Для этого удобно создать у инфоблока множественное свойство типа «Файл» и хранить файлы в нём. Пример заполнения свойства:
<?
$arFiles = array();
for($i = 1; $i < 10; $i++)
{
if(file_exists($_SERVER['DOCUMENT_ROOT'].'/images/image_'.$i.'.jpg'))
{
$arFiles[] = array('VALUE' => CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"].'/images/image_'.$i.'.jpg'), 'DESCRIPTION' => '');
}
}
?>
После этого массив $arFiles передается как значение свойства при добавлении элемента.
Задача 5: забить множественное свойство типа «Список» с отображением в виде флажков
В данном случае у каждого элемента списка значений есть свой ID. Посмотреть эти ID можно, зайдя в детальное редактирование свойства. Заполняется свойство следующим образом:
<?
if($first_condition == true) $values[] = array('VALUE' => 1);
if($second_condition == true) $values[] = array('VALUE' => 2);
CIBlockElement::SetPropertyValuesEx($ELEMENT_ID, $IBLOCK_ID, array('property_code' => $values));
?>
В данном случае при выполнении первого и второго условий мы отмечаем флажками элементы списка с ID =1 и ID=2 соответственно. Заменить следует $ELEMENT_ID, $IBLOCK_ID и property_code на нужные значения.
Задача 6: вытащить пользовательское свойство раздела
<? $section_props = CIBlockSection::GetList(array(), array('IBLOCK_ID' => IBLOCK_ID, 'ID' => SECTION_ID), true, array("UF_ADDITIONAL_PRICE"));
$props_array = $section_props->GetNext(); ?>
// Теперь в $props_array['UF_ADDITIONAL_PRICE'] лежит значение свойства UF_ADDITIONAL_PRICE раздела инфоблока. Почему оно не доступно по обычному GeyById я не знаю.



Комментарии (6)