在Snippet中抓取数据后在CHunk中使用TV

时间:2014-10-04 00:04:19

标签: php modx modx-revolution

我正在获取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中的属性?

问候

2 个答案:

答案 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/getting-started/using-your-xpdo-model/retrieving-objects/getcollectiongraph

实际上有一个例子可以让你的电视。

以下是另一个展示如何构建标准的示例:

http://rtfm.modx.com/xpdo/2.x/class-reference/xpdo/xpdo.getcollectiongraph