Элемент не появляется в списке - разбор причин
Элемент виден в административной части, а на витрине его нет. Разбираем причины по убыванию частоты, начиная с полей самого элемента.
С чего начать
Печатаем поля элемента как есть:
$row = CIBlockElement::GetList([], ['IBLOCK_ID' => $iblockId, 'ID' => $id], false, false, ['ID', 'ACTIVE', 'ACTIVE_FROM', 'ACTIVE_TO', 'IBLOCK_SECTION_ID'])->Fetch();print_r($row);// пустой ответ означает, что элемент не проходит уже по базовым полямАктивность и даты показа отвечают за большинство случаев. Элемент с датой начала показа в будущем существует, редактируется и не выводится нигде, пока эта дата не наступит.
Повторяем выборку витрины из консоли:
$res = CIBlockElement::GetList(['SORT' => 'ASC'], ['IBLOCK_ID' => $iblockId, 'ACTIVE' => 'Y', 'SECTION_ID' => $sectionId], false, ['nTopCount' => 5], ['ID', 'NAME']);while ($item = $res->Fetch()) { printf("%d %s\n", $item['ID'], $item['NAME']); }// тот же фильтр, что у компонента, но без кэша и без прав посетителяСмотрим права группы на инфоблок:
printf("права группы: %s\n", CIBlock::GetPermission($iblockId, $groupId));// уровень ниже чтения скрывает элементы от посетителей этой группыПроверяем привязку инфоблока к сайту:
SELECT IBLOCK_ID, SITE_ID FROM b_iblock_site WHERE IBLOCK_ID = 5;-- инфоблок, не привязанный к текущему сайту, на нём ничего не покажетСбрасываем кэш списка:
BXClearCache(true, '/iblock/'); // кэш выборок инфоблоков// после правки элемента список обновляется не мгновенно, если кэш длинныйПричины
-
Элемент неактивен или ждёт даты показа примерно 30% случаев
ПризнакВ админке элемент выглядит обычным, а на витрине его нет ни в одном списке.
ПроверкаПечатаем поля активности и обе даты показа прямо из консольного скрипта.
Что делатьВключаем активность и правим даты показа: дата начала в будущем прячет элемент полностью.
-
Элемент лежит в другом разделе примерно 20% случаев
ПризнакЭлемент находится поиском по админке, но в нужном разделе витрины его нет.
ПроверкаСмотрим раздел элемента и сравниваем его с разделом, который выводит компонент.
Что делатьПереносим элемент в нужный раздел или включаем вывод элементов подразделов.
-
Права группы закрывают инфоблок примерно 15% случаев
ПризнакАдминистратор видит элементы, а обычный посетитель - пустой список.
ПроверкаПечатаем уровень прав нужной группы на этот инфоблок из консольного скрипта.
Что делатьВыдаём группе право чтения на инфоблок либо правим расширенные права на элементы.
-
Список отдаётся из кэша примерно 15% случаев
ПризнакСвежий элемент появляется на витрине с задержкой или после сброса кэша.
ПроверкаСравниваем выдачу до и после сброса кэша выборок инфоблоков.
Что делатьСокращаем время жизни кэша списка или связываем его с данными через теги.
-
Элемент отсекает фильтр по свойству примерно 10% случаев
ПризнакВ списке нет только части элементов, а остальные выводятся нормально.
ПроверкаУбираем условия фильтра по очереди и смотрим, на каком элемент возвращается.
Что делатьЗаполняем свойство у элемента или смягчаем условие: пустое значение фильтр не проходит.
-
Инфоблок не привязан к текущему сайту примерно 10% случаев
ПризнакНа одной витрине многосайтовой копии элементы есть, на другой их нет совсем.
ПроверкаСмотрим привязку инфоблока к сайтам в его настройках или прямым запросом.
Что делатьПривязываем инфоблок к нужному сайту: без привязки выборка на нём всегда пуста.
Частые вопросы
Почему элемент виден в поиске, но не в списке?
Поиск работает по своему индексу и не учитывает фильтр списка. Проверяют активность, раздел и права: индекс мог остаться от активного элемента.
Как быстро проверить, дело в кэше или нет?
Открыть страницу с выключенным кэшем компонента или сбросить кэш и сравнить. Разница в выдаче сразу отвечает на вопрос.
Влияет ли сортировка на пропажу элемента?
Не на само присутствие, но элемент может уехать на дальнюю страницу списка. При разборе смотрят весь список, а не первую страницу.
Что означает пустая дата окончания показа?
Что показ не ограничен по времени и элемент виден бессрочно. Заполненная дата в прошлом прячет элемент так же, как выключенная активность.
Могут ли элемент прятать торговые предложения?
В каталоге - да: товар без активных предложений часто не показывают настройки витрины. Тогда разбор переносят на предложения этого товара.
Смежное
-
Выборки из инфоблоков - оглавление подтемы
-
Выборки из инфоблоков: GetList, ORM и разделы - как устроена сама выборка
-
Раздел не выводится: разбор причин - тот же разбор для разделов
-
Права не применяются: разбор причин - подробнее про уровни доступа
-
Кэширование своей выборки: ключ, теги, сброс - как связать кэш списка с данными
-
Торговые предложения не выводятся: разбор причин - когда прячется товар с вариантами
-
Инфоблоки - устройство инфоблоков целиком
-
Сложный фильтр выборки: ИЛИ, вложенные условия, подзапросы - как устроены группы условий фильтра
-
Постраничная навигация сбоит: разбор причин - когда элемент виден не на своей странице