Классическое API: CIBlockElement и CIBlockSection
Классическое API на базе CIBlockElement::GetList() и CIBlockSection::GetList() используется в стандартных компонентах и существующем коде. Метод GetNext() экранирует спецсимволы и генерирует ссылки на детальные страницы, а вызовы GetProperties() в цикле по элементам создают проблему N+1 запросов и должны заменяться передачей нужных свойств в аргументы выборки.
Прогресс хранится в этом браузере. Войдите, чтобы сохранить его в аккаунте.
Что нужно понимать
-
1
CIBlock
-
2
CIBlockElement
-
3
CIBlockSection
Материалы
Официальная документация
-
CIBlockSection::GetList Старая дока
-
Производительность и частые ошибки Новая дока
Проверь себя
Fatal error: Call to a member function GetNextElement() on a non-object на строке с GetList. Что перепутано?
Порядок аргументов. У CIBlockElement::GetList они позиционные: сортировка, фильтр, группировка (false или массив), навигация (массив или false), список полей. Массив полей на четвёртом месте ядро принимает за навигацию и не возвращает результат.
Вывели PREVIEW_TEXT из GetNext(), и HTML показался тегами как текст. Почему?
GetNext() экранирует HTML во всех полях, чтобы их можно было выводить как есть. Сырые значения лежат в том же массиве под ключом с тильдой: ~PREVIEW_TEXT. Fetch() не экранирует ничего и не строит DETAIL_PAGE_URL.
Почему CIBlockSection::GetList с массивом полей на третьем месте ничего не выбрал?
У разделов другой порядок: сортировка, фильтр, флаг подсчёта элементов bIncCnt, массив полей, навигация. Массив на третьем месте ядро воспримет как флаг, а список полей не получит.
В списке из 10 новостей выполняется 11 запросов. Где искать?
GetProperty() или GetProperties() в цикле по элементам. Нужные свойства добавляют в пятый аргумент GetList как PROPERTY_КОД, и они приходят в той же выборке.
Не сходится?
Спросите ассистента BXMax: он знает документацию и материалы сайта по этой теме.
Знаете материал лучше?
Предложите ссылку: после проверки она появится в этом разделе.
Войти, чтобы предложить