На портале есть готовый инфоблок, как можно его использовать в универсальном списке?
Если просто указать его как источник списка - то свойства инфоблока в списке не отображаются. Возможно ли это как-то исправить?
Вообще ситуация, на мой взгляд, крайне нелогичная - если я создаю список с нуля, определяю поля списка, то при этом автоматически создается инфоблок с соответствующими полями, меняю список - меняется инфоблок. Т.е. в сторону от списка к инфоблоку все работает корректно. Но если я меняю инфоблок в административной панели или пытаюсь список создать для уже имеющегося - я не вижу свойств инфоблока в списке. То есть в сторону от инфоблока к списку не работает. И я не совсем понимаю почему - у нас ведь работа происходит с одним и тем же инфоблоком, все данные об этом инфоблоке есть в системе, почему список не может их использовать, обновлять данные о свойствах из системы?
Нашел похожую тему https://dev.1c-bitrix.ru/community/forums/forum23/topic106623/ Там дают советы: 1) Проставление всем полям инфоблока параметра "Показывать в списке" - но я не нашел такого параметра в инфоблоке 2) Ручками попробуйте внести ваши свойства в b_lists_field - добавляю, но поля по прежнему не отображаются и значение пропадает из таблицы (или оно где-то еще хранится, или все-таки кэш не до конца очищен) 3) Очистки всего кеша (cache, managed_cache, stack_cache). - тоже не помогло.
Константин Ч написал: использовать, обновлять данные о свойствах из системы?
Потому что списки это надстройках над инфоблоками и поля хранятся в таблице b_lists_field. Хотите проводить манипуляции с полями? Используйте API универсальных списков: http://bxapi.ru/?module_id=lists
Вообще для чего мне это надо - у нас был список, нормально созданный через интерфейс списка, но его неудачно отредактировали и какие-то поля удалились. Инфоблок мы восстановили импортом/экспортом из резервной копии портала, но откатить весь портал к дате восстановления не можем, т.к. обнаружили это не сразу и другие данные на портале тоже поменялись. Поэтому у нас сейчас есть готовый инфоблок, но список не видит части его свойств. И очень хочется с этим побороться.
Цитата
Андрей Николаев написал: Потому что списки это надстройках над инфоблоками и поля хранятся в таблице b_lists_field.
Хорошо, структура таблицы проста и понятна. Добавляю в нее строку с id инфоблока, свойством инфоблока, сортировкой, именем. Очищаю кэш через административную панель портала. Захожу в список - поля нет, в таблице строка пропала. Что я сделал не так? Может быть в еще каких-то таблицах хранится информация?
Как я понимаю ситуацию - у нас инфоблок это модель, данные + метаданные, которые хранятся в БД. Редактирование инфоблока через админку и через список в пользовательской части - это отображение этих данных. И суть нашей проблемы сейчас - список "не знает" какие отображать данные и не может по метаданным обновить информацию об измененных свойствах инфоблока.
Мне нужно добавить в список уже существующее свойство из инфоблока. Какие методы из API мне надо использовать?
Попробовал CList::AddField с CODE и NAME как в инфоблоке - получил ошибку: [Bitrix\Main\NotSupportedException] Поле с таким кодом уже существует (150) /home/bitrix/www/bitrix/modules/lists/classes/general/listfield.php:537 #0: CListPropertyField::Add(integer, array) /home/bitrix/www/bitrix/modules/lists/classes/general/listfields.php:95 #1: CListFieldList->AddField(array) /home/bitrix/www/bitrix/modules/lists/classes/general/list.php:62 #2: CList->AddField(array) /home/bitrix/www/test/addField.php:20 В принципе логично - метод попытался добавить в инфоблок свойство с имеющимися характеристиками.
Если указывать другой CODE и NAME, то в инфоблок добавляется новое свойство.
Как использовать CList::UpdateField($field_id, $arFields) я не совсем понимаю. Что здесь нужно передавать в $field_id - идентификатор поля в списке? Но этого поля в списке пока нет.
Константин Ч написал: Что здесь нужно передавать в $field_id - идентификатор поля в списке? Но этого поля в списке пока нет.
А! Тут все проще)
1) Проверяем чтобы в b_lists_field была запись в нужным PROPERTY_#ID# 2) Открываем любой элемент списка в админке на редактирование и на первую вкладку выносим это поле!
Если не проделать какой-либо из этих шагов, то поле в публичной части не будет отображено!
Андрей Николаев написал: 1) Проверяем чтобы в b_lists_field была запись в нужным PROPERTY_#ID#2) Открываем любой элемент списка в админке на редактирование и на первую вкладку выносим это поле!
Вот у меня есть такой инфоблок - я смотрю его свойства в настройках инфоблока в админке.
Далее в таблицу b_lists_field добавляю записи с нужным PROPERTY_#ID#, например, PROPERTY_545 и PROPERTY_544
Иду в редактирование элемента инфоблока в админке и вижу такую картину:
Я должен вынести что-то на вкладку "Элемент"? Каким образом я это могу сделать?