Простейшие миграции в битриксе удобно применять для создания однотипных полей в разных инфоблоках. Ниже приведены примеры миграции с созданием списочных числовых и строковых свойств. А также миграции для перевода на разные языки.
В данном коде не хватает миграций обраного отката.
В сумме со скриптом для копирования инфоблоков, данный подход дает значительный прирост в разработке объемных проектов.
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 121 122 123 124 125 126 127 128 129 |
<?php ini_set('error_reporting', E_ALL); ini_set('display_errors', 1); ini_set('display_startup_errors', 1); $dir = explode(DIRECTORY_SEPARATOR, __DIR__); array_pop($dir); $_SERVER['DOCUMENT_ROOT'] = implode(DIRECTORY_SEPARATOR, $dir); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); \CModule::IncludeModule('iblock'); //проверка на существование свойства инфоблока function IsExist($IBLOCK_ID,$CODE) { $ret=false; $arFilter = array( 'IBLOCK_ID' => $IBLOCK_ID, 'CODE' => $CODE, ); $rsProperty = CIBlockProperty::GetList( array(), $arFilter ); if($element = $rsProperty->Fetch()) { $ret=true; } return $ret; } function createStr($IBLOCK_ID, $type,$NAME,$CODE,$SORT=10) { if(IsExist($IBLOCK_ID,$CODE)) { echo '<span style="color:red">Свойство '.$CODE.' уже существует!</span><br/>'; }else{ //добавление свойства типа "список" if($CODE=="VALUTE") { $arFields = Array( "NAME" => $NAME, "ACTIVE" => "Y", "SORT" => $SORT, "CODE" => "VALUTE", "PROPERTY_TYPE" => "L", "IBLOCK_ID" => $IBLOCK_ID ); $arFields["VALUES"][0] = Array( "VALUE" => "Рубль", "DEF" => "Y", "SORT" => "100" ); $arFields["VALUES"][1] = Array( "VALUE" => "Доллар", "DEF" => "N", "SORT" => "200" ); $arFields["VALUES"][2] = Array( "VALUE" => "Евро", "DEF" => "N", "SORT" => "300" ); $ibp = new CIBlockProperty; $PropID = $ibp->Add($arFields); } if($CODE=="VALUTE_PRICE") { $arFields = Array( "NAME" => $NAME, "ACTIVE" => "Y", "SORT" => $SORT, "CODE" => $CODE, "PROPERTY_TYPE" => "N", //число!!! "USER_TYPE" => $type, "LIST_TYPE" => "L", "SEARCHABLE" => "Y", "FILTRABLE" => "Y", "IBLOCK_ID" => $IBLOCK_ID, ); $ibp = new CIBlockProperty; $PropID = $ibp->Add($arFields); } if($CODE!=="VALUTE_PRICE" and $CODE!=="VALUTE" ) { $arFields = Array( "NAME" => $NAME, "ACTIVE" => "Y", "SORT" => $SORT, "CODE" => $CODE, "PROPERTY_TYPE" => "S", "USER_TYPE" => $type, "LIST_TYPE" => "L", "SEARCHABLE" => "Y", "FILTRABLE" => "Y", "IBLOCK_ID" => $IBLOCK_ID, ); $ibp = new CIBlockProperty; $PropID = $ibp->Add($arFields); } echo '<span style="color:green">Свойство '.$CODE.' добавлено</span><br/>'; } } $IBLOCK_ID=30; createStr($IBLOCK_ID,'','Валюта','VALUTE',1); createStr($IBLOCK_ID,'','Цена в валюте','VALUTE_PRICE',2); createStr($IBLOCK_ID,'','Приписка к цене из валюты (напр. руб. м²)','VALUTE_PRICE_SUFFIX',3); $IBLOCK_ID=34; createStr($IBLOCK_ID,'','Валюта','VALUTE',1); createStr($IBLOCK_ID,'','Цена в валюте','VALUTE_PRICE',2); createStr($IBLOCK_ID,'','Приписка к цене из валюты (напр. руб. м²)','VALUTE_PRICE_SUFFIX',3); //свойство валюта VALUTE |
Например далее скрипт для создании миграции для полей с переводом на английский язык
файл миграции
1 2 3 4 5 6 7 8 |
require_once($_SERVER['DOCUMENT_ROOT'] . "/bitrix/modules/main/include/prolog_before.php"); CModule::IncludeModule("iblock") ; include "function.php"; $IBLOCK_ID=3; createStr($IBLOCK_ID,'HTML','Технические характеристики RU','TECHNICAL_PARAMETERS_RU',1); createStr($IBLOCK_ID,'HTML','Технические характеристики EN','TECHNICAL_PARAMETERS_EN',1); |
файл funtion
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 |
//проверка на существование свойства инфоблока function IsExist($IBLOCK_ID,$CODE) { $ret=false; $arFilter = array( 'IBLOCK_ID' => $IBLOCK_ID, 'CODE' => $CODE, ); $rsProperty = CIBlockProperty::GetList( array(), $arFilter ); if($element = $rsProperty->Fetch()) { $ret=true; } return $ret; } function createStr($IBLOCK_ID, $type,$NAME,$CODE,$SORT=10) { if(IsExist($IBLOCK_ID,$CODE)) { echo '<span style="color:red">Свойство '.$CODE.' уже существует!</span><br/>'; }else{ //добавление свойства типа "строка или html , если type оставить пустым- будет просто инпут" $arFields = Array( "NAME" => $NAME, "ACTIVE" => "Y", "SORT" => $SORT, "CODE" => $CODE, "PROPERTY_TYPE" => "S", "USER_TYPE" => $type, "LIST_TYPE" => "L", "SEARCHABLE" => "Y", "FILTRABLE" => "Y", "IBLOCK_ID" => $IBLOCK_ID, ); $ibp = new CIBlockProperty; $PropID = $ibp->Add($arFields); echo '<span style="color:green">Свойство '.$CODE.' добавлено</span><br/>'; } } |