Поскольку у Bitrix нет штатного механизма миграций инфоблоков между сайтами, решил разобраться начиная с API типов и так далее, чтобы возможно написать свой мигратор, в том числе для случаев когда между инфоблоками установлены связи.
Разбираясь с API создания информационных блоков планировал добиться передачи таких параметров, чтобы в результате создавался инфоблок аналогичный тому что создаётся из админки, то-есть если ничего не менять с параметрами по-умолчанию.
Код который я использовал доступен по ссылке [URL=http://blog.ivru.net/?id=141]http://blog.ivru.net/?id=141[/URL] (данную документацию по мере возможности возможно буду дописывать, а так же что то менять), листинги кода дублировать в топик не буду, при необходимости посмотрите по ссылке.
Если коротко, создаём экземпляр объекта:
$ib = new CIBlock;
Далее создаём массив $arFields с параметрами (опять же по ссылке какой именно передавал видно, копировать не буду)
Так вот если в этом массиве не указывать параметр SECTION_PROPERTY, то если таким образом создать инфоблок $ID = $ib->Add($arFields); а затем посмотреть информацию по $res = CIBlock::GetByID($ID);
$ar_res = $res->GetNext();
var_dump($ar_res);
То SECTION_PROPERTY будет установлен в NULL, а если зайти в админке в созданный инфоблок и просто нажать сохранить то SECTION_PROPERTY будет установлен в N.
А если при создании инфоблока методами API в $arFields указать SECTION_PROPERTY как пустую строку("") или false или 0 (причем не важно строковой или числовой) или N, то сразу после создания SECTION_PROPERTY будет установлен в Y, а после пересохранения из админки в N.
Почему такое поведение? Как сделать чтобы после вызова $ID = $ib->Add($arFields); значение SECTION_PROPERTY сразу было установлено в "N"
Тестировалось всё это на редакции Старт. Ядру месяца 2(достаточно свежее).
И ещё по теме: SECTION_PROPERTY - признак наличия привязки свойств к разделам. Можно подробнее о смысле этого параметра? В каких случаях он должен быть N а в каких Y и для чего?
Разбираясь с API создания информационных блоков планировал добиться передачи таких параметров, чтобы в результате создавался инфоблок аналогичный тому что создаётся из админки, то-есть если ничего не менять с параметрами по-умолчанию.
Код который я использовал доступен по ссылке [URL=http://blog.ivru.net/?id=141]http://blog.ivru.net/?id=141[/URL] (данную документацию по мере возможности возможно буду дописывать, а так же что то менять), листинги кода дублировать в топик не буду, при необходимости посмотрите по ссылке.
Если коротко, создаём экземпляр объекта:
$ib = new CIBlock;
Далее создаём массив $arFields с параметрами (опять же по ссылке какой именно передавал видно, копировать не буду)
Так вот если в этом массиве не указывать параметр SECTION_PROPERTY, то если таким образом создать инфоблок $ID = $ib->Add($arFields); а затем посмотреть информацию по $res = CIBlock::GetByID($ID);
$ar_res = $res->GetNext();
var_dump($ar_res);
То SECTION_PROPERTY будет установлен в NULL, а если зайти в админке в созданный инфоблок и просто нажать сохранить то SECTION_PROPERTY будет установлен в N.
А если при создании инфоблока методами API в $arFields указать SECTION_PROPERTY как пустую строку("") или false или 0 (причем не важно строковой или числовой) или N, то сразу после создания SECTION_PROPERTY будет установлен в Y, а после пересохранения из админки в N.
Почему такое поведение? Как сделать чтобы после вызова $ID = $ib->Add($arFields); значение SECTION_PROPERTY сразу было установлено в "N"
Тестировалось всё это на редакции Старт. Ядру месяца 2(достаточно свежее).
И ещё по теме: SECTION_PROPERTY - признак наличия привязки свойств к разделам. Можно подробнее о смысле этого параметра? В каких случаях он должен быть N а в каких Y и для чего?