循环中的块处理

时间:2012-10-15 17:51:24

标签: modx-revolution

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

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

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

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

2 个答案:

答案 0 :(得分: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;
显然我做了一些小的改动,所以我们可以削减&amp;粘贴&amp;看到工作,只需使主要部分适应你的代码。

答案 1 :(得分: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++;
}