Форум программистов, компьютерный форум, киберфорум
Наши страницы
1С Битрикс
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/33: Рейтинг темы: голосов - 33, средняя оценка - 4.64
ASmirnoff
2 / 2 / 0
Регистрация: 18.09.2010
Сообщений: 40
1

Как работать с инфоблоками?

11.10.2012, 16:22. Просмотров 6128. Ответов 4
Метки нет (Все метки)

Здравствуйте. Только сейчас начал пользоваться инфоблоками. Создал свой. У него ID=5. Для элементов задал 4 свойства: TITLE (текстовое), DESCRIPTION (текстовое), URL (текстовое), IMAGE (файл).
Занёс в инфоблок 4 элемента.
Проблема в том как получить данные.
CIBlockElement::GetList не выдаёт параметры, которые я задал (title, url,...).
Подскажите, пожалуйста, как это делается.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2012, 16:22
Ответы с готовыми решениями:

Как сделать связь между 2-мя инфоблоками
Здравствуйте! Я создала 2 инфоблока: Категории и Картины. В Категориях...

Накопительные скидки инфоблоками
Добрый день всем. Необходимо реализовать накопительные скидки на редакции малый...

Работа компонента catalog с несколькими инфоблоками
Знатоки :), подскажите пожалуйста способ решения проблемы. Есть тип...

Как работать со Стилями CSS? Как определить где сам HTML?
Дали подредактировать готовый сайт на 1С битрикс. Проблема в том что я...

Как работать с Денвером?
Либо он у меня глючит, либо я что не так делаю. Я скачал VBulletin, и теперь...

4
insideone
Модератор
Автор FAQ
3659 / 939 / 112
Регистрация: 10.01.2010
Сообщений: 2,527
11.10.2012, 22:20 2
Читаем документацию
https://dev.1c-bitrix.ru/api_help/ib...nt/getlist.php
Последний параметр
array arSelectFields = Array()

из документации о нём:
Массив возвращаемых полей элемента. Список полей элемента, а также можно сразу выводить значения его свойств. Обязательно должно быть использовано поле IBLOCK_ID, иначе не будет работать корректно. Кроме того, также в качестве одного из полей необходимо указать PROPERTY_<PROPERTY_CODE>, где PROPERTY_CODE - ID или мнемонический код. В результате будет выведены значения свойств элемента в виде полей PROPERTY_<PROPERTY_CODE>_VALUE - значение; PROPERTY_<PROPERTY_CODE>_ID - код значения у элемента; PROPERTY_<PROPERTY_CODE>_ENUM_ID - код значения (для свойств типа список).
При установленном модуле торгового каталога можно выводить и цены элемента. Для этого в качестве одного из полей необходимо указать CATALOG_GROUP_<PRICE_CODE>, где PRICE_CODE - ID типа цены.
Так же есть возможность выбрать поля элементов по значениям свойства типа "Привязка к элементам". Для этого необходимо указать PROPERTY_<PROPERTY_CODE>.<FIELD>, где PROPERTY_CODE - ID или мнемонический код свойства привязки, а FIELD - поле указанного в привязке элемента. См. ниже "Поля связанных элементов для сортировки".
Можно выбрать и значения свойств элементов по значениям свойства типа "Привязка к элементам". Для этого необходимо указать PROPERTY_<PROPERTY_CODE>.PROPERTY_<PROPERTY_CODE2>, где PROPERTY_CODE - ID или мнемонический код свойства привязки, а PROPERTY_CODE2 - свойство указанного в привязке элемента.

По умолчанию выводить все поля.

Примечание 1: если в массиве используются свойство, являющееся множественным, то для элементов, где используются несколько значений этого свойства, будет возвращено несколько записей вместо одной. Для решения этой проблемы инфоблоки нужно перевести в Режим хранения свойств в отдельных таблицах, в этом случае для свойства будет отдаваться массив значений. Либо можно не указывать свойства в параметрах выборки, а получать их значения на каждом шаге перебора выборки с помощью _CIBElement::GetProperties().

Примечание 2: Если в массиве указаны поля DETAIL_PAGE_URL, SECTION_PAGE_URL или LIST_PAGE_URL, то поля необходимые для правильной подстановки шаблонов URL'ов будут выбраны автоматически. Но только если не была задана группировка.

Примечание 3: если необходимо выбрать данные о рейтингах для выбранных элементов, то для этого в массиве необходимо указать следующие поля: RATING_TOTAL_VALUE, RATING_TOTAL_VOTES, RATING_TOTAL_POSITIVE_VOTES, RATING_TOTAL_NEGATIVE_VOTES, RATING_USER_VOTE_VALUE.
Т.е. чтобы получить созданное своими руками свойство (а не стандартные - они полями называются), нужно в массиве перечислить их, например:

PHP
1
array('PROPERTY_TITLE', 'PROPERTY_DESCRIPTION', 'PROPERTY_URL', 'PROPERTY_IMAGE')
В результирующем массиве они будут под ключами PROPERTY_TITLE_VALUE и т.д.

Важно так же в этом массиве arSelect не забыть поле IBLOCK_ID, иначе PROPERTY_ свойства не будут возвращены... Вроде
1
ASmirnoff
2 / 2 / 0
Регистрация: 18.09.2010
Сообщений: 40
12.10.2012, 13:44  [ТС] 3
Большое спасибо. Это работает. Текстовые поля возвращает, а в поле с файлом возвращает идентификатор (кажется) из таблицы b_file. Так-то я могу его достать, конечно, с помощью CFile::GetPath или пользуясь подобными функциями, но для это придётся делать отдельные запросы. Не подскажете ещё есть ли возможность получить сразу это в одном запросе, который Вы описали.

Добавлено через 14 часов 42 минуты
Нашёл в одном месте вот так делают:
PHP
1
$arResult["DETAIL_PICTURE"] = CFile::GetFileArray($arResult["DETAIL_PICTURE"]);
Так и нужно делать? Просто при N элементах инфоблока получится N+1 запрос в этом случае (один CIBlockElement::GetList и N CFile::GetFileArray). Выглядит не очень экономно. Наверное раз предусмотрен такой тип, то и реализация этой задачи должна быть в одном запросе.
0
insideone
Модератор
Автор FAQ
3659 / 939 / 112
Регистрация: 10.01.2010
Сообщений: 2,527
13.10.2012, 22:44 4
Я бы собрал все ID в массив, а потом выбрал одим доп. запросом с помощью
CFile::GetList.

В фильтре arFilter надо указать
PHP
1
'@ID'=> implode(',', $arIDs)
где $arIDs - массив идентификаторов файлов

Далее идем циклом по результатам и собираем массив вида

[ключ ID файла] = путь к файлу

Далее в нужном месте мы можем обратиться к этому массиву и получить по ID файла путь к нему без доп. запроса.
1
ASmirnoff
2 / 2 / 0
Регистрация: 18.09.2010
Сообщений: 40
14.10.2012, 00:37  [ТС] 5
Изящное решение.
Спасибо. Не знал что так можно тут.

[РЕШЕНО]
0
14.10.2012, 00:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.10.2012, 00:37

Как заставить работать ссылку внутри form
Подскажите, пожалуйста, почему в ссылка в form не работает: &lt;form...

как на молодом сайте работать на бирже ссылок?
можно ли молодому сайту которому месяц работать на бирже ссылок, например SAPE...

может ли купленная мною GTX460 работать к примеру не как должна работать GTX460 а как видюха по хуже?
Ребята, помогите пожалуйста в таком вопросе! Взял видеокарту Gainward GTX460...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru