【问题标题】:DCE Container LoopDCE 容器循环
【发布时间】: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>

我该怎么做?

【问题讨论】:

    标签: typo3 fluid tx-dce


    【解决方案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}
      • 对不起,我的错误
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多