Задача: объединить 3 сайта с одной админкой (на одной лицензии):
- требовалось настроить многосайтовость на разных доменах
- перенести контент с двух сайтов на 1 общий
- накатить новый шаблон для интернет-магазина
1. развернуть резерные копии, перенаправить домены на них.
Важно! проверить, чтобы сайты были доступны под другими резервными доменными именами |
3. в админке добавить сайты с путями
3. мне не понадобится для нового сайта ничего, кроме папки upload, поэтому я все удалила (есть резервная копия). Папку upload я переместила в папку uploadt
4. создать файлик в корне symlink.php (взят тут)
для меня /home/c/cg#myID#/nv/public_html |
<html> <head><title>Создание ссылок на папки bitrix, local и upload</title></head> <body> <? error_reporting(E_ALL & ~E_NOTICE); @ini_set("display_errors",1); if ($_POST['path']) $path = rtrim($_POST['path'],"/\\"); else $path = '../site1/www'; if ($_POST['create']) { if (preg_match("#^/#",$path)) $full_path = $path; else $full_path = realpath($_SERVER['DOCUMENT_ROOT'].'/'.$path); if (file_exists($_SERVER['DOCUMENT_ROOT']."/bitrix")) $strError = "В текущей папке уже существует папка bitrix"; elseif (is_dir($full_path)) { if (is_dir($full_path."/bitrix")) { if (symlink($path."/bitrix",$_SERVER['DOCUMENT_ROOT']."/bitrix")) { if (symlink($path."/upload",$_SERVER['DOCUMENT_ROOT']."/upload")) { if (symlink($path."/local",$_SERVER['DOCUMENT_ROOT']."/local")) echo "Символические ссылки удачно созданы"; else $strError = 'Не удалось создать ссылку на папку local, обратитесь к администратору сервера'; } else $strError = 'Не удалось создать ссылку на папку upload, обратитесь к администратору сервера'; } else $strError = 'Не удалось создать ссылку на папку bitrix, обратитесь к администратору сервера'; } else $strError = 'Указанный путь не содержит папку bitrix'; } else $strError = 'Неверно указан путь или ошибка прав доступа'; if ($strError) echo ''.$strError.' Исходный путь: '.$full_path; } ?> <form method=post> Путь к папке, содержащей папки bitrix, local и upload: <input name=path value="<?=htmlspecialchars($path)?>"><br> <input type=submit value='Создать' name=create> </form> </body> </html> |
6. добавить сайт в админ-панели битрикс, авторизоваться
7. запустить мастер устновки решения
перенос каталога
1. у разделов добавила в новом инфоблоке пользовательское свойство UF_OLD_ID типа строка
2. скрипт, который распечатывает все разделы, как массив. Запускаю на старой версии сайта.
function PrintArray($arResult){ $i= count($arResult); echo "array(<br>"; $j = 0; foreach ($arResult as $key1=>$arItem) { $j++; $arTemp = array(); if(is_array($arItem)){ foreach ($arItem as $key => $value) { if(is_array($value)){ } else{ $arTemp[] = ' "'.$key.'" => "'.$value.'"'; } } $str = implode(',<br>', $arTemp); $str = " '".$key1."'=>array(<br>".$str."<br> )"; } else{ $str = " '".$key1."'=>'".$arItem."'"; } $str .= ($i!=$j)?',<br>':'<br>' ; echo $str; } echo ");"; } |
function GetSections($iblockId){ $arResult = array(); if(CModule::IncludeModule('iblock')){ $arFilter = array('IBLOCK_ID' => $iblockId); $arSelect = array("ID","CODE","NAME","ACTIVE","DESCRIPTION","DESCRIPTION_TYPE","PICTURE","IBLOCK_SECTION_ID","SORT"); $rsSect = CIBlockSection::GetList(array("depth_level"=>"asc"),$arFilter,false,$arSelect,array("nTopCount"=>100)); while ($arSect = $rsSect->Fetch()){ if($arSect["PICTURE"]){ $file = CFile::GetFileArray($arSect["PICTURE"]); $arSect["PICTURE"] = "/uploadt".$file["SRC"]; } $arSect["UF_OLD_ID"] = $arSect["ID"]; unset($arSect["ID"]); $arResult[] = $arSect; } } return $arResult; } |
PrintArray(GetSections($catalogIblId)); |
CModule::IncludeModule('iblock'); function AddSections($iblockId, $arSections){ $arNewSection = array(); $bs = new CIBlockSection; foreach ($arSections as $arSect) { if($arSect["IBLOCK_SECTION_ID"]>0){ $arSect["IBLOCK_SECTION_ID"] = isset($arNewSection[$arSect["IBLOCK_SECTION_ID"]]) ? $arNewSection[$arSect["IBLOCK_SECTION_ID"]] : ""; } $arSect["IBLOCK_ID"] = $iblockId; if($arSect["PICTURE"]){ $arSect["PICTURE"] = CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"].$arSect["PICTURE"]); } $id = $bs->Add($arSect); if($id>0){ $arNewSection [$arSect["UF_OLD_ID"]] = $id; } else{ echo $bs->LAST_ERROR; } } } $arSections = array( //сюда копируем масссив, который сформировали '0'=>array( "CODE" => "stoly", "NAME" => "Столы", "ACTIVE" => "Y", "DESCRIPTION" => "", "DESCRIPTION_TYPE" => "html", "PICTURE" => "/uploadt/upload/iblock/729/7290b73fc4da58255d018a2a70c98674.jpg", "IBLOCK_SECTION_ID" => "", "SORT" => "4", "DEPTH_LEVEL" => "1", "UF_OLD_ID" => "70" ), //.... тут еще много элементов ); AddSections(128,$arSections); |
5. экспортировать/импортировать товары, торг.предложения через стандартный экспорт/импорт инфоблоков. (IDшники, привязку к элементам записать в новые свойства). При загрузке указать путь для картинок /uploadt
6. на стороне нового сайта выполняем
CModule::IncludeModule('iblock'); function AddOffers($iblockId,$iblockOffersId){ $arSelect = Array("ID", "IBLOCK_ID", "PROPERTY_CML2_LINK_OLD"); $arFilter = Array("IBLOCK_ID"=>$iblockOffersId,"PROPERTY_CML2_LINK"=>false,"!PROPERTY_CML2_LINK_OLD"=>false); $res = CIBlockElement::GetList(Array("id"=>"asc"), $arFilter, false, Array("nPageSize"=>1000), $arSelect); $arOffers = array(); $arIdsOld = array(); while($arElement = $res->Fetch()){ if($arElement[ "PROPERTY_CML2_LINK_OLD_VALUE"]){ $arOffers [$arElement[ "PROPERTY_CML2_LINK_OLD_VALUE"]][] = $arElement["ID"]; $arIdsOld[$arElement[ "PROPERTY_CML2_LINK_OLD_VALUE"]] = $arElement[ "PROPERTY_CML2_LINK_OLD_VALUE"]; } } echo "<pre>"; print_r($arOffers); if(!empty($arIdsOld)){ $arSelect = Array("ID","PROPERTY_ID_OLD"); $arFilter = Array("IBLOCK_ID"=>$iblockId,"PROPERTY_ID_OLD"=>$arIdsOld); $res = CIBlockElement::GetList(Array("id"=>"asc"), $arFilter, false, Array("nPageSize"=>1000), $arSelect); while ($arElement = $res->Fetch()) { $idOld = $arElement["PROPERTY_ID_OLD_VALUE"]; if(isset($arOffers[$idOld])){ foreach ($arOffers[$idOld] as $idOfferNew) { CIBlockElement::SetPropertyValuesEx( $idOfferNew, false, array("CML2_LINK" =>$arElement["ID"])); } } print_r($arElement); } } echo "</pre>"; } AddOffers(128,130); //128 = $iblockId,130 = $iblockOffersId |