Конечно, в идеале, чтобы был некий мастер, где можно выбирать инфоблоки исходный и целевой (или новый), выбирать свойства и значения вариантов списков для копирования, поля инфоблока, выбирать элементы для копирования... но бывают решения для конкретной задачи - скопировать свойства и их списки вариантов значений из одного инфоблока в другой.
Вот так это сделал я:
Замечу, что я даже не программист...
Вот так это сделал я:
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("Новый раздел");
?>
<?
$IBLOCK_ID = 57;
$TARGETIB_ID = 78;
if(CModule::IncludeModule("iblock"))
{
$res = CIBlock::GetByID($IBLOCK_ID);
if($ar_res = $res->Fetch()) {
//echo "<pre>"; print_r($ar_res); echo "</pre>";
}
$proplist = CIBlockProperty::GetList(Array("SORT"=>"ASC"), Array("IBLOCK_ID"=>$IBLOCK_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()) {
$id=$ar_prop["ID"];
unset($ar_prop["ID"]);
unset($ar_prop["XML_X"]);
unset($ar_prop["TIMESTAMP_X"]);
$ar_prop["IBLOCK_ID"] = $TARGETIB_ID;
$arFields = $ar_prop;
$db_enum_list = CIBlockProperty::GetPropertyEnum($id, Array("SORT"=>"ASC"), Array());
while($ar_enum_list = $db_enum_list->Fetch())
{
unset($ar_enum_list["ID"]);
unset($ar_enum_list["PROPERTY_ID"]);
unset($ar_enum_list["XML_ID"]);
unset($ar_enum_list["TMP_ID"]);
unset($ar_enum_list["EXTERNAL_ID"]);
$arFields["VALUES"][] = $ar_enum_list;
}
$ibp = new CIBlockProperty;
$PropID = $ibp->Add($arFields);
/*echo "<div style='margin: 10px; border:1px dashed #990000; padding:15px;'><pre>";
print_r($arFields);
echo "</pre></div>"; */
}
}
}
?>
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>
|
Замечу, что я даже не программист...