Typo3 流体循环特性

Typo3 Fluid Loop Through Properties

我有一个工作流体模板文件,如下所示:

<table class="my-extension" >
    <tr>
        <td>
            <f:translate key="my-extension_domain_model_appointment.translator" />
        </td>
        <td>
            {appointment.translator}
        </td>
    </tr>
        <tr>
        <td>
            <f:translate key="my-extension_model_appointment.bringtranslator" />
        </td>
        <td>
            {appointment.bringtranslator}
        </td>
    </tr>
</table>

在我的模型中,我得到了具有两个属性 translatorbringtranslator.

的 class appointment

我想遍历所有属性,因此如果我添加另一个属性,我不需要更改 html 文件中的任何内容。 所以我正在寻找这样的东西:

<f:for each="{appointmentproperty}" as="property">
<tr>
        <td>
            <f:translate key="my-extension_domain_model_appointment."+property />
        </td>
        <td>
            {appointment.property}
        </td>
    </tr>
</f:for>

谁能告诉我如何用液体做这个? (顺便说一句。我还在使用旧的 4.7.7 版本)

<f:for each="{appointments}" as="appointment">
<tr>
        <td>
            <f:translate key="my-extension_domain_model_appointment."{appointment.translator.uid} />
        </td>
        <td>
            {appointment.bringtranslator}
        </td>
    </tr>
</f:for>

如果你的约会对象还有其他对象,你可以在你的迭代中再次迭代它们:

<f:for each="{appointments}" as="appointment">
{appointment.title}
<f:for each="{appointment.translators}" as="translator">
{translator.name}
 </f:for>
</f:for>

您不能开箱即用。但是,如果您在流体 ({model.property}) 中访问模型的 属性,则在后台调用 getProperty() 方法。

因此,如果您想要一些在模型增长时自动扩展视图的神奇功能,则必须实现它。

我会给你一个例子,但还有其他方法可以做到这一点:你可以在你的模型中添加一个方法:

/**
 * @return array
 */
public function getPropertiesForTableView() {
    return array(
        'property1' => $this->getProperty1(),
        'property2' => $this->getProperty2()
    );
}

在您看来,您现在可以访问这个新的 Getter 方法:

<f:for each="{appointment.propertiesForTableView}" as="propertyValue" key='propertyName'>
    <tr>
        <td>
            <f:translate key="my-extension_domain_model_appointment.{propertyName}" />
        </td>
        <td>
           {propertyValue}
        </td>
    </tr>
</f:for>

如果添加应显示在视图中的 属性(将 属性 添加到数组),您仍然需要 "do" 一些东西。但是你不需要调整你的模板。

我想你搜索的是这样的东西:

Typo3 Extbase Guide

这里可以看到,可以给别名一个数组,然后就可以循环了。或许你可以由此得出答案?如果您找到正确的方法,请发表评论。

<f:alias map="{employees: {0: {first_name: 'Stefan', city: 'Lindlar'},1: {first_name: 'Petra', city: 'Lindlar'},2: {first_name: 'Sascha', city: 'Remscheid'},3: {first_name: 'Patrick', city: 'Bonn'},4: {first_name: 'Sven', city: 'Gummersbach'},5: {first_name: 'Andrea', city: 'Wuppertal'}}}">
   <table cellpadding="5" cellspacing="0" border="2">
  <f:groupedFor each="{employees}" as="employeesByCity" groupBy="city" groupKey="city">
     <tr>
        <th colspan="2">{city}</th>
     </tr>
     <f:for each="{employeesByCity}" as="employee">
        <tr>
           <td>{employee.first_name}</td>
           <td>{employee.city}</td>
        </tr>
     </f:for>
  </f:groupedFor>
   </table>
</f:alias>