Не отображаются свойства товара(материал и размер оба свойства типа Enum) в заказах административной панели Bitirx. Как сделать чтобы отобразились?

В административной панели Bitrix в заказах, если зайти в конкретный заказ рядом с товарами знаю что могут отображаться их свойства. Мне нужно чтобы там отобразились свойства Материал и Размер(оба являются списком Enum).
Вот это место на скринсшоте:
5e217e1fd25af008025052.jpeg

Товары я добавляю в корзину через API(то есть не используется компонент), на отдельный PHP файл передаётся Ид ТП или товара для добавления в корзну и количество добавляемого товара или торгового предложения.

Добавление в корзину произвожу строчкой: Add2BasketByProductID($PRODUCT_ID,$QUANTITY,array());

При оформлении заказа просто передаю объект корзины объекту заказа, если коротко примерно так:

$order = Order::create($siteId, $USER->isAuthorized() ? $USER->GetID() : $userIdTpm);

...тут установка для $order всяких типов плательщика и прочего...

$basket = \Bitrix\Sale\Basket::loadItemsForFUser(\Bitrix\Sale\Fuser::getId(CSaleBasket::GetBasketUserID()), \Bitrix\Main\Context::getCurrent()->getSite());

$order->setBasket($basket);

Как мне сделать чтобы в заказах в админке отобразились нужные свойства? У товара на котором производилось тестирование значения свойства материал и размер точно заданы(вернее у его торгового предложения).

Вот так выглядят свойства торгового предложения:

5e2180344117d497966901.jpeg

Из предположений при добавлении в корзину товаров функцией Add2BasketByProductID нужно передавать в неё в качестве третьего параметра массив с свойствами торговых предложений. Если это так как именно это сделать для моего случая?

Ещё нашёл галочку "Значение добавляется в корзину" в типах инфоблока в торговых предложений на вкладке свойства если нажать изм напротив свойства, но она не помогла вывести свойства в админке в заказах, галочка на скрине.
5e218f7de9d3c452994058.jpeg
  • Вопрос задан
  • 2732 просмотра
Решения вопроса 3
@PetrPo
Вверху "изменить заказ", крутишь до состава заказа (как на твоем первом скрине), а там сюрприз в виде контекстного меню joxi.ru/DmB3na7TJXeRQ2, настраиваешь колонки как тебе надо))
Ответ написан
@anton99zel Куратор тега 1С-Битрикс
29а класс средней школы №7
nikolaevevge
@nikolaevevge Автор вопроса
Оказалось следующее:

У меня в файле который принимал по ajax id товара и количество для добавления в корзину была самописная функция:

function productAddToBasket($PRODUCT_ID=0,$QUANTITY=0) {
  return Add2BasketByProductID($PRODUCT_ID,$QUANTITY,array());
}


В случаи если не используется стандартный компонент для добавления в корзину галочка "Значение добавляется в корзину" бесполезна, то есть если Вы пишите свой вариант добавления в корзину на API то добавление свойств необходимо производить самостоятельно, и возможно это сделать и в функции Add2BasketByProductID(не смотря на то что она устаревшая), для этого передавать свойства требуется в третьем параметре.

Моя ошибка была в том, что я не помещал свойства в ещё один массив, то есть 3-ий параметр должен выглядеть так: array(array("NAME"=>"Имя свойства","CODE"=>"test_code","VALUE"=>"Значение")) ну или несколько вложенных массивов внутри внешнего через запятую.

То есть в моём случаи я поправил строчку:

return Add2BasketByProductID($PRODUCT_ID,$QUANTITY,array());

на строчку:

return Add2BasketByProductID($PRODUCT_ID,$QUANTITY,array(array("NAME"=>"Имя свойства","CODE"=>"test_code","VALUE"=>"Значение")));

То есть исправление потребовалось только в файле добавляющем товары в корзину. Файл же который из корзины формирует заказ я не трогал. В результате замены вышеуказанной строчки в админке получил следующее:

5e21a7d7c8b43501761093.jpeg

Методом о которым пишет Роман Грицук тоже возможно, например следующим кодом:

$fields = array("PRODUCT_ID"=>$PRODUCT_ID,"QUANTITY"=>2,"PROPS"=>
   array(array("NAME"=>"Имя свойства","CODE"=>"test_code","VALUE"=>"Значение"))
);
$r = \Bitrix\Catalog\Product\Basket::addProduct($fields);


Зачем в массиве свойств передаётся CODE не совсем понятно, при этом экспериментальным путём установлено что этот код не обязан совпадать с кодом указанным в свойствах инфоблока.

Возможно кому то потребуется метод для получения свойств инфоблока у которых отмечена галочка "Значение добавляется в корзину"(информацию по этому поводу нашёл тут https://dev.1c-bitrix.ru/support/forum/forum48/top... )

$IBlockId = 2;//В данном случаи передаю Id инфоблока торговых предложений
$ee = \Bitrix\Catalog\Product\PropertyCatalogFeature::getBasketPropertyCodes($IBlockId);
var_dump($ee);//возвращает:array(2) { [0]=> string(2) "11" [1]=> string(2) "42" } 11 и 42 это Id свойств торговых предложений отмеченных галочкой "Значение добавляется в корзину"


Итого я переписал исходную функцию следующим образом(только учитывайте что у меня в ней перебираются только свойства типа список(ENUM), поскольку мне другие были не нужны):

function productAddToBasket($PRODUCT_ID=0,$QUANTITY=0) {
    $TPIBlockId = 2;//Инфоблок торговых предложений(в данной задаче требуется только он, возможно в другой потребуется выбирать свойства из обоих инфоблоков)
    $propIds = \Bitrix\Catalog\Product\PropertyCatalogFeature::getBasketPropertyCodes($TPIBlockId);//Получаем Id свойств отмеченные галочкой "Значение добавляется в корзину"

    $dbProps = CIBlockElement::GetProperty($TPIBlockId,$PRODUCT_ID,array(),Array("ID"=>$propIds));
    $propsForBasketAr = array();
    while($oneProp = $dbProps->Fetch()) {
//В следующей строчке условие которое выбирает значения только для ENUM свойств, если есть другие требуется дописать
      if (isset($oneProp["VALUE_ENUM"]) and $oneProp["VALUE_ENUM"] and isset($oneProp["NAME"]) and $oneProp["NAME"] and isset($oneProp["CODE"]) and $oneProp["CODE"]) {
        $propsForBasketAr[] = array("NAME"=>$oneProp["NAME"],"CODE"=>$oneProp["CODE"],"VALUE"=>$oneProp["VALUE_ENUM"]);
      }
    }
    return Add2BasketByProductID($PRODUCT_ID,$QUANTITY,$propsForBasketAr);
}


Есть ещё одно решение, которое предложил PetrPo. Подробности находятся в комментариях под его ответом. Если сделать как он написал результат будет таким:

5e21b0c570092546639769.jpeg
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
winer
@winer
занимаюсь разработкой сайтов на 1c-bitrix
Для того чтобы там отображались эти свойства, нужно их(свойства) добавлять в корзину. Галочка "Значение добавляется в корзину" влияет только при использовании стандартного шаблона ( или шаблона на его основе).

Вы же для добавления товара в корзину используете устаревшую функцию Add2BasketByProductID
/**
 * @deprecated deprecated since catalog 17.5.9
 * @see \Bitrix\Catalog\Product\Basket::add
*/


Посмотрите в коде стандартного компонента catalog.section или catalog.element, то как реализовано добавление товара в корзину. (Метод \Bitrix\Iblock\Component\Base::addProductToBasket)

Либо же почитайте API https://mrcappuccino.ru/blog/post/work-with-basket...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы