Импорт узла с другого сайта
Периодически бывает задача скопировать каталог с одного сайта на другой. Если сайт «чистый», то можно пойти копированием таблиц. А вот если на сайте реципиенте есть уже какая-то структура, если ID идут вразнобой, то тут возникают сложности. Для облегчения жизни написал вот такую вот канитель (не самый оптимизированный вариант, но рабочий).
На сайте доноре в корне создаем файл export.php
Здесь указываем $parents — корневой родитель, который мы качаем, ТВшки, ну и далее по вкусу.
На сайте реципиенте в корне создаем файлик import.php
Здесь в 11-ой строке указываем сайт, с которого будем копировать, в 14-ой указываем корневой айдишник на сайте доноре, в 15-ой значение — в какой ресурс копировать.
Проверил на нескольких сайтах — работает.
По окончанию работ не забудьте снести эти файлики)
На сайте доноре в корне создаем файл export.php
<?php
define('MODX_API_MODE', true);
define('IN_MANAGER_MODE', false);
include_once("index.php");
$modx->db->connect();
if (empty ($modx->config)) {
$modx->getSettings();
}
$modx->runSnippet('DocLister',array('parents'=>0,'showParent'=>1,'display'=>-1,'tvPrefix'=>'','tvList'=>'mages,price','depth'=>28,'prepareWrap'=>function($data){echo '$docs = '.var_export($data,1).';';exit();}));
Здесь указываем $parents — корневой родитель, который мы качаем, ТВшки, ну и далее по вкусу.
На сайте реципиенте в корне создаем файлик import.php
<?php
set_time_limit(0);
define('MODX_API_MODE', true);
define('IN_MANAGER_MODE', false);
include_once("index.php");
$modx->db->connect();
if (empty ($modx->config)) {
$modx->getSettings();
}
include_once(MODX_BASE_PATH."assets/lib/MODxAPI/modResource.php");
$file = file_get_contents('https://you_site.com/export.php');
eval($file);
$docs = $docs['docs'];
$start = 0;
$parents[$start] = 33523;
function form_tree($mess){
if (!is_array($mess)) {
return false;
}
$tree = array();
foreach ($mess as $value) {
$tree[$value['parent']][] = $value;
}
return $tree;
}
function build_tree($cats, $parent_id){
global $modx,$parents;
if (is_array($cats) && isset($cats[$parent_id])) {
foreach ($cats[$parent_id] as $cat) {
$id = $cat['id'];
unset($cat['id']);
/*
* здесь можем подменить шаблончики и т.д.
*/
if ($parents[$parent_id]) $cat['parent'] = $parents[$parent_id];
$doc = new modResource($modx);
$doc->create($cat);
$parents[$id] = $doc->save(false, false);
build_tree($cats, $id);
}
} else {
return false;
}
return $tree;
}
$tree = form_tree($docs);
build_tree($tree, $start);
echo 'Import site complete!';
Здесь в 11-ой строке указываем сайт, с которого будем копировать, в 14-ой указываем корневой айдишник на сайте доноре, в 15-ой значение — в какой ресурс копировать.
Проверил на нескольких сайтах — работает.
По окончанию работ не забудьте снести эти файлики)
0 комментариев