Николай Ланец
23 дек. 2014 г., 15:02

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');
Собственно, всё.
Ого круто, даже не подумал о таком решении) Таким образом можно любую динамическую информацию совать в ТВ)
Именно так :) Это уже не говоря о том, что можно вообще свои собственные TV-шки создавать. Когда-нибудь доберусь и напишу про это статью.
Очень жду подобную статью.)
Вместо @EVAL можно использовать @SELECT
@SELECT pagetitle,id FROM modx_site_content WHERE parent=[[+id]]

Добавить комментарий