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

Вывести свойства заказанных товаров

00 голосов
6
Когда я заказываю один товар, свойство выводится. Когда товаров больше 1, свойства не пишутся.
Я использую следующий код:
Цитата
$strArtVal = "";
$dbBasketArt = CSaleBasket::GetList(
array(),
array("ORDER_ID" => $arResult["ORDER_ID"]),
false,
false,
array("ID", "PRODUCT_ID", "NAME", "QUANTITY")
);

while ($arBasketArt = $dbBasketArt->GetNext())
{
$strArtVal .= $arBasketArt["PRODUCT_ID"];

}

$artcuk ="";
$db_propsart = CIBlockElement::GetProperty(
"7",
$strArtVal,
array(),
array("ID"=>"36")
);
while ($arPropArt = $db_propsart->Fetch())
{
$artcuk .= $arPropArt["NAME"].": ".$arPropArt["VALUE"];

}
// mail message
if (strlen($arResult["ERROR_MESSAGE"]) <= 0)
{
$event = new CEvent;
$strOrderList = "";
$dbBasketItems = CSaleBasket::GetList(
array("NAME" => "ASC"),
array("ORDER_ID" => $arResult["ORDER_ID"]),
false,
false,
array("ID", "NAME", "QUANTITY")
);

while ($arBasketItems = $dbBasketItems->Fetch())
{
$strOrderList .= $artcuk." - ".$arBasketItems["NAME"]." - ".$arBasketItems["QUANTITY"]." ".GetMessage("SALE_QUANTITY_UNIT");
$strOrderList .= "\n";
$strOrderList .= "<br />";
}


Может кто сталкивался? Или просто может помочь.
спросил 23 Апр, 13 от Kiriel (2,010 баллов)

6 Ответы

00 голосов
Цитата
Alex K. пишет:
вы айдишники в строку сливаете, естественно ничего не находит, в итоге CIBlockElement::GetProperty ищет element_id типа 12312345345

Дело в том что при одном товаре он находит свойство. А при нескольких не находит. Я думал что само свойство и список товаров в разных циклах, и поэтому несколько товаров не получают свойство. Но включить самостоятельно свойства в цикл списка товаров не смог...
ответил 23 Апр, 13 от Kiriel (2,010 баллов)
00 голосов
Код
$strArtVal .= $arBasketArt["PRODUCT_ID"];


вы айдишники в строку сливаете, естественно ничего не находит, в итоге CIBlockElement::GetProperty ищет element_id типа 12312345345
выбирайте в цикле или пользуйтесь сложным фильтром
ответил 23 Апр, 13 от MaJopKa (240 баллов)
00 голосов
Цитата
Артур Глазов пишет:
Дело в том что при одном товаре он находит свойство.

Правильно. когда один рез-т, то и в итоге строка содержит один ID

Цитата

Но включить самостоятельно свойства в цикл списка товаров не смог...


курим мануалы по циклам
Код
$artcuk =""; 
while ($arBasketArt = $dbBasketArt->GetNext())
{
   $element_id = $arBasketArt["PRODUCT_ID"]; 

   $db_propsart = CIBlockElement::GetProperty( 
      "7", 
      $element_id, 
      array(), 
      array("ID"=>"36") 
   ); 

   while ($arPropArt = $db_propsart->Fetch()) 
      $artcuk .= $arPropArt["NAME"].": ".$arPropArt["VALUE"]."\n"; 

}

ответил 19 Июнь, 13 от MaJopKa (240 баллов)
00 голосов
Код

$artcuk ="";
while ($arBasketArt = $dbBasketArt->GetNext())
{
   $element_id = $arBasketArt["PRODUCT_ID"];

   $db_propsart = CIBlockElement::GetProperty(
      "7",
      $element_id,
      array(),
      array("ID"=>"36")
   );

   while ($arPropArt = $db_propsart->Fetch())
      $artcuk .= $arPropArt["NAME"].": ".$arPropArt["VALUE"]."\n";

} 

[/QUOTE]

Теперь даже для одного товара свойства нет...
ответил 22 Сен, 13 от Kiriel (2,010 баллов)
00 голосов
Спасибо. Выводится свойство. Но выводится странно...
Вот так:
Состав заказа:
Цитата
Артикул: АБН-Р003131 Артикул: АБН-Р000553 - ASUS X59SR <90NSUZ-589163-3AMC806Y> T5900(2.2)/3072/320(5400)/DVD-RW/WiFi/BT/cam/VistaHB/15.4"WXGA [NEW] - 1.00 шт.
Артикул: АБН-Р003131 Артикул: АБН-Р000553 - ASUS X61G <90NSTY-549232-4AMC106Y> T3400(2.16)/2048/250(5400)/DVD-RW/WiFi/cam/VistaHB/16"WXGA/2.84 кг - 1.00 шт.


Код такой:
Цитата
$artcuk ="";
$strArtVal = "";
$dbBasketArt = CSaleBasket::GetList(
array(),
array("ORDER_ID" => $arResult["ORDER_ID"]),
false,
false,
array("ID", "PRODUCT_ID", "NAME", "QUANTITY")
);
while ($arBasketArt = $dbBasketArt->Fetch())
{
$element_id = $arBasketArt["PRODUCT_ID"];

$db_propsart = CIBlockElement::GetProperty(
"7",
$element_id,
array(),
array("ID"=>"36")
);

while ($arPropArt = $db_propsart->Fetch())
$artcuk .= $arPropArt["NAME"].": ".$arPropArt["VALUE"]."\n";

}
// mail message
if (strlen($arResult["ERROR_MESSAGE"]) <= 0)
{
$event = new CEvent;
$strOrderList = "";
$dbBasketItems = CSaleBasket::GetList(
array("NAME" => "ASC"),
array("ORDER_ID" => $arResult["ORDER_ID"]),
false,
false,
array("ID", "NAME", "QUANTITY")
);

while ($arBasketItems = $dbBasketItems->Fetch())
{
$strOrderList .= $artcuk." - ".$arBasketItems["NAME"]." - ".$arBasketItems["QUANTITY"]." ".GetMessage("SALE_QUANTITY_UNIT");
$strOrderList .= "\n";
$strOrderList .= "<br />";
}
ответил 22 Дек, 13 от Kiriel (2,010 баллов)
00 голосов
Задача решена. Товарищ Alex K. был на верном пути.
Только код выглядит так:
Цитата
$artcuk ="";
$strArtVal = "";
$dbBasketArt = CSaleBasket::GetList(
array("NAME" => "ASC"),
array("ORDER_ID" => $arResult["ORDER_ID"]),
false,
false,
array("ID", "PRODUCT_ID", "NAME", "QUANTITY")
);
// mail message
if (strlen($arResult["ERROR_MESSAGE"]) <= 0)
{
$event = new CEvent;
$strOrderList = "";
$dbBasketItems = CSaleBasket::GetList(
array("NAME" => "ASC"),
array("ORDER_ID" => $arResult["ORDER_ID"]),
false,
false,
array("ID", "PRODUCT_ID", "NAME", "QUANTITY")
);

while ($arBasketItems = $dbBasketItems->Fetch())
{
$element_id = $arBasketItems["PRODUCT_ID"];

$db_propsart = CIBlockElement::GetProperty(
"7",
$element_id,
array(),
array("ID"=>"36")
);
while ($arPropArt = $db_propsart->Fetch())

$strOrderList .= $arPropArt["NAME"].": ".$arPropArt["VALUE"]." - ".$arBasketItems["NAME"]." - ".$arBasketItems["QUANTITY"]." ".GetMessage("SALE_QUANTITY_UNIT");
$strOrderList .= "\n";
$strOrderList .= "<br />";
}


Цитата
Alex K. пишет:
курим мануалы по циклам

Я языки программирования изучаю 3 месяца. Пока не могу все тонкости познать. ;)
ответил 07 Апр, 14 от Kiriel (2,010 баллов)

Похожие вопросы

0 голосов
1 ответ
0 голосов
1 ответ
0 голосов
2 ответов
спросил 15 Авг, 13 от Osumi (160 баллов)
0 голосов
1 ответ