Я получаю страницу с идентификатором 3. Эта страница имеет 3 подстраницы. Итак, на странице с идентификатором 3 я вызываю фрагмент, чтобы получить такие подстраницы:
$c = $modx->newQuery('modResource');
$c->leftJoin('modTemplateVarResource', 'TV1', array('TV1.contentid = modResource.id'));
$c->leftJoin('modTemplateVar', 'TV2', 'TV1.id = TV1.tmplvarid AND TV1.`value` = "XXX"');
$c->where(array(
'parent' => 3,
'deleted' => false,
'published' => true,
'TV1.value' => 'YYY'
));
$c->limit($limit);
$c->prepare();
$output = "";
$resources = $modx->getCollection('modResource', $c);
foreach ($resources as $resource) {
$resourceArray = $resource->toArray();
$output .= $modx->getChunk($tpl, $resourceArray);
}
return $output;
Поэтому, когда я использую get chunk, я не могу получить доступ к Template Variabel с помощью [[*MyVar]]
, Должен ли я сказать getCollection, чтобы захватить их? Или мне нужно было сделать новый запрос, чтобы получить Template Vars и передать его свойствам в getChunk two?
Привет
Вы не можете использовать [[* MyVar]] в чанке для этого случая, потому что это заполнители всегда содержат значения для текущий ресурс.
Вы должны заменить заполнители в чанке на [[+ MyVar]] и Выбрать их из базы данных.
Простой способ сделать это с помощью пакета pdoTools:
$pdo = $modx->getService('pdoFetch');
$tpl = '@INLINE <p>[[+pagetitle]]</p> [[+tv.date]] [[+tv.image]]';
$output = '';
$resources = $pdo->getCollection('modResource',
// Where conditions
array(
'published' => 1,
'deleted' => 0,
),
// Other options
array(
'includeTVs' => 'date,image',
'processTVs' => true,
'tvPrefix' => 'tv.',
'limit' => 10,
)
);
foreach ($resources as $resource) {
$output .= $pdo->getChunk($tpl, $resource);
}
return $output;
Общие параметры классы pdoTools.
То, что вы хотите сделать, это использовать getCollectionGraph:
Там на самом деле есть пример, чтобы получить ваши телевизоры.
Вот еще один пример, показывающий, как построить критерии:
http://rtfm.modx.com/xpdo/2.x/class-reference/xpdo/xpdo.getcollectiongraph