суббота, 19 июля 2014 г.

Добавление элемента в highload блок 1С-Битрикс с проверкой существования и апдейтом - пример себе на память

function AddToHI($tableName='bedrosova_filter_sef',$parent_xml_id,$child_xml_id, $code){

$fp = fopen($_SERVER['DOCUMENT_ROOT'].'/upload/bedrosova.log', 'a');
fwrite($fp, print_r('----------------- '.date("F j, Y, g:i a").". Поступившие данные:".PHP_EOL, true));
fwrite($fp, print_r(array('parent_xml_id'=>$parent_xml_id, 'child_xml_id'=>$child_xml_id, 'code'=>$code,), true));


if (strlen($code)<1)
{
fwrite($fp, print_r("Не передан символьный код!".PHP_EOL, true));
fclose($fp);
return false;
}

if (!preg_match("#^[aA-zZ0-9_]+$#",$code))
{
fwrite($fp, print_r("Символьный код содержит недопустимые символы!".PHP_EOL, true));
fclose($fp);
return false;
}

$HLData = \Bitrix\Highloadblock\HighloadBlockTable::getList(array('filter'=>array('TABLE_NAME'=>$tableName)));
      if ($HLBlock = $HLData->fetch())
      {
       //found highloadiblock
         
       $HLBlock_entity = \Bitrix\Highloadblock\HighloadBlockTable::compileEntity($HLBlock);
 
 
  if ($child_xml_id!="root"){
       

  //Зададим параметры запроса, любой параметр можно опустить
 

$main_query = new \Bitrix\Main\Entity\Query($HLBlock_entity);
$main_query->setSelect(array('*'));
$main_query->setFilter(array('UF_CATEGORY_XML_ID'=> $parent_xml_id,"UF_SEF"=>$code));

//Выполним запрос
$res_query = $main_query->exec();

//Получаем результат по привычной схеме
$res_query = new CDBResult($res_query);  
if (!$row = $res_query->Fetch())
{
//create record in Highload IBlock
$HLBlock_entity_data_class = $HLBlock_entity->getDataClass();
$arBxData = array
(
 'UF_CATEGORY_XML_ID' => $parent_xml_id,
 'UF_VALUE_XML_ID' => $child_xml_id,
 'UF_SEF'=> $code,
);
$res_query = $HLBlock_entity_data_class::add($arBxData);
}
else{
//апдейтим

$HLBlock_entity_data_class = $HLBlock_entity->getDataClass();
$arBxData = array
(
 'UF_CATEGORY_XML_ID' => $parent_xml_id,
 'UF_VALUE_XML_ID' => $child_xml_id,
 'UF_SEF'=> $code,
);
$res_query = $HLBlock_entity_data_class::update($row['ID'],$arBxData);

}

}
else{

$main_query2 = new \Bitrix\Main\Entity\Query($HLBlock_entity);
$main_query2->setSelect(array('*'));
$main_query2->setFilter(array("UF_SEF"=>$code));

//Выполним запрос
$res_query2 = $main_query2->exec();

//Получаем результат по привычной схеме
$res_query2 = new CDBResult($res_query2);  
if (!$row2 = $res_query2->Fetch())
{

$main_query = new \Bitrix\Main\Entity\Query($HLBlock_entity);
$main_query->setSelect(array('*'));
$main_query->setFilter(array('UF_CATEGORY_XML_ID'=> $parent_xml_id));

//Выполним запрос
$res_query = $main_query->exec();

//Получаем результат по привычной схеме
$res_query = new CDBResult($res_query);  
if (!$row = $res_query->Fetch())
{
//create record in Highload IBlock
$HLBlock_entity_data_class = $HLBlock_entity->getDataClass();
$arBxData = array
(
 'UF_CATEGORY_XML_ID' => $parent_xml_id,
 'UF_VALUE_XML_ID' => $child_xml_id,
 'UF_SEF'=> $code,
);
$res_query = $HLBlock_entity_data_class::add($arBxData);
}
else{
//апдейтим

$HLBlock_entity_data_class = $HLBlock_entity->getDataClass();
$arBxData = array
(
 'UF_CATEGORY_XML_ID' => $parent_xml_id,
 'UF_VALUE_XML_ID' => $child_xml_id,
 'UF_SEF'=> $code,
);
$res_query = $HLBlock_entity_data_class::update($row['ID'],$arBxData);

}



}


}
     
      }
fclose($fp);
}

2 комментария:

Анонимный комментирует...

А как через апи создать Highload-блок?

Юлия комментирует...

Николай? Вот тут посмотрите апи работы с хайлоадблоками: http://bxapi.ru/?search=highloadblock