Tv параметр с чекбоксами выборка ресурсов вложенных в дедушку
Всем привет!
У меня стоит задача вывести в админке tv параметр с чекбоксами для выбора ресурсов из дерева. Нужно взять документы с определенным шаблоном, которые вложены в родителя (фактически лежат рядом с редактируемым документом), а так же на уровень выше (родитель родителя, дедушка) ресурса.
Выборка для получения документов родителя простая.
У меня стоит задача вывести в админке tv параметр с чекбоксами для выбора ресурсов из дерева. Нужно взять документы с определенным шаблоном, которые вложены в родителя (фактически лежат рядом с редактируемым документом), а так же на уровень выше (родитель родителя, дедушка) ресурса.
Выборка для получения документов родителя простая.
@SELECT `pagetitle`,`id` FROM [[+PREFIX]]site_content WHERE `template` = 47 AND `parent`= [[+parent]]
Можно ли сюда прицепить еще ресурсы из дедушки как то? Комментарии: 7
Так попробуй:
@SELECT `Resource`.`pagetitle` as `pagetitle`,`Resource`.`id` as `id` FROM [[+PREFIX]]site_content as Resource
LEFT JOIN [[+PREFIX]]site_content as Parent ON `Resource`.`parent` = `Parent`.`id`
WHERE (`Resource`.`template` = 47 AND `Resource`.`parent`= [[+parent]]) OR (`Resource`.`template` = 47 AND `Resource`.`parent`= `Parent`.`parent`)
Дедушку что-то не видит.
Сам отвечу на свой вопрос:
Примерно вот так через pdoResource.
Примерно вот так через pdoResource.
@EVAL return $modx->runSnippet('pdoResources',array('parents'=>'[[+parent]],[[#[[+parent]].parent]]','depth'=>1,'limit'=>0,'where'=>'{"template:=":47}','tpl'=>'@INLINE [[#[[+parent]].pagetitle]] > [[+pagetitle]]==[[+id]]','outputSeparator'=>'||'));
В итоге получил список чекбоксов от документов с id 47 от родителя и от дедушки. В value у чекбоксов id документа.
Рано обрадовался. Моя конструкция почему-то выводит документы из всех уровней дерева.
--Дед
------Показать чекбоксом
----Родитель
------Документ со списком чекбоксов
------Показать чекбоксом
------Показать чекбоксом
----Родитель
------Документ со списком чекбоксов
------Показать чекбоксом
----Родитель
------Документ со списком чекбоксов
------Показать чекбоксом
В моей выборке получается, что в ресурсе где выводится список чекбоксов видны все ресурсы с шаблоном 47 изо всех родителей и деда. Хотя вроде как вот это
Что тут не так?
--Дед
------Показать чекбоксом
----Родитель
------Документ со списком чекбоксов
------Показать чекбоксом
------Показать чекбоксом
----Родитель
------Документ со списком чекбоксов
------Показать чекбоксом
----Родитель
------Документ со списком чекбоксов
------Показать чекбоксом
В моей выборке получается, что в ресурсе где выводится список чекбоксов видны все ресурсы с шаблоном 47 изо всех родителей и деда. Хотя вроде как вот это
parents'=>'[[+parent]],[[#[[+parent]].parent]]',
должно передать id текузего родителя и деда для выборки. Depth пробовал 0. Все равно.Что тут не так?
Если поменять это
В чем подвох этой конструкции
parents'=>'[[+parent]],[[#[[+parent]].parent]]'
на запись parents'=>'538,539'
выводится как надоВ чем подвох этой конструкции
[[+parent]],[[#[[+parent]].parent]]
?
Решил так:
Проблема видимо в том, что конструкции типа [[+parent]],[[#[[+parent]].parent]] обрабатываются только в шаблонах.
@EVAL
$id = $modx->resource->get('id');
$parent = $modx->resource->get('parent');
$parentResource = $modx->getObject('modResource', $id);
$grandfResource = $modx->getObject('modResource', $parent);
$parentId = $parentResource->get('parent');
$grandfId = $grandfResource->get('parent');
$pg = "$grandfId,$parentId";
return $modx->runSnippet('pdoResources',array('parents' => $pg,'depth'=>0,'limit'=>0,'where'=>'{"template:=":47}','tpl'=>'@INLINE [[#[[+parent]].pagetitle]] > [[+pagetitle]]==[[+id]]','outputSeparator'=>'||'));
Вдруг кому-то понадобится. Проблема видимо в том, что конструкции типа [[+parent]],[[#[[+parent]].parent]] обрабатываются только в шаблонах.
Финальная версия.
Прошлая давала ошибку при создании нового документа. Добавил проверку есть ли id.
Прошлая давала ошибку при создании нового документа. Добавил проверку есть ли id.
@EVAL
if(! empty( $modx->resource->get('id') ) ) {
$id = $modx->resource->get('id');
$parent = $modx->resource->get('parent');
$parentResource = $modx->getObject('modResource', $id);
$grandfResource = $modx->getObject('modResource', $parent);
$parentId = $parentResource->get('parent');
$grandfId = $grandfResource->get('parent');
$pg = "$grandfId,$parentId";
return $modx->runSnippet('pdoResources',array('parents' => $pg,'depth'=>0,'limit'=>0,'where'=>'{"template:=":47}','sortby'=>'pagetitle','sortdir'=>'ASC','tpl'=>'@INLINE [[#[[+parent]].pagetitle]] > [[+pagetitle]]==[[+id]]','outputSeparator'=>'||'));
}
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.