Как скопировать родителя вместе с детьми и сохранить при этом alias и pagetitle?
Приветствую друзья! Подскажите есть ли способ в MODX REVO как сопировать ресурс вместе с его детьми и что бы alias и pagetitle у новых ресурсов скопировались тоже? А то при копировании, pagetitle у всех становиться в начале строки добавляет Копия ресурса… и дальше уже наш pagetitle :( прям беда. И у всех детей тоже так же заголовок, и алиасы тоже меняются.
Комментарии: 14
Можно простенький плагин накатать:
После зайти в скопированный ресурс и сохранить его, это прибьёт у всех дочерних слово Копия в алиасе и заголовке. Ну или плюс минус тот же код в Console запускать.
<?php
if ($modx->event->name=="OnDocFormSave"){
$id = $resource->get('id');
$pages = $modx->getIterator('modResource', array('parent' => $id));
foreach ($pages as $p) {
$p->set('pagetitle', str_replace('Копия ', '', $p->get('pagetitle')) );
$p->set('alias', str_replace('kopiya-', '', $p->get('alias')) );
$p->save();
}
return;
}
После зайти в скопированный ресурс и сохранить его, это прибьёт у всех дочерних слово Копия в алиасе и заголовке. Ну или плюс минус тот же код в Console запускать.
Спасибо, но алиас меняет полностью, если заголовок можно реально вырезать слово Копия, то если у ресурса был blog алиас а заголовок Блог о садоводстве, то в копии будет алиас blog-o-sadovodstve :( короче удаление копия не решает проблему
Вы сможете создать ресурс с таким же алиасом только в том случае, если у вас включены вложенные урлы и копировать вы будете в другого родителя. В противном случае не получится сохранить ресурс с таким же алиасом.
Вообще такие вещи лучше делать через процессор, но процессор resource/dublicate не предусматривает указание нового родителя. А почему вам нужно сохранить алиас?
Вообще такие вещи лучше делать через процессор, но процессор resource/dublicate не предусматривает указание нового родителя. А почему вам нужно сохранить алиас?
Ну тогда можно доработать скрипт, и вырезать нужную фразу из алиаса. Изначально же речь шла о копии :)
да алиас совсем другой в копии, я же привел пример
Копии в том же родителе создать хотите? Вложенные урлы включены?
Вложенные включены, а как создать НЕ в этом родителе? При копировании он по умолчанию появляется рядом.
Процессором только в этом же родителе, но тогда alias-ы будут другие. Я вам уже три раза один вопрос задал, но так и не увидел ответа. Зачем вам нужно сохранить алиасы?
Можно использовать процессор дубликата
$options = [
"id" => 18, // Ресурс с потомками который копируем
"name" => "Новый ресурс", // Новое название
"prefixDuplicate" => false,
"published_mode" => "preserve",
"duplicate_children" => true
];
$result = $modx->runProcessor('resource/duplicate', $options);
Это как снипет запустить на странице?
В Console можно запускать
работает, pagetitle не меняет хотя бы, но алиасы все равно меняет, новые прописывает, можно алиасы сохранить как то?
ну тут тогда код написать выборки и создания на основания выборки, в целом он простой, логика такая:
1. указываем id ресурса с потомками в переменную
2. сначала получаем его(ресурс родитель) и копируем через resource/create передавая процессору через toArray весь массив
3. После получаем потомков и в цикле через процессор resource/create создаем потомков уже у нового полученного ресурса.
если вам не нужно копировать сам родитель то второй шаг не нужен, т.е. просто получить потомки и создать такие же в новом родителе через resource/create, передавая через toArray весь массив, заменяя parent на нужный
1. указываем id ресурса с потомками в переменную
2. сначала получаем его(ресурс родитель) и копируем через resource/create передавая процессору через toArray весь массив
3. После получаем потомков и в цикле через процессор resource/create создаем потомков уже у нового полученного ресурса.
если вам не нужно копировать сам родитель то второй шаг не нужен, т.е. просто получить потомки и создать такие же в новом родителе через resource/create, передавая через toArray весь массив, заменяя parent на нужный
Понял, спасибо, думал есть готовое решение. Значит нужно разрабатывать свое решение.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.