Управление свойствами ресурсов через родителя
Здравствуйте. Скажите пожалуйста, как можно изменить, допустим, шаблон у ресурса через его родителя?
Опишу подробнее, что имею ввиду:
У категории есть TV
Параметры вывод:
Список(множественный выбор)
Возможные значения:

Теперь же у выбраных ресурсов должен изменятся шаблон с 3 на 4, допустим, и обратно, если ресурс удалить из списка, то он должен вернуться с шаблона 4 на шаблон 3.
Понимаю что это это необходимо реализовать через плагин, который будет делать это при сохранении родителя. Подскажите пожалуйста примерный код такого плагина для дальнейшего колупания, к сожалению знания не позволяют написать самому с нуля
Опишу подробнее, что имею ввиду:
У категории есть TV
Параметры вывод:
Список(множественный выбор)
Возможные значения:
@SELECT `pagetitle`, `id` FROM `[[+PREFIX]]site_content` WHERE `template` IN (3) AND `parent` = "[[+id]]"Это позволяет в его значения получить вложенные в эту категорию ресурсы
Теперь же у выбраных ресурсов должен изменятся шаблон с 3 на 4, допустим, и обратно, если ресурс удалить из списка, то он должен вернуться с шаблона 4 на шаблон 3.
Понимаю что это это необходимо реализовать через плагин, который будет делать это при сохранении родителя. Подскажите пожалуйста примерный код такого плагина для дальнейшего колупания, к сожалению знания не позволяют написать самому с нуля
Комментарии: 2
Получилось написать сниппет для теста, теперь буду делать плагин, вот код — навернякак кривой и избыточный, но знаний пока мало, может кто-нибудь сможет поправить:
<?php
$page_id = 1623; //id страницы категории
$workTv = 62; //id tv списка
//Все дети в категории
$docs = $modx->getCollection('modResource', array(
'parent' => $page_id
));
// Если дети есть
if($docs){
$arrAllchildren = []; //Массив с id детей в категории
foreach($docs as $doc){
$id = $doc->get('id'); //Получаем id ребенка
array_push($arrAllchildren, $id); //добавляем id в конец массива
};
}else{
return;
}
//Получаем объект tv детей категории
$outStock = $modx->getObject('modTemplateVarResource', array(
'tmplvarid' => $workTv,
'contentid' => $page_id
));
// Если TV выбраны
if ($outStock) {
$stringValue = $outStock->get('value'); //Получаем строку id выбраных в tv детей категории
$arr = explode("||", $stringValue); //Массив с id tv выбранных в категории
$dif = array_diff($arrAllchildren, $arr); //сравниваем массивы и записываем отличающиеся id
foreach($arr as $k){
$res = $modx->getObject('modResource',$k);
echo "($k)";
$res->set('template', 21);
$res->save();
}
foreach($dif as $k){
$res = $modx->getObject('modResource',$k);
echo "[$k]";
$res->set('template', 3);
$res->save();
}
}else{
return;
};
Рабочий плагин, вроде проблем нет
<?php
switch($modx->event->name){
case 'OnDocFormSave':
$currency_resTpl = $resource->get('template'); //Шаблон текущего ресурса
$cat_template = 2;//Шаблон категории
// Если шаблоны совпадают
if($currency_resTpl == $cat_template){
$currency_id = $resource->get('id'); // получаем id текущего ресурса
$listTv = 62; //id tv списка
$activTpl = 21;//id активного шаблона, выбранного в TV
$passivTpl = 3;//id пассивного шаблона, присваеваемого ресурсу, если он не выбран в tv у родителя
//Все дети в категории
$docs = $modx->getCollection('modResource', array(
'parent' => $currency_id
));
// Если дети есть
if($docs){
$arrAllchildren = []; //Массив с id детей в категории
foreach($docs as $doc){
$id = $doc->get('id'); //Получаем id ребенка
array_push($arrAllchildren, $id); //добавляем id в конец массива
};
}else{
return;
}
//Получаем объект tv детей категории
$outStock = $modx->getObject('modTemplateVarResource', array(
'tmplvarid' => $listTv,
'contentid' => $currency_id
));
// Если TV выбраны
if ($outStock) {
$stringValue = $outStock->get('value'); //Получаем строку id выбраных в tv детей категории
$arr = explode("||", $stringValue); //Массив с id tv выбранных в категории
$dif = array_diff($arrAllchildren, $arr);
foreach($arr as $k){
$res = $modx->getObject('modResource',$k);
$res->set('template', $activTpl);
$res->save();
}
foreach($dif as $k){
$res = $modx->getObject('modResource',$k);
$res->set('template', $passivTpl);
$res->save();
}
}else{ //Если невыбран ни один ребенок
foreach($arrAllchildren as $k){
$res = $modx->getObject('modResource',$k);
$res->set('template', $passivTpl);
$res->save();
}
}
}
}
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.