我正在获取ID为3的页面。此页面有3个子页面。所以,在ID为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时,我无法使用[[*MyVar]]
访问Template Variabel。我必须告诉getCollection抓住它们吗?或者我是否必须创建一个新查询以获取模板变量并将其提供给getChunk中的属性?
问候
答案 0 :(得分:1)
在这种情况下你不能在块中使用[[* 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 classes的常规选项。
答案 1 :(得分:0)
你想要做的是使用getCollectionGraph:
实际上有一个例子可以让你的电视。
以下是另一个展示如何构建标准的示例:
http://rtfm.modx.com/xpdo/2.x/class-reference/xpdo/xpdo.getcollectiongraph