MODX. Связанные элементы, несколько способов

Для организации элементарной привязки элементов друг к другу, понадобиться создать дополнительное поле, назовем его «Связи».

Способ № 1, простейший:

устанавливаем полю тип «Список ресурсов»

Недостатки: нельзя заполнять поле вводом названия, обязательно придется выбирать ресурс из списка мышкой.

Способ № 2:

устанавливаем полю тип «Список (множественный выбор)», в поле «Возможные значения» пишем

@SELECT pagetitle,id FROM [[+prefix]]site_content WHERE (нужное условие, например: parent=5; или isfolder=0;)

Недостатки: нельзя создать сложные условия выборки.

Способ № 3, используем сниппет:

устанавливаем полю тип «Список (множественный выбор)», в поле «Возможные значения» пишем

@EVAL return $modx->runSnippet(’listBoundResources’,array(’parent’ => 5));

Создаем сниппет listBoundResources, в котором пишем условия, например:

<?php
$id = $modx->getOption('parent',$scriptProperties);
$where = array(
    'published' => 1,
    'isfolder' => 0,
    'context'=>'web',
);

$ids = $modx->getChildIds($id, 5, $where);
$docs = $modx->getCollection('modResource',  array(
    'id:IN' => $ids
));

foreach ($docs as $res) {
    $out[]= $res->get('pagetitle').'=='.$res->get('id');
}

$out = implode("||",$out);
return $out;