Аналоговый код брал тут и переделал https://dev.1c-bitrix.ru/community/webdev/user/6908/blog/2147/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php"); use Bitrix\Main\Loader; use intec\constructor\Module as Constructor; use intec\constructor\models\Build; if($_GET['start']!=='3333365454'){ die(); } $IBLOCK_ID = 23; $TARGETIB_ID = 23; if(CModule::IncludeModule("iblock") && !empty($IBLOCK_ID)&& !empty($TARGETIB_ID)) { for ($i = 4; $i <= 10; $i++) { /* 346 Фото (Второй блок) 700 IMG_2 341 Заголовок H2 (Второй блок) 701 H2_2 342 Текст (Второй блок) 702 TXT_2 343 Заголовок H3 (Второй блок) 703 H3_2 344 Текст 2 (Второй блок) 704 TXTH3_2 * */ $number=$i; $ids=array( // это список полей для копирования 340, 346, 341, 342, 343, 344 ); foreach ($ids as $field_id) { $res = CIBlock::GetByID($IBLOCK_ID); $proplist = CIBlockProperty::GetList(Array("SORT"=>"ASC"), Array("IBLOCK_ID"=>$IBLOCK_ID ,'ID'=>$field_id)); while ($ar_property = $proplist->GetNext()) { $arFields = Array(); $ar_enum_list = Array(); $is_property = CIBlockProperty::GetByID($ar_property["ID"]); if ($ar_prop = $is_property->Fetch()) { echo "id".$ar_property["ID"].'<br/>'; $id=$ar_prop["ID"]; unset($ar_prop["ID"]); unset($ar_prop["XML_X"]); unset($ar_prop["TIMESTAMP_X"]); $ar_prop["SORT"]='8'.$number.'0'; //изменяем сортировку $mas_expl_name=explode('(',$ar_prop["NAME"]); // имя тоже изменяем $ar_prop["NAME"]=$mas_expl_name[0]; $ar_prop["NAME"]=$ar_prop["NAME"].'(Блок '.$number.' )'; $mas_expl=explode('_',$ar_prop["CODE"]); $code_new=$mas_expl[0]; $ar_prop["CODE"]=$mas_expl[0].'_'.$number; // код тоже мне другой нужне $ar_prop["IBLOCK_ID"] = $TARGETIB_ID; $arFields = $ar_prop; print_r($ar_prop); $ibp = new CIBlockProperty; // проверка на одинаковый код $arFilter = array( 'IBLOCK_ID' => $TARGETIB_ID, "CODE" => $arFields["CODE"] ); $rsProperty = CIBlockProperty::GetList( array(), $arFilter ); if(!$element = $rsProperty->Fetch()) { /* if ($ibp->Add($arFields) ) { echo '<p style="color:green;"><b>Добавлено свойство: </b>'.$arFields["NAME"].'</p>'; } */ } } } //while } //foreach echo $i; } //for } |
Удобнее всего этот инструмент использовать для инфоблоков в которых много списочных свойств или вообще большое количество свойств требующих детальной настройки.
для инфоблоков есть отдельный скрипт копирования инфоблоков целиком.