Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

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

+11 голос
1

Коллеги, встал вопрос вывода артикула товара в печатной форме заказа.

Яндекс отсылаете к одному и тому же решению:

<?php
  $arElement = CIBlockElement::GetList(array(), array('IBLOCK_ID' => 1, 'ID' => $arBasket['PRODUCT_ID']), false, false, array('*', 'PROPERTY_CML2_ARTICLE'))->GetNext();
?>
<td><?echo htmlspecialchars($arElement["CML2_ARTICLE"]);?></td>

Однако после иньекции этого кода в свой шаблон - пустое поле!

Да и вообще, как ПРАВИЛЬНО выводить в печатной форме ЛЮБОЕ пользовательское свойство товара?

Очень срочно!!!

спросил 29 Апр, 16 от аноним

1 Ответ

00 голосов

Надеюсь, еще не поздно.

1. В GetList передавать в список необходимых полей " * " не очень целесообразно - если нужно одно свойство, то хватит ID и IBLOCK_ID (важно! для инфоблоков 2.0). Ну и PROPERTY_CML2_ARTICLE, конечно.

2. Значение свойства должно быть в $arElement["PROPERTY_CML2_ARTICLE_VALUE"].

3. Так как вы делаете GetNext(), а не Fetch(), то в значениях $arElement уже обработаны htmlspecialchars (кстати на современном Битрикс рекомендуется htmlspecialcharsbx в связи с особенностями PHP 5.7+ иметь свои особенные взгляды на кодировку текстов). Все значения массива, если вы ещё и ' * ' в список полей передали. Небезопасные значения остаются в элементах массива, ключи в которых начинаются на " ~ ". Например, $arElement['~NAME'].
 

<?php
  $arElement = CIBlockElement::GetList(
      array(), 
      array(
       'IBLOCK_ID' => 1, 
       'ID' => $arBasket['PRODUCT_ID']
      ), false, false, array(
        'ID',
        'IBLOCK_ID',
        'PROPERTY_CML2_ARTICLE')
  )->Fetch();
?>
<td><?echo htmlspecialchars($arElement["PROPERTY_CML2_ARTICLE_VALUE
"]);?></td>
ответил 02 Май, 16 от root (25,590 баллов)
Подставил я код в шаблон

<tr valign="top">
                <td bgcolor="#ffffff" style="border: 1pt solid #000000; border-right:none; border-top:none;">
                    <?echo $n++ ?>
                </td>
                <?
                $arElement = CIBlockElement::GetList(
                      array(),
                      array(
                        'IBLOCK_ID' => 6,
                           'ID' => $arBasket['PRODUCT_ID']
                    ), false, false, array(
                        'ID',
                        'IBLOCK_ID',
                        'PROPERTY_CML2_ARTICLE'))->Fetch();
                ?>
                <td bgcolor="#ffffff" style="border: 1pt solid #000000; border-right:none; border-top:none;"><?echo htmlspecialchars($arElement["PROPERTY_CML2_ARTICLE_VALUE"]);?></td>

Поменял IBLOCK_ID на свой (ID каталога у меня 6). Пусто

print_r($arElement) - ничего не выводит. Значит он не получает это значение?
Всё...разобрался!
Проблема была в том, что Битрикс в корзину кладёт ТП, а не сами товары, а у ТП отсутствуют артикулы (вот блин логика).
Пришлось делать 2 запроса - сначала получать массив PROPERTY_CML2_LINK без фильтрации по IBLOCK_ID, а только по PRODUCT_ID с постраничной навигацией nTopCount
А уже во втором запросе из полученного массива извлекать PROPERTY_CML2_ARTICLE с фильтрацией по ID, равному PROPERTY_CML2_LINK_VALUE, ну и выводить в ячейке таблицы PROPERTY_CML2_ARTICLE_VALUE.

Как всегда, помог свежий взгляд после сна и помощь товарищей!
Можете написать как в оконцовке выглядит код? Заранее благодарю!