Массовое копирование страниц на другой домен

Материал из Umicms
Перейти к:навигация, поиск

Актуально для версии 20.
Задача: Скопировать определенные страницы и все их дочерние элементы с одного домена на другой.
Решение: Создадим в корне файловой системы сайта standalone-скрипт следующего содержания:

<?php

include_once './standalone.php';

$hierarchy = umiHierarchy::getInstance();
$domains = domainsCollection::getInstance();

/* id страниц, которые мы будем копировать */
$arr = [290, 311];
/* id корневой страницы для копирования на новом домене, 0 - корень сайта */
$rootSrc = 0;
/* id домена для копирования */
$domainId = 2;
/* копировать дочерние страницы? */
$copyChild = true;
/* счетчик скопированных страниц */
$count = count($arr);

$domain = $domains->getDomain($domainId);
$domainName = $domain->getHost();

/* считаем количество дочерних элементов */
foreach($arr as $key=>$rootPage) {
	
	$count += $hierarchy->getChildrenCount($rootPage);
	
}

/* выполняем копирование */
foreach($arr as $key=>$originalSectionId) {
	
	$copyId = $hierarchy->copyElement($originalSectionId, $rootSrc, $copyChild);
	
	/* меняем id домена для скопированных страниц */
	$hierarchy->getElement($copyId)->setDomainId($domainId);

}

echo "Для домена " . $domainName . " созданы виртуальные копии в количестве " . $count . "  штук.";

В результате выполнения данного скрипта на домене, id которого = 2, будут созданы виртуальные копии страниц с id 290 и 311, а также виртуальные копии всех их потомков.
Для того, чтобы не копировать дочерние элементы, в метод copyElement последним аргументом нужно передать false.
В данном примере используется метод copyElement, который создает виртуальные копии. Для создания обычных копий используйте метод cloneElement, он имеет аналогичные параметры.