TV-поле выпадающий список с привязкой к текущему документу.

Топик пишется в ответ на поднятую тему здесь.

Кратко задача: при редактировании документа TV-поле-список должен формироваться из списка дочерних документов (по parent = id текущего документа).

Так как стандартное поле «Список ресурсов» не годится для этого (в нем это не предусмотрено), мы будем создавать свое собственное TV-поле.

Для этого нам понадобится написать сниппет, который будет формировать список документов для селекта. Назовем его tv_resources_list. Вот его код:

<?php
$output = '';
 
$data = array(
    "Выберите из списка=="
); 

if($parent = $modx->resource->id){
    $q = $modx->newQuery('modResource');
    
    $q->where(array(
        "parent"    => $parent,
    ));
    
    $q->select(array(
        "modResource.id",
        "modResource.pagetitle",
    ));
    
    $s = $q->prepare();
    $s->execute();
    
    $modx->log(1, $q->toSQL());
    
    while($row = $s->fetch(PDO::FETCH_ASSOC)){
        $data[] = "{$row['pagetitle']}=={$row['id']}";
    }
} 

$output = implode("||", $data);

return $output;

После этого создаем новое TV-поле с типом Список, а в поле Возможные значения прописываем @EVAL return $modx->runSnippet('tv_resources_list');.

Собственно, всё.