С помощью какого метода можно получить свойство элемента
Свойства элементов
Согласитесь, что посетителям сайта приятнее читать статьи, где указан автор и добавлены фотографии. Выбирать товары в интернет-магазине удобнее, если приведены их характеристики. Создавайте в инфоблоке свойства и храните информацию в элементах наиболее полно.
Общий подход при работе со свойствами
Примечание: свойства создаются для каждого инфоблока отдельно.
Как создать свойство?
- Откройте форму настроек информационного блока (Контент > Инфоблоки > Типы инфоблоков > название_типа > название_инфоблока).
- Перейдите на закладку
Свойства
.
- В свободной строчке:
- введите название свойства (название будет показываться на сайте);
- выберите тип хранимых в свойстве данных;
- отметьте флаг Множ., если значений у свойства может быть несколько;
- отметьте флаг Обяз., если указание значений данного свойства – это обязательная процедура;
- заглавными латинскими буквами укажите
код свойства
;
- нажмите кнопку […] для детального редактирования настроек свойства.
- Во всплывающем окне проверьте уже сделанные вами настройки и выполните оставшиеся.
Примечание: перечень полей зависит от выбранного типа свойства. Описание каждого поля приведено в
документации по продукту.
Форма позволяет выполнить детальную настройку свойств инфоблока. Поля некоторых форм могут
отличаться для разных свойств. Для открытия формы нужно:- Перейдите на страницу
Контент > Информ. блоки > Типы информ. блоков > Название типа инфоблоков. - В колонке команд выбрать команду Свойства для нужного инфоблока.
Откроется страница списка свойств для элементов инфоблока. - На контекстной панели нажмите кнопку Добавить свойство или
в меню действий конкретного свойства выберите команду Изменить.
либо:
- Перейдите на страницу
Контент > Информ. блоки > Типы информ. блоков > Название типа инфоблоков > Название инфоблока. - В колонке команд выбрать команду Изменить.
- Перейдите на закладку Свойства.
- В строке с нужным свойством элемента нажмите на кнопку […].
Откроется форма настройки свойств информационного блока.
Подробнее…
- Перейдите на страницу
- Сохраните настройки.
Теперь вы можете указывать значения этого свойства при
создании/редактировании
Следуйте инструкциям на схеме и расширяйте контент вашего сайта: публикуйте статьи, добавляйте товары и новости.
Подробнее…
элементов:
Важно! Если свойство не появилось в форме создания/редактирования элемента, то
перенастройте внешний вид
При работе с товарами, материалами статей, каталогами справочников вы зачастую обращаете внимание на следующий момент: в форме присутствуют поля, которые не используются на сайте. Лишние поля увеличивают размеры формы редактирования и затрудняют внесение данных.
Облегчите свой труд, используйте инструмент настройки форм инфоблоков. Инструмент учитывает индивидуальные потребности, позволяет настроить формы редактирования разделов и элементов инфоблока под себя:
- удаляйте лишние поля или целые вкладки;
- перемещайте поля между вкладками;
- создавайте свои вкладки.
Подробнее…
формы.
Как вывести информацию из свойства?
Когда свойство
уже создано
и в элементах инфоблока проставлены его
значения
, можно приступать к выводу этих значений на сайт:
- Откройте на сайте страницу, где демонстрируется посетителям информация из вашего инфоблока.
- Включите
режим правки
Режим Правка – специальный режим работы “1С-Битрикс: Управление сайтом”, в котором происходит изменение информации на сайте.
Подробнее….
- Откройте форму с
настройками компонента.
В режиме правки наведите мышь на область компонента, появится панель настроек. Выберите пункт Редактировать параметры компонента. Откроется форма настройки.
Подробнее…
- Перейдите к настройкам списка и/или детального просмотра и отметьте
ваше свойство
.
- Сохраните настройки.
Теперь значения из свойства показываются на сайте:
Примечание: на сайте выводятся только непустые значения свойств.
Как вывести подсказки в фильтре?
Бывают ситуации, когда в фильтре каталога товаров требуется прояснить фильтруемые параметры. Поскольку параметры фильтра – это свойства инфоблока, то используйте механизм подсказок. Добавить подсказку очень просто:
- Откройте форму редактирования вашего каталога с товарами (Контент > Инфоблоки > Типы инфоблоков > название_типа > название_инфоблока).
- Перейдите на закладку Свойства.
- В строке с требуемым свойством нажмите кнопку […].
- Введите текст подсказки в поле
Подсказка в умном фильтре для посетителей
.
- Сохраните настройки.
Теперь в фильтре рядом с параметром отображается подсказка:
Заключение
Свойства создаются отдельно для каждого инфоблока. Значения свойства задаются в элементах инфоблока. Показ значений свойства на сайте определяется настройками компонента.
Источник
Заглянувший Сообщений: 8 0 0 | Подскажите, пожалуйста, каким образом я могу получить свойства элемента, которые сам создал. К примеру я выбираю все элементы из информационного блока, которые подходят по имени, а затем мне необходимо уже из этих элементов выбрать окончательные. Я предварительно создал в иблоке свойство, как к нему можно получить доступ? $firstitems = GetIBlockElementListEx(“routers”, Array(), Array(), Array(“name”=>”asc”), false, Array(“NAME”=>$_POST[“firstpoint”]), Array(), false); while ($arItem = $firstitems->GetNext()) |
Администратор Сообщений: 1045 5 6 | $SecarItem[“PROPERTIES”][“<имя свойства>”][“VALUE”] Это применимо к свойствам типа строка, число. Вывод множественных свойств, свойств типа список и файл осуществляется по-другому. Если вам это требуется, то я предоставлю вам пример. |
Заглянувший Сообщений: 8 0 0 | Сделал как вы подсказали – но ничего не выводит. Просмотрел массив print_r($SecarItem) на существование [PROPERTIES] – такового не оказалось. Свойство строка и немножественное. В чем может быть трабл? |
Заглянувший Сообщений: 8 0 0 | Пофиксил этот трабл только таким способом – вызвал свойства только для конкретного элемента… $first = GetIBlockElement($FirarItem[“ID”]); |
Миша Аксенчик Заглянувший Сообщений: 8 0 0 | #5 10.01.2005 20:50:59
Вывод свойст типа список можно увидеть? | ||
Anton Ezhkov Администратор Сообщений: 1045 5 6 | #6 11.01.2005 15:47:26
Вывод значения свойства типа список осуществляется точно также, только если он не множественный. | ||
Миша Аксенчик Заглянувший Сообщений: 8 0 0 | #7 12.01.2005 00:48:49
Может стоит быть хоть немного более внимательными с ответами… | ||||
Anton Ezhkov Администратор Сообщений: 1045 5 6 | #8 12.01.2005 11:12:04 Все зависит от того, что вы хотите вывести. Если вы хотите вывести текущее значение не множественного свойства типа список, то используйте
Если же вы хотите вывести все возможные значения свойства типа список, то нужно использовать другую конструкцию:
А если вы хотите вывести значения множественного свойства типа список, то воспользуйтесь следующей конструкцией:
| ||||||
Заглянувший Сообщений: 8 0 0 | Подскажите, пожалуйста, как вывести все значения множественного свойства типа строка. |
Администратор Сообщений: 1045 5 6 | $Element[“PROPERTIES”][“<имя свойства>”][“VALUE”] |
Александр Лякин Заглянувший Сообщений: 2 0 0 | #11 21.09.2006 09:32:57
То есть получается что в любом случае для получения множественных параметров нужно вызывать для каждой записи дополнительную функцию? Как это отразится если у меня 25000 записей надо их все вывести? А у каждой записи есть множественное поле в котором иногда бывает аж по 200 элементов?? Предположим на сайт заходит 30-50 тыс. человек в день…. для ускорения задачи будем выводить по 20 наименований на страницу… (хотя я не уверен что эти сильно спасет)… мне кажется что это не позволит обрабатывать клиентов быстро!…. Как можно решить эту проблему?? можете ли вы доработать функцию CIBlockElement::GetList по уму, чтоб если она наталкивается на множественное значение, чтоб она формировала массив…? Это очень критично при больших нагрузках! Я более чем уверен, что это можно сделать средствами PHP без пополнительных запросов к БД. | ||
Постоянный посетитель Сообщений: 13 1 0 | так используйте кэширование в таком случае, вы ведь не изменяете свойства записей каждые 5 минут |
Анна Кузьмина Постоянный посетитель Сообщений: 140 0 0 | #13 23.09.2006 19:27:57
Вот так вот пальцем ткнули в самое больное место БУС. Дергание функций вида GetList в цикле приводит к _тааааакому_ перелопачиванию данных и _тааааким_ хитростным запросам, что ужос. А если еще по этим записям сортировать, вообще вешалка. Можно, плюнув на API, тащить прямо из базы нужное, ускорение работы в разы, но это некрасиво, зачем тогда покупатель за API-то платил. Кэширование сглаживает остроту проблему, но по сути тоже костыль. 2Даниил Хорошоко — свойства не изменяем, но почти та же проблема, только вид сбоку, проявляется при сортировке… | ||
Постоянный посетитель Сообщений: 13 1 0 | ну можно кэшировать и данные с разными типами сортировок и т.д. задавать cache_id в зависимости от параметров (вывода, сортировки, пальзователя) просто.. |
Постоянный посетитель Сообщений: 140 0 0 | Костыли получаются красивые, развесистые… Это все же не решение, да и спасает лишь на сайтах с небольшой интерактивностью страниц. Разница в сравнении с реализацией моей задачи на “чистых” запросах к MySQL и на API БУС достигала 800% (не в пользу API). Это уже где-то за пределами добра и зла |
Заглянувший Сообщений: 38 1 0 | 2Анна Кузьмина |
Постоянный посетитель Сообщений: 140 0 0 | Остальное — еще хуже В действительности, БУС — хорошая штука. Многие фичи (те же свойства, ведь фактически, речь идет о конструировании прикладных типов данных; вот бы добавили еще свойство “таблица”, было бы совсем красиво) в других, известных мне системах (не сказать, чтобы совсем много, но почти все основные бесплатные и ряд коммерческих) или сделаны через грязный хак или отсутствуют и приходится самостоятельно плодить такие костыли и ваять кастомные модули (читай — дописывать функционал, который в общем-то должен быть в базе). В общем, если рассматривать совокупность потребительских свойств БУС все же превосходит соперников. На мой, еще раз замечу, вкус. Реализация многих вещей безусловно несовершенна, но на то есть форум, где можно и нужно пинать разработчиков |
Начинающий интегратор Гость | У меня вопросик один: немного ламерский и относится больше к пхп, чем к БУС: |
S Lee Гуру Сообщений: 2529 1 38 | #19 14.08.2007 13:12:56
Не понятно, что конкретно Вам нужно, может быть это: https://php.ru/manual/function.print-r.html | ||
Да извините уж за тупой вопрос, просто я давно ничего не кодил и всё перезабыл, мне нужно было вот что: for($i=0;$i<count($array);$i++) Вот, даже такие банальности оказывается можно позабыть… | |
Denis Sharomov Администратор Сообщений: 2072 0 18 | #21 14.08.2007 14:06:18 Лучше так:
| ||
S Lee Гуру Сообщений: 2529 1 38 | #22 14.08.2007 14:11:39
А… ну тогда уже лучше так, т.к. ключ массива не всегда может быть целым числом или начинаться с “0”:
а если Вам просто нужно посмотреть, что в массиве:
| ||||||
Постоянный посетитель Сообщений: 81 1 1 | Спасибо всем большое |
Salik Заглянувший Сообщений: 20 0 0 | #24 31.10.2007 14:35:24
Подскажите с файлом. Нужно: чтоб работвло ИМЯ_ЭЛЕМЕНТА Не могу изъять это свойство элемента. www.inzer.info | ||
Александр Черкасов Гуру Сообщений: 2861 1 55 | #25 31.10.2007 15:32:57
Посмотрите в сторону функции CFile::GetPath https://www.1c-bitrix.ru/help/source/main/help/ru/developer/reference/cfile/getpath.php.html /истина где-то рядом…. | |||
Источник
Примеры решения задач, возникающих при работе с элементами, разделами и свойствами инфоблоков.
Задача 1:
Получить значения всех свойств элемента, зная его ID.
1 <? $db_props = CIBlockElement::GetProperty(IBLOCK_ID, ELEMENT_ID, “sort”, “asc”, array());
2 $PROPS = array();
3 while($ar_props = $db_props->GetNext())
4 $PROPS[$ar_props[‘CODE’]] = $ar_props[‘VALUE’];?>
Теперь символьный код свойства является ключом ассоциативного массива $PROPS, то есть, если вам нужно значение свойства с кодом price, то оно будет храниться в $PROPS[‘price’].
Задача 2:
Получить свойства элементов, используя метод CIBlockElement::GetList
1 <? $arSelect = array(“ID”, “NAME”, “PROPERTY_prop_code_1”, “PROPERTY_prop_code_2”);
2 $res = CIBlockElement::GetList(array(), array(), false, array(), $arSelect);?>
Дальше использовать цикл и получить свойства с символьными кодами prop_code_1 и prop_code_2.
Советы веб-разработчиков. Антон Долганин: Если для какого-либо изменения в БД предусмотрен специальный метод, следует использовать именно его, а не более общий метод изменения БД. Хороший пример: модуль интернет-магазина и работа с заказом. Можно изменить флаг оплаты заказа путем CSaleOrder::Update, а можно путем CSaleOrder::PayOrder. Так вот, следует применять именно PayOrder, потому что в нем произойдет вызов соответствующих обработчиков. |
Задача 3:
Добавить свойство типа TEXT/html для элемента.
Если свойство не множественное:
01 <? $element = new CIBlockElement;
02 $PROP = array();
03 $PROP[‘символьный код свойства’][‘VALUE’][‘TYPE’] = ‘text’; // или html
04 $PROP[‘символьный код свойства’][‘VALUE’][‘TEXT’] = ‘значение, которое нужно забить’;
05 $arLoadArray = array(
06 “IBLOCK_ID” => IBLOCK_ID,
07 “PROPERTY_VALUES”=> $PROP,
08 “NAME” => “Название элемента”
09 );
10 $element->Add($arLoadArray);?>
Если свойство множественное:
01 <? // В $ITEMS хранятся значения множественного свойства, которое нужно забить
02 foreach($ITEMS as $item)
03 {
04 $VALUES[][‘VALUE’] = array(
05 ‘TYPE’ => ‘text’, // или html
06 ‘TEXT’ => $item,
07 );
08 }
09 $element = new CIBlockElement;
10 $PROPS = array();
11 $PROPS[‘символьный код свойства’] = $VALUES;
12 $arLoadArray = array(
13 “IBLOCK_ID” => IBLOCK_ID,
14 “PROPERTY_VALUES”=> $PROPS,
15 “NAME” => “Название элемента”
16 );
17 $element->Add($arLoadArray);?>
Задача 4:
Заполнить множественное свойство типа Файл. Довольно часто при добавлении элемента в инфоблок может понадобиться привязать к нему несколько файлов. Для этого удобно создать у инфоблока множественное свойство типа Файл и хранить файлы в нём. Пример заполнения свойства:
01 <?
02 $arFiles = array();
03 for($i = 1; $i CFile::MakeFileArray($_SERVER[“DOCUMENT_ROOT”].’/images/image_’.$i.’.jpg’), ‘DESCRIPTION’ => ”);
08 }
09 }
10 ?>
После этого массив $arFiles передается как значение свойства при добавлении элемента.
Задача 5:
Заполнить множественное свойство типа Список с отображением в виде флажков. В данном случае у каждого элемента списка значений есть свой ID. Посмотреть их можно, зайдя в детальное редактирование свойства. Заполняется свойство следующим образом:
1 <?
2 if($first_condition == true) $values[] = array(‘VALUE’ => 1);
3 if($second_condition == true) $values[] = array(‘VALUE’ => 2);
4 CIBlockElement::SetPropertyValuesEx($ELEMENT_ID, $IBLOCK_ID, array(‘property_code’ => $values));
5 ?>
В данном случае при выполнении первого и второго условий мы отмечаем флажками элементы списка с ID =1 и ID=2 соответственно. Заменить следует $ELEMENT_ID, $IBLOCK_ID и property_code на нужные значения.
Задача 6:
Получить пользовательское свойство раздела
1 <? $section_props = CIBlockSection::GetList(array(), array(‘IBLOCK_ID’ => IBLOCK_ID, ‘ID’ => SECTION_ID),
true, array(“UF_ADDITIONAL_PRICE”));
2 $props_array = $section_props->GetNext(); ?>
Теперь в $props_array[‘UF_ADDITIONAL_PRICE’] лежит значение свойства UF_ADDITIONAL_PRICE раздела инфоблока.
Совет от веб-разработчиков. Алексей Коваленко: При работе с инфоблоками удобнее все коды свойств именовать заглавными буквами. В таком случае вы сможете избежать небольших несостыковок в своей работе. Например, значение свойства с кодом foto при работе с компонентами часто доступно через [PROPERTIES][foto][VALUE]?, а при использовании метода GetList вы можете получить PROPERTY_FOTO_VALUE. |
Пример создания своего типа данных для пользовательского свойства
В качестве значения свойства попробуем завести картинку с превью. Это могут быть например фотографии гостиницы на туристическом сайте или что-то подобное. В варианте такого применения и рассмотрим решение задачи.
Один из вариантов реализации: хранить изображения в отдельном инфоблоке и показывать как привязку к элементу. Пример кода:
AddEventHandler(“iblock”, “OnIBlockPropertyBuildList”, array(“CIBlockPropertyPicture”, “GetUserTypeDescription”));
AddEventHandler(“iblock”, “OnBeforeIBlockElementDelete”, array(“CIBlockPropertyPicture”, “OnBeforeIBlockElementDelete”));
class CIBlockPropertyPicture
{
function GetUserTypeDescription()
{
return array(
“PROPERTY_TYPE” =>”E”,
“USER_TYPE” =>”Picture”,
“DESCRIPTION” =>”Картинка”,
“GetPropertyFieldHtml” =>array(“CIBlockPropertyPicture”, “GetPropertyFieldHtml”),
“GetPublicViewHTML” =>array(“CIBlockPropertyPicture”, “GetPublicViewHTML”),
“ConvertToDB” =>array(“CIBlockPropertyPicture”, “ConvertToDB”),
//”GetPublicEditHTML” =>array(“CIBlockPropertyPicture”,”GetPublicEditHTML”),
//”GetAdminListViewHTML” =>array(“CIBlockPropertyPicture”,”GetAdminListViewHTML”),
//”CheckFields” =>array(“CIBlockPropertyPicture”,”CheckFields”),
//”ConvertFromDB” =>array(“CIBlockPropertyPicture”,”ConvertFromDB”),
//”GetLength” =>array(“CIBlockPropertyPicture”,”GetLength”),
);
}
function GetPropertyFieldHtml($arProperty, $value, $strHTMLControlName)
{
$LINK_IBLOCK_ID = intval($arProperty[“LINK_IBLOCK_ID”]);
if($LINK_IBLOCK_ID)
{
$ELEMENT_ID = intval($value[“VALUE”]);
if($ELEMENT_ID)
{
$rsElement = CIBlockElement::GetList(array(), array(“IBLOCK_ID” => $arProperty[“LINK_IBLOCK_ID”],
“ID” => $value[“VALUE”]), false, false, array(“ID”, “PREVIEW_PICTURE”, “DETAIL_PICTURE”));
$arElement = $rsElement->Fetch();
if(is_array($arElement))
$file_id = $arElement[“DETAIL_PICTURE”];
else
$file_id = 0;
}
else
{
$file_id = 0;
}
if($file_id)
{
$db_img = CFile::GetByID($file_id);
$db_img_arr = $db_img->Fetch();
if($db_img_arr)
{
$strImageStorePath = COption::GetOptionString(“main”, “upload_dir”, “upload”);
$sImagePath = “/”.$strImageStorePath.”/”.$db_img_arr[“SUBDIR”].”/”.$db_img_arr[“FILE_NAME”];
return ‘<label><input name=”‘.$strHTMLControlName[“VALUE”].'[del]” value=”Y” type=”checkbox”>
Удалить файл ‘.$sImagePath.'</label>’
.'<input name=”‘.$strHTMLControlName[“VALUE”].'[old]” value=”‘.$ELEMENT_ID.'” type=”hidden”>’;
}
}
return ‘<input type=”file” size=”‘.$arProperty[“COL_COUNT”].'” name=”‘.$strHTMLControlName[“VALUE”].'”/>’;
}
else
{
return “Ошибка настройки свойства. Укажите инфоблок в котором будут храниться картинки.”;
}
}
function GetPublicViewHTML($arProperty, $value, $strHTMLControlName)
{
$LINK_IBLOCK_ID = intval($arProperty[“LINK_IBLOCK_ID”]);
if($LINK_IBLOCK_ID)
{
$ELEMENT_ID = intval($value[“VALUE”]);
if($ELEMENT_ID)
{
$rsElement = CIBlockElement::GetList(array(), array(“IBLOCK_ID” => $arProperty[“LINK_IBLOCK_ID”],
“ID” => $value[“VALUE”]), false, false, array(“ID”, “PREVIEW_PICTURE”, “DETAIL_PICTURE”));
$arElement = $rsElement->Fetch();
if(is_array($arElement))
return CFile::Show2Images($arElement[“PREVIEW_PICTURE”], $arElement[“DETAIL_PICTURE”]);
}
}
return “”;
}
function ConvertToDB($arProperty, $value)
{
$arResult = array(“VALUE” => “”, “DESCRIPTION” => “”);
$LINK_IBLOCK_ID = intval($arProperty[“LINK_IBLOCK_ID”]);
if($LINK_IBLOCK_ID)
{
if(
is_array($value[“VALUE”])
&& is_array($value[“VALUE”][“error”])
&& $value[“VALUE”][“error”][“VALUE”] == 0
&& $value[“VALUE”][“size”][“VALUE”] > 0
)
{
$arDetailPicture = array(
“name” => $value[“VALUE”][“name”][“VALUE”],
“type” => $value[“VALUE”][“type”][“VALUE”],
“tmp_name” => $value[“VALUE”][“tmp_name”][“VALUE”],
“error” => $value[“VALUE”][“error”][“VALUE”],
“size” => $value[“VALUE”][“size”][“VALUE”],
);
$obElement = new CIBlockElement;
$arResult[“VALUE”] = $obElement->Add(array(
“IBLOCK_ID” => $LINK_IBLOCK_ID,
“NAME” => $arDetailPicture[“name”],
“DETAIL_PICTURE” => $arDetailPicture,
), false, false, true);
}
elseif(
is_array($value[“VALUE”])
&& isset($value[“VALUE”][“size”])
&& !is_array($value[“VALUE”][“size”])
&& $value[“VALUE”][“size”] > 0
)
{
$arDetailPicture = array(
“name” => $value[“VALUE”][“name”],
“type” => $value[“VALUE”][“type”],
“tmp_name” => $value[“VALUE”][“tmp_name”],
“error” => intval($value[“VALUE”][“error”]),
“size” => $value[“VALUE”][“size”],
);
$obElement = new CIBlockElement;
$arResult[“VALUE”] = $obElement->Add(array(
“IBLOCK_ID” => $LINK_IBLOCK_ID,
“NAME” => $arDetailPicture[“name”],
“DETAIL_PICTURE” => $arDetailPicture,
), false, false, true);
}
elseif($value[“VALUE”][“del”])
{
$obElement = new CIBlockElement;
$obElement->Delete($value[“VALUE”][“old”]);
}
elseif($value[“VALUE”][“old”])
{
$arResult[“VALUE”] = $value[“VALUE”][“old”];
}
elseif(!is_array($value[“VALUE”]) && intval($value[“VALUE”]))
{
$arResult[“VALUE”] = $value[“VALUE”];
}
}
return $arResult;
}
function OnBeforeIBlockElementDelete($ELEMENT_ID)
{
$arProperties = array();
$rsElement = CIBlockElement::GetList(array(), array(“ID” => $ELEMENT_ID), false, false, array(“ID”, “IBLOCK_ID”));
$arElement = $rsElement->Fetch();
if($arElement)
{
$rsProperties = CIBlockProperty::GetList(array(), array(“IBLOCK_ID” => $arElement[“IBLOCK_ID”], “USER_TYPE” => “Picture”));
while($arProperty = $rsProperties->Fetch())
$arProperties[] = $arProperty;
}
$arElements = array();
foreach($arProperties as $arProperty)
{
$rsPropValues = CIBlockElement::GetProperty($arElement[“IBLOCK_ID”], $arElement[“ID”], array(), array(
“EMPTY” => “N”,
“ID” => $arProperty[“ID”],
));
while($arPropValue = $rsPropValues->Fetch())
{
$ID = intval($arPropValue[“VALUE”]);
if($ID > 0)
$arElements[$ID] = $ID;
}
}
foreach($arElements as $to_delete)
{
CIBlockElement::Delete($to_delete);
}
}
}
Что мы в итоге имеем:
- Интерфейс редактирования элемента с возможностью добавления и удаления изображений.
- При удалении элемента связанная с ним информация удаляется.
- Поддержка компонент публичной части.
Инструкция по применению:
- Этот код разместите в файле /bitrix/php_interface/init.php.
- Создайте инфоблок для хранения изображений и в его настройках укажите параметры генерации картинки предварительного просмотра из детальной (на вкладке Поля).
- В инфоблоке Гостиницы добавьте свойство типа Картинка и в дополнительных настройках этого свойства укажите созданный на первом шаге инфоблок. Не забудьте указать символьный код свойства.
- Создайте элемент и “поиграйтесь” со значениями этого свойства.
- В публичной части, например в компоненте news, в параметрах настройки списка элементов выбрать это свойство.
Как удалить файл в свойстве элемента инфоблока
Обновить любое свойство можно с помощью методов:
- Update
- SetPropertyValues
- SetPropertyValuesEx
При использовании любого метода на ключ массива обновления идет код свойства, а значение – новое значение. Для удаления файла нам надо передать вот такой простой массив:
array(‘MY_FILE’ => array(‘XXX’ => array(‘del’ => ‘Y’)));
Способ универсален и подходит что для инфоблоков, что для инфоблоков 2.0, что для документооборота. MY_FILE – это код вашего свойства типа Файл. А что такое ХХХ? В нём содержится ID значения_ свойства. То есть не ID свойства, а именно ID значения.
CModule::IncludeModule(‘iblock’);
$IB = 24;
$ID = 220304;
$CODE = ‘ONE_FL’;
if ($arProp = CIBlockElement::GetProperty($IB, $ID, ‘ID’, ‘DESC’, array(‘CODE’ => $CODE))->fetch()) {
$XXX = $arProp[‘PROPERTY_VALUE_ID’];
CIBlockElement::SetPropertyValueCode($ID, $CODE, array($XXX => array(‘del’ => ‘Y’)));
}
Вот таким образом получается этот универсальный XXX, именно так его и надо передавать для каждого файла, который мы хотим удалить.
Что делать в случае множественного файла? Как удалить конкретный файл в списке? Все просто – используем в примере выше не if, а while, ну и дополнительно фильтруем, какой файл надо удалить.
Источник