Typo3 容器循环
我正在使用优秀的DCE扩展,并希望使用每个子级的字段在容器中通过子DCE循环两次 在伪代码中,如下所示: 容器模板:Typo3 容器循环,typo3,fluid,dce,Typo3,Fluid,Dce,我正在使用优秀的DCE扩展,并希望使用每个子级的字段在容器中通过子DCE循环两次 在伪代码中,如下所示: 容器模板: <div id="foo"> <f:for each="{dces}" as="dce"> {dce.fields.title} </f:for> </div> <div id="bar"> <f:for each="{dces}" as="dce"> {dce.fields.bla} <
<div id="foo">
<f:for each="{dces}" as="dce">
{dce.fields.title}
</f:for>
</div>
<div id="bar">
<f:for each="{dces}" as="dce">
{dce.fields.bla}
</f:for></div>
我如何才能做到这一点?我已经用Viewhelper解决了这个问题:
class DcevalViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper {
/**
* @param ArminVieweg\Dce\Domain\Model\Dce object
*
* @return array
*
*/
public function render($dce) {
$contentObject = $dce->getContentObject();
$temp = GeneralUtility::xml2array($contentObject['pi_flexform']);
$temp = $temp['data']['sheet.tabGeneral']['lDEF'];
foreach($temp as $key=>$val) {
preg_replace( "/\r|\n/", "", $val['vDEF'] );
$dcedata[substr($key,9)]=$val['vDEF'];
}
$dcedata['uid']=$contentObject['uid'];
return $dcedata;
}
}
在Containertemplate中,不需要子模板
{namespace dce=ArminVieweg\Dce\ViewHelpers}
{namespace tom=Mediagmbh\Tomediavh\ViewHelpers}
<f:layout name="DefaultContainer" />
<f:section name="main">
<div id="foo">
<ul>
<f:for each="{dces}" as="dce">
<f:alias map="{field:'{tom:Dceval(dce:dce)}'}">
<li>{field.header}</li>
</f:alias>
</f:for>
</ul>
</div
<div id="bar">
<f:for each="{dces}" as="dce">
<f:alias map="{field:'{tom:Dceval(dce:dce)}'}">
<div><f:format.raw>{field.text}</f:format.raw></div>
</f:alias>
</f:for>
</div>
</div>
</f:section>
{dces.0.get.title}就可以了。在DCE容器定义中,只需使用 {dce.get.title} {dce.get.bla}
这与OP的问题中的代码完全相同。@Connell.O'Donnell:不,不是。我不确定这些差异是否相关。而且,对于贡献者来说,突出显示它们是很有用的,这样就清楚了。但事实上,代码是不同的。@Connell.O'Donnell:这绝对不是一回事。检查DCE容器的工作代码是{DCE.get.title},在正常的DCE模板中,不在DCE容器中,我们必须使用{DCE.fields.title}对不起,我的错误