В общем делали каталог вот эти деятели [URL=http://dev.1c-bitrix.ru/community/forums/forum14/topic17299/]http://dev.1c-bitrix.ru/community/forums/forum14/topic17299/[/URL] , не дешево. Сейчас игнорят на вопрос исправить ошибки.
Как оптимизировать этот код или переписать, чтобы не весил CPU на 100%. Идет просто копирование разделов (очень много) из одного инфоблока в другой.[CODE]<?
// файл /bitrix/php_interface/init.php
// регистрируем обработчик
CModule::IncludeModule('iblock');
CModule::IncludeModule("catalog");
global $DBType;
AddEventHandler("iblock", "OnAfterIBlockSectionAdd", Array("MyClass", "OnAfterIBlockSectionAddHandler"));
class MyClass
{
// создаем обработчик события "OnAfterIBlockSectionAdd"
function OnAfterIBlockSectionAddHandler(&$arFields)
{
//$arFields["IBLOCK_SECTION_ID"]=1;
$ID_MAIN_SEC=$arFields["ID"];
$arFilter = array('IBLOCK_ID' => 10, 'ACTIVE' => 'Y','ID'=> $ID_MAIN_SEC);
$arSelect = array("ACTIVE","IBLOCK_SECTION_ID","IBLOCK_ID",'ID', 'NAME', 'CODE', 'DEPTH_LEVEL', 'UF_*');
$rsSection = CIBlockSection::GetTreeList($arFilter, $arSelect);
while($arSection = $rsSection->Fetch()) {
$arRes=$arSection;
}
//AddMessage2Log($arRes);
if($arRes['DEPTH_LEVEL']==2 && $arRes['UF_NEW_SECTIONS']==1)
{
//получаем список разделов эталона запчастяй
$arFilter = array('IBLOCK_ID' => 25, 'ACTIVE' => 'Y');
$arSelect = array("ACTIVE","IBLOCK_SECTION_ID","IBLOCK_ID",'ID', 'NAME', 'CODE', 'DEPTH_LEVEL');
$rsSection = CIBlockSection::GetTreeList($arFilter, $arSelect);
while($arSection = $rsSection->Fetch()) {
$arSection['IBLOCK_ID']=10;
if($arSection['IBLOCK_SECTION_ID']==""){
$arSection['IBLOCK_SECTION_ID']=$arFields["ID"];
}
$arSection_mass[]=$arSection;
}
foreach ($arSection_mass as $key => $arSection_mass_one) {
if($arSection_mass_one['DEPTH_LEVEL']==1){
if($arSection_mass_one['IBLOCK_SECTION_ID']){
$bs = new CIBlockSection;
$ID_level = $bs->Add($arSection_mass_one);
$arSection_mass[$key]['IBLOCK_SECTION_ID_NEW']=$ID_level;
}
}
}
foreach ($arSection_mass as $key => $arSection_mass_one) {
if($arSection_mass_one['IBLOCK_SECTION_ID'] && $arSection_mass_one['DEPTH_LEVEL']==2){
foreach ($arSection_mass as $key2 => $arSection_mass_one2) {
if($arSection_mass_one2['ID']==$arSection_mass_one['IBLOCK_SECTION_ID']){
$level_id2=$arSection_mass_one2['IBLOCK_SECTION_ID_NEW'];
break;
}
}
$arSection_mass_one['IBLOCK_SECTION_ID']=$level_id2;
if($arSection_mass_one['IBLOCK_SECTION_ID']){
$bs = new CIBlockSection;
$ID_level = $bs->Add($arSection_mass_one);
}
$arSection_mass[$key]['IBLOCK_SECTION_ID_NEW']=$ID_level;
}
}
foreach ($arSection_mass as $key => $arSection_mass_one) {
if($arSection_mass_one['DEPTH_LEVEL']==3){
foreach ($arSection_mass as $key3 => $arSection_mass_one3) {
if($arSection_mass_one3['ID']==$arSection_mass_one['IBLOCK_SECTION_ID']){
$level_id3=$arSection_mass_one3['IBLOCK_SECTION_ID_NEW'];
break;
}
}
$arSection_mass_one['IBLOCK_SECTION_ID']=$level_id3;
$bs = new CIBlockSection;
$ID_level = $bs->Add($arSection_mass_one);
$arSection_mass[$key]['IBLOCK_SECTION_ID_NEW']=$ID_level;
}
}
}
}
}
?>[/CODE]
Как оптимизировать этот код или переписать, чтобы не весил CPU на 100%. Идет просто копирование разделов (очень много) из одного инфоблока в другой.[CODE]<?
// файл /bitrix/php_interface/init.php
// регистрируем обработчик
CModule::IncludeModule('iblock');
CModule::IncludeModule("catalog");
global $DBType;
AddEventHandler("iblock", "OnAfterIBlockSectionAdd", Array("MyClass", "OnAfterIBlockSectionAddHandler"));
class MyClass
{
// создаем обработчик события "OnAfterIBlockSectionAdd"
function OnAfterIBlockSectionAddHandler(&$arFields)
{
//$arFields["IBLOCK_SECTION_ID"]=1;
$ID_MAIN_SEC=$arFields["ID"];
$arFilter = array('IBLOCK_ID' => 10, 'ACTIVE' => 'Y','ID'=> $ID_MAIN_SEC);
$arSelect = array("ACTIVE","IBLOCK_SECTION_ID","IBLOCK_ID",'ID', 'NAME', 'CODE', 'DEPTH_LEVEL', 'UF_*');
$rsSection = CIBlockSection::GetTreeList($arFilter, $arSelect);
while($arSection = $rsSection->Fetch()) {
$arRes=$arSection;
}
//AddMessage2Log($arRes);
if($arRes['DEPTH_LEVEL']==2 && $arRes['UF_NEW_SECTIONS']==1)
{
//получаем список разделов эталона запчастяй
$arFilter = array('IBLOCK_ID' => 25, 'ACTIVE' => 'Y');
$arSelect = array("ACTIVE","IBLOCK_SECTION_ID","IBLOCK_ID",'ID', 'NAME', 'CODE', 'DEPTH_LEVEL');
$rsSection = CIBlockSection::GetTreeList($arFilter, $arSelect);
while($arSection = $rsSection->Fetch()) {
$arSection['IBLOCK_ID']=10;
if($arSection['IBLOCK_SECTION_ID']==""){
$arSection['IBLOCK_SECTION_ID']=$arFields["ID"];
}
$arSection_mass[]=$arSection;
}
foreach ($arSection_mass as $key => $arSection_mass_one) {
if($arSection_mass_one['DEPTH_LEVEL']==1){
if($arSection_mass_one['IBLOCK_SECTION_ID']){
$bs = new CIBlockSection;
$ID_level = $bs->Add($arSection_mass_one);
$arSection_mass[$key]['IBLOCK_SECTION_ID_NEW']=$ID_level;
}
}
}
foreach ($arSection_mass as $key => $arSection_mass_one) {
if($arSection_mass_one['IBLOCK_SECTION_ID'] && $arSection_mass_one['DEPTH_LEVEL']==2){
foreach ($arSection_mass as $key2 => $arSection_mass_one2) {
if($arSection_mass_one2['ID']==$arSection_mass_one['IBLOCK_SECTION_ID']){
$level_id2=$arSection_mass_one2['IBLOCK_SECTION_ID_NEW'];
break;
}
}
$arSection_mass_one['IBLOCK_SECTION_ID']=$level_id2;
if($arSection_mass_one['IBLOCK_SECTION_ID']){
$bs = new CIBlockSection;
$ID_level = $bs->Add($arSection_mass_one);
}
$arSection_mass[$key]['IBLOCK_SECTION_ID_NEW']=$ID_level;
}
}
foreach ($arSection_mass as $key => $arSection_mass_one) {
if($arSection_mass_one['DEPTH_LEVEL']==3){
foreach ($arSection_mass as $key3 => $arSection_mass_one3) {
if($arSection_mass_one3['ID']==$arSection_mass_one['IBLOCK_SECTION_ID']){
$level_id3=$arSection_mass_one3['IBLOCK_SECTION_ID_NEW'];
break;
}
}
$arSection_mass_one['IBLOCK_SECTION_ID']=$level_id3;
$bs = new CIBlockSection;
$ID_level = $bs->Add($arSection_mass_one);
$arSection_mass[$key]['IBLOCK_SECTION_ID_NEW']=$ID_level;
}
}
}
}
}
?>[/CODE]