bitrix элементы раздела с торговыми предложениями

Часто нужно получить id элементов раздела вместе со SKU, например чтобы массово установить св-во.


// 1-м параметром можно передать как код, таки id раздела. 2-м надо указать, что передали код или ид. 
$els = get_section_elems(['mashiny'] , 'code');
echo 'elems';
pr($els);

// обновляю св-ва
array_walk($els , 'update_prop');

echo 'sku';
$sku = get_elems_offers($els);
pr($sku);

/**
 * [update_prop быстро обновить св-во]
 * @param  [type] $id [description]
 * @return [type]     [description]
 */
function update_prop($id){
   CIBlockElement::SetPropertyValuesEx(
      $id, // ELEMENT_ID
      false, // IBLOCK_ID Может быть не указан
      array('MARKA' => 123) ,  // Для свойства типа Список следует передавать идентификатор значения свойства, а не значение
      ['DoNotValidateLists'] // для свойств типа "список" отключает проверку наличия значений в метаданных свойства. 
   ); 
}


  /**
   * [get_section_elems description]
   * @return [type] [description]
   */
  function get_section_elems(array $ids, string $type){

    $filterSection =   $type == 'id' ? ['SECTION_ID' => $ids ] : ['SECTION_CODE' => $ids ] ;
    $res = CIBlockElement::GetList(
			[], 
			[$filterSection,
                'INCLUDE_SUBSECTIONS' => 'Y'], false, [], ['ID']
	);
        
		while($ob = $res->GetNext(true, false)){
                            $elems_ids[] = $ob['ID'];
		}

    return $elems_ids;
  }


  /**
   * [get_elems_offers description]
   * @param  [type] $elems_ids [description]
   * @return [type]            [description]
   */
  function get_elems_offers(array $elems_ids){

    $offers = CCatalogSKU::getOffersList(
     $elems_ids,
     '', // iblockID
     array(),// skuFilter
     array('NAME'), // поля
     array('CODE => ['SOME_PROP']') // св-ва
    );

    $offers2 = [];
    foreach ($offers as $key => $off1) {
        foreach($off1 as $k =>$offer){
            array_push($offers2, $k);
        }
    }
    
    return $offers2;
  }

 

Leave a comment

Your email address will not be published.


*