DCE 容器循环

Posted

技术标签:

【中文标题】DCE 容器循环【英文标题】:DCE Container Loop 【发布时间】:2017-08-19 08:18:06 【问题描述】:

我正在使用出色的 DCE 扩展,并希望使用每个 Child 的字段通过 Child-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
</f:for></div>

我该怎么做?

【问题讨论】:

【参考方案1】:

我已经用 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 中(不需要 Child 模板)

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>

【讨论】:

【参考方案2】:

在 DCE 容器定义中,只需使用

<div id="foo">
    <f:for each="dces" as="dce">
        dce.get.title
    </f:for>
</div>
<div id="bar">
    <f:for each="dces" as="dce">
        dce.get.bla
    </f:for>
</div>

模板中什么都没有(DCE 定义的第二个选项卡)。

【讨论】:

这与 OP 的问题中的代码完全相同。 @Connell.O'Donnell:不,不是。我不确定这些差异是否相关。对贡献者来说,突出显示它们会很有用,这样就很清楚了。但实际上,代码是不同的。 @Connell.O'Donnell:这绝对不是一回事。检查 DCE 容器的工作代码是 dce.get.title 并且在“普通”DCE 模板(不在 DCE 容器中)我们必须使用 dce.fields.title 对不起,我的错误

以上是关于DCE 容器循环的主要内容,如果未能解决你的问题,请参考以下文章

面试题

如何在Excel Source的foreach循环容器中动态传递excel连接字符串?

使用循环或 List.generate 时如何获取容器宽度?

为啥基于范围的 for 循环不修改容器元素?

Cloud Run Flask API 容器运行 shutit 进入休眠循环

迭代 const 容器时编译器会展开“for”循环吗?