Typo3流体循环通过属性

时间:2015-07-01 15:37:30

标签: loops properties typo3 fluid

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

<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>

在我的模型中,我获得了具有两个属性appointmenttranslator的课程bringtranslator

我想遍历所有属性,所以如果我添加另一个属性,我不需要在我的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版本)

3 个答案:

答案 0 :(得分:1)

你无法开箱即用。但是,如果您使用流体({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>

如果添加应在视图中显示的属性(将属性添加到数组中),仍然需要“执​​行”某些操作。但是你不需要调整你的模板。

答案 1 :(得分:0)

<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>

答案 2 :(得分:0)

我认为你会搜索这样的东西:

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>