1

我有以下代码,不幸的是在 foreach 循环中返回相同且未更新的块。检索到的块包含一些需要随每条记录更新的占位符。有人知道为什么吗?我使用 getObject 并处理它而不是使用 getChunk 因为第一个更快一点。

$chunkie = $modx->getObject('modChunk', array('name' => 'thumbTemplate'));
foreach ($items as $item) {

        $itemArray = $item->toArray();
        $itemArray['idx'] = $idx;
        (...)

$output .= $chunkie->process($itemArray);
$idx++;
};
4

2 回答 2

1

您需要在循环中检索块...

//$chunkie = $modx->getObject('modChunk', array('name' => 'thumbTemplate'));

foreach ($items as $item) {

    $itemArray = $item->toArray();

    $itemArray['idx'] = $idx;

    (...)

    $output .= $modx->getChunk('thumbTemplate',$itemArray);

    $idx++;

};

不确定是否也可以使用 getObject 方法来填充块占位符。[其实我有点确定你不能]

更新

尝试这个:

<?php
$output = '';

$items = array(
    'apples'=>'bananas',
    'orange'=>'orange juice',
    'peaches'=>'peach cobbler'
    );

// use a query to retrieve your actual chunk from the db
$tpl = '[[+key]] = [[+value]] <br />';


foreach ($items as $key => $value) {

    $itemArray = array(
        'key'=>$key,
        'value'=>$value
    );

    $chunkie = $modx->newObject('modChunk');
    $chunkie->setContent($tpl);

    $output .= $chunkie->process($itemArray);

};

return $output;

显然我做了一些小改动,所以我们可以剪切和粘贴并查看工作,只需将主要部分调整为您的代码。

于 2012-10-15T18:53:06.997 回答
0

我知道这是一个老问题,但我认为这将是仍然更新占位符的最快方法:

$chunkId = 12; // id of the stored chunk
$chunk = $modx->getObject('modchunk', $chunkId);

/* If you use getChunk(), the placeholders will be processed, 
   which you don't want */
$content = $chunk->getContent();

$tempChunk = $modx->newObject('modChunk');

/* This might have to go in the loop */
$tempChunk->setCacheable(false);

foreach ($items as $item) {
   $itemArray = $item->toArray();
   $itemArray['idx'] = $idx;
   // (...)
   $tempChunk->setContent($content);
   $tempChunk->setProperties($itemArray);

   $output .= $tempChunk->process();
   $idx++;
}
于 2014-02-05T07:57:37.003 回答