Массовое копирование страниц на другой домен
Материал из 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, он имеет аналогичные параметры.