Tv параметр с чекбоксами выборка ресурсов вложенных в дедушку

Всем привет!

У меня стоит задача вывести в админке tv параметр с чекбоксами для выбора ресурсов из дерева. Нужно взять документы с определенным шаблоном, которые вложены в родителя (фактически лежат рядом с редактируемым документом), а так же на уровень выше (родитель родителя, дедушка) ресурса.

Выборка для получения документов родителя простая.

@SELECT `pagetitle`,`id` FROM [[+PREFIX]]site_content WHERE `template` = 47 AND `parent`= [[+parent]]
Можно ли сюда прицепить еще ресурсы из дедушки как то?
Николай Артамонов
20 января 2025, 15:55
modx.pro
74
0

Комментарии: 7

Артур Шевченко
20 января 2025, 17:20
0
Так попробуй:
@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`)
Николай Артамонов
20 января 2025, 17:22
0
Сам отвечу на свой вопрос:

Примерно вот так через 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 документа.
    Николай Артамонов
    20 января 2025, 18:02
    0
    Рано обрадовался. Моя конструкция почему-то выводит документы из всех уровней дерева.

    --Дед
    ------Показать чекбоксом
    ----Родитель
    ------Документ со списком чекбоксов
    ------Показать чекбоксом
    ------Показать чекбоксом
    ----Родитель
    ------Документ со списком чекбоксов
    ------Показать чекбоксом
    ----Родитель
    ------Документ со списком чекбоксов
    ------Показать чекбоксом

    В моей выборке получается, что в ресурсе где выводится список чекбоксов видны все ресурсы с шаблоном 47 изо всех родителей и деда. Хотя вроде как вот это

    parents'=>'[[+parent]],[[#[[+parent]].parent]]',
    должно передать id текузего родителя и деда для выборки. Depth пробовал 0. Все равно.

    Что тут не так?
      Николай Артамонов
      20 января 2025, 18:16
      0
      Если поменять это

      parents'=>'[[+parent]],[[#[[+parent]].parent]]'
      на запись

      parents'=>'538,539'
      выводится как надо

      В чем подвох этой конструкции
      [[+parent]],[[#[[+parent]].parent]]
      ?
        Николай Артамонов
        21 января 2025, 09:24
        0
        Решил так:

        @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]] обрабатываются только в шаблонах.
          Николай Артамонов
          21 января 2025, 13:48
          0
          Финальная версия.

          Прошлая давала ошибку при создании нового документа. Добавил проверку есть ли 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'=>'||'));
          
          }
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    7