我有以下代码,遗憾的是在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++;
};
答案 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++;
}