Компонент не отдаёт нужных данных - причины по убыванию частоты
Свойство заполнено в карточке, а в шаблоне его нет. Разбираем причины по убыванию частоты: почти все они про параметры вызова, а не про сам шаблон.
С чего начать
Смотрим, что вообще пришло в шаблон:
// в шаблоне компонента, на время разбораecho '<pre>' . htmlspecialcharsbx(print_r(array_keys($arResult), true)) . '</pre>';echo '<pre>' . htmlspecialcharsbx(print_r($arResult['PROPERTIES'] ?? [], true)) . '</pre>';// если ключа нет в результате - проблема выше по цепочке, а не в разметкеВывод состава результата отвечает на главный вопрос за минуту. Пустой ключ означает, что данные не пришли от компонента, и дальше разбирают его параметры, а не разметку.
Проверяем параметры вызова:
'PROPERTY_CODE' => ['BRAND', 'WARRANTY'], // свойства перечисляют явно'SELECT_FIELDS' => ['ID', 'NAME', 'PREVIEW_PICTURE'],// компонент выбирает только то, что перечислено: лишнего он не тянетКомпонент выбирает только перечисленные поля и свойства. Это сделано ради скорости, и почти всегда «пропавшее» свойство просто не названо в параметрах вызова.
Сбрасываем кэш компонента:
BXClearCache(true); // файловый кэш компонентов$GLOBALS['CACHE_MANAGER']->CleanAll(); // управляемый кэш// правка параметров вызова без сброса кэша ничего не меняет на странице// на стенде кэш компонентов на время разбора выключают в настройках модуляКэш компонента хранит и результат, и разметку. Правка параметров вызова при живом кэше не даёт никакого эффекта, и разбор уходит в сторону на полчаса.
Причины
-
Свойство не названо в параметрах вызова примерно 35% случаев
ПризнакВ результате нет самого ключа свойства, а не пустое значение.
ПроверкаСмотрим список кодов свойств прямо в параметрах вызова этого самого компонента каталога.
Что делатьДобавляем код свойства в параметры вызова и сбрасываем после этого кэш компонента.
-
Страница отдаётся из старого кэша примерно 25% случаев
ПризнакПараметры правились, а на странице ничего не изменилось.
ПроверкаОтключаем кэш компонента на время разбора и заново обновляем эту самую страницу.
Что делатьСбрасываем кэш самого компонента и все композитные копии этой конкретной страницы сайта.
-
Код свойства написан иначе примерно 20% случаев
ПризнакСвойство есть в карточке, но в результате его нет вовсе.
ПроверкаСверяем код свойства в настройках инфоблока с кодом в параметрах.
Что делатьПриводим код к тому виду, который записан в самом инфоблоке.
-
Элемент закрыт правами примерно 12% случаев
ПризнакАдминистратор видит данные, а покупатель - нет.
ПроверкаОткрываем ту же самую страницу из окна браузера вообще без всякой авторизации.
Что делатьПравим права группы на инфоблок или на конкретные элементы.
-
Значение пустое у самого элемента примерно 8% случаев
ПризнакКлюч свойства в результате есть, а значение пустое.
ПроверкаСмотрим значение прямо в карточке элемента и в выборке из консоли.
Что делатьЗаполняем значение или чиним тот самый обмен, который его каждый раз перетирает.
Частые вопросы
Почему компонент не тянет все свойства сразу?
Ради скорости: лишние свойства - это лишние запросы. Поэтому их перечисляют явно.
Как отключить кэш на время разбора?
Параметром кэширования в вызове компонента. После разбора его обязательно возвращают.
Свойство есть, а значение пустое - это та же причина?
Нет, это уже про данные: смотреть нужно карточку и обмен. Разница видна по наличию ключа в результате.
Что делать со свойствами торговых предложений?
У них свой список кодов в параметрах вызова. Свойства товара и предложения задаются раздельно.
Смежное
- Кастомизация компонента - оглавление подтемы
- Правки шаблона компонента не видны: разбор причин - когда дело в шаблоне, а не в данных
- Свой компонент не подключается: разбор причин - тот же разбор для своего компонента
- Шаблон чужого компонента: копия, доработка результата, эпилог - где менять результат
- Свойства инфоблока: чтение, запись и фильтрация по значению - откуда берутся значения
- Правка не видна на сайте: какой кэш сбросить - если дело в кэше
- Компоненты 2.0 - устройство компонентов целиком