Перейти к содержимому

Элемент не появляется в списке - разбор причин

Элемент виден в административной части, а на витрине его нет. Разбираем причины по убыванию частоты, начиная с полей самого элемента.

С чего начать

Печатаем поля элемента как есть:

$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/'); // кэш выборок инфоблоков
// после правки элемента список обновляется не мгновенно, если кэш длинный

Причины

  1. Элемент неактивен или ждёт даты показа примерно 30% случаев

    ПризнакВ админке элемент выглядит обычным, а на витрине его нет ни в одном списке.

    ПроверкаПечатаем поля активности и обе даты показа прямо из консольного скрипта.

    Что делатьВключаем активность и правим даты показа: дата начала в будущем прячет элемент полностью.

  2. Элемент лежит в другом разделе примерно 20% случаев

    ПризнакЭлемент находится поиском по админке, но в нужном разделе витрины его нет.

    ПроверкаСмотрим раздел элемента и сравниваем его с разделом, который выводит компонент.

    Что делатьПереносим элемент в нужный раздел или включаем вывод элементов подразделов.

  3. Права группы закрывают инфоблок примерно 15% случаев

    ПризнакАдминистратор видит элементы, а обычный посетитель - пустой список.

    ПроверкаПечатаем уровень прав нужной группы на этот инфоблок из консольного скрипта.

    Что делатьВыдаём группе право чтения на инфоблок либо правим расширенные права на элементы.

  4. Список отдаётся из кэша примерно 15% случаев

    ПризнакСвежий элемент появляется на витрине с задержкой или после сброса кэша.

    ПроверкаСравниваем выдачу до и после сброса кэша выборок инфоблоков.

    Что делатьСокращаем время жизни кэша списка или связываем его с данными через теги.

  5. Элемент отсекает фильтр по свойству примерно 10% случаев

    ПризнакВ списке нет только части элементов, а остальные выводятся нормально.

    ПроверкаУбираем условия фильтра по очереди и смотрим, на каком элемент возвращается.

    Что делатьЗаполняем свойство у элемента или смягчаем условие: пустое значение фильтр не проходит.

  6. Инфоблок не привязан к текущему сайту примерно 10% случаев

    ПризнакНа одной витрине многосайтовой копии элементы есть, на другой их нет совсем.

    ПроверкаСмотрим привязку инфоблока к сайтам в его настройках или прямым запросом.

    Что делатьПривязываем инфоблок к нужному сайту: без привязки выборка на нём всегда пуста.

Частые вопросы

Почему элемент виден в поиске, но не в списке?

Поиск работает по своему индексу и не учитывает фильтр списка. Проверяют активность, раздел и права: индекс мог остаться от активного элемента.

Как быстро проверить, дело в кэше или нет?

Открыть страницу с выключенным кэшем компонента или сбросить кэш и сравнить. Разница в выдаче сразу отвечает на вопрос.

Влияет ли сортировка на пропажу элемента?

Не на само присутствие, но элемент может уехать на дальнюю страницу списка. При разборе смотрят весь список, а не первую страницу.

Что означает пустая дата окончания показа?

Что показ не ограничен по времени и элемент виден бессрочно. Заполненная дата в прошлом прячет элемент так же, как выключенная активность.

Могут ли элемент прятать торговые предложения?

В каталоге - да: товар без активных предложений часто не показывают настройки витрины. Тогда разбор переносят на предложения этого товара.

Смежное

Первоисточник