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

Свойство не выводится в шаблоне - разбор причин

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

С чего начать

Смотрим, что лежит в свойстве у этого элемента:

$rs = \CIBlockElement::GetProperty($iblockId, $elementId, [], ['CODE' => 'BRAND']);
while ($row = $rs->Fetch()) {
printf("значение=%s тип=%s активно=%s\n", var_export($row['VALUE'], true),
$row['PROPERTY_TYPE'], $row['ACTIVE']);
}
// пустое значение переводит разбор к данным, а не к шаблону витрины

Заполненное в базе значение отсекает половину причин сразу. Дальше вопрос только в том, доехало ли оно до шаблона и правильно ли шаблон его печатает.

Смотрим, что компонент получил на вход:

Окно терминала
grep -rn "PROPERTY_CODE" /home/bitrix/www/local/templates/ | head
grep -rn "'BRAND'" /home/bitrix/www/local/templates/ | head
# свойство попадает в результат только если перечислено в параметрах вызова

Печатаем результат прямо в шаблоне:

// template.php компонента, временно
echo '<pre>', print_r(array_keys($arResult['PROPERTIES'] ?? []), true), '</pre>';
echo '<pre>', print_r($arResult['DISPLAY_PROPERTIES']['BRAND'] ?? 'нет', true), '</pre>';
// список ключей показывает, что именно доехало до шаблона

Список ключей результата отвечает на главный вопрос разбора. Свойства нет в списке - проблема в параметрах вызова; свойство есть, а на странице пусто - проблема в самом шаблоне.

Проверяем кэш компонента:

$APPLICATION->IncludeComponent('bitrix:catalog.element', '', [
'CACHE_TYPE' => 'N', // только на время разбора
'PROPERTY_CODE' => ['BRAND', 'ARTICLE'],
]);

Причины

  1. Свойство не перечислено в параметрах компонента примерно 30% случаев

    ПризнакВ результате компонента свойства нет вовсе: его код отсутствует в списке ключей.

    ПроверкаСмотрим параметры вызова компонента и список кодов свойств в них.

    Что делатьДобавляем код свойства в параметры вызова и сбрасываем кэш этого компонента.

  2. Шаблон печатает не тот ключ результата примерно 25% случаев

    ПризнакСвойство в результате есть, но на странице пусто или выводится массив.

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

    Что делатьБерём подготовленное значение для вывода, а сырое - только для условий и расчётов.

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

    ПризнакВ административной части значение видно, а витрина показывает страницу без него.

    ПроверкаОтключаем кэш компонента на время проверки или сбрасываем кэш каталога.

    Что делатьСбрасываем кэш и включаем его сброс при изменении данных инфоблока.

  4. Значение заполнено не у того элемента примерно 15% случаев

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

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

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

  5. Свойство выключено или заведено в другом инфоблоке примерно 10% случаев

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

    ПроверкаПроверяем активность свойства и инфоблок, которому оно принадлежит.

    Что делатьВключаем свойство либо заводим его в том инфоблоке, элементы которого выводятся.

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

Почему свойства нет в результате компонента?

Компонент отдаёт только те свойства, коды которых перечислены в его параметрах. Остальные он не выбирает вовсе, чтобы не грузить лишнее.

Чем сырое значение отличается от подготовленного?

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

Свойство у товара или у предложения?

Это разные наборы: размеры и цвета обычно живут у предложений, а бренд и страна у товара. Выводить их нужно из соответствующей части результата.

Почему после правки значение появляется не сразу?

Страница отдаётся из кэша компонента, собранного до правки. Сброс по изменению данных инфоблока снимает этот вопрос навсегда.

Можно ли вывести все свойства сразу?

Можно, но это лишние выборки на каждой странице. Перечисляют только те свойства, которые действительно показываются посетителю.

Смежное

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