Fi1osof 23 декабря 2014 3 5
Топик пишется в ответ на поднятую тему здесь.

Кратко задача: при редактировании документа 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');
Собственно, всё.
5 комментариев
guru881
guru88 29 декабря 2014г в 09:19 #
Ого круто, даже не подумал о таком решении) Таким образом можно любую динамическую информацию совать в ТВ)
Fi1osof1
Fi1osof 29 декабря 2014г в 14:20 #
Именно так :) Это уже не говоря о том, что можно вообще свои собственные TV-шки создавать. Когда-нибудь доберусь и напишу про это статью.
К
Каминари 13 января 2015г в 14:02 #
Очень жду подобную статью.)
K
Kyrt_God 12 мая 2015г в 10:25 #
Вместо @EVAL можно использовать @SELECT

@SELECT pagetitle,id FROM modx_site_content WHERE parent=[[+id]]
Fi1osof1
Fi1osof 12 мая 2015г в 10:48 #
Засчитано.
Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.