按条件

时间:2016-01-11 12:30:38

标签: typo3 fluid

在我的流体模板中,我有:

<f:form.textfield
    id="{propertyName}"
    property="{propertyName}"
    value="{value}"
    placeholder=""
    class="form-control"
/>

我想为&#34;值&#34;添加条件。类似的东西:

<f:form.textfield
    id="{propertyName}"
    property="{propertyName}"

    <f:if condition="{value}"> value="{value}" <f:if>

    placeholder=""
    class="form-control"
/>

目前我正在使用解决方法

<f:if condition="{value}">
    <f:then>
        <f:form.textfield id="{propertyName}" property="{propertyName}" value="{value}" placeholder="" class="form-control" />
    </f:then>
    <f:else>
        <f:form.textfield id="{propertyName}" property="{propertyName}" placeholder="" class="form-control" />
    </f:else>
</f:if>

但我想避免双重代码。

3 个答案:

答案 0 :(得分:0)

我认为这是不可能的。

可能的解决方案是用户定义的ViewHelper(排除原始f:form.textfield)。

Developing a custom ViewHelper

答案 1 :(得分:0)

无法将ViewHelpers嵌套在XML表示法中。但是,您可以使用内联表示法,至少在一定程度上:

<f:form.textfield
    value="{f:if(condition: '<your-condition>', then: value)}" />

是的,value属性仍会以这种方式传递,但值为null。请注意,如果提交的值为空,则<f:form.textfield>视图助手会自动省略value属性(请参阅the source code of TYPO3\CMS\Fluid\ViewHelpers\Form\TextfieldViewHelper, line 74ff.):

public function render($required = false, $type = 'text')
{
    // [...]

    $value = $this->getValueAttribute();

    if ($value !== null) {
        $this->tag->addAttribute('value', $value);
    }

在简单的情况下,您只想在value属性为空时省略它,只需始终传递value="{value}"就足够了。如果值为null,则该属性不会包含在呈现的<input>标记中。

答案 2 :(得分:0)

你可以这样做:

<f:form.textfield 
    name="{data.name -> f:format.urlencode()}"   
    type="{f:if(then: '{data.inputtyp}', else: 'text', condition: '{data.inputtyp}')}"
    class="{f:if(then: '{data.class}', else: '', condition: '{data.class}')}"
    value="{f:if(then: '{data.populate}', else: '', condition: '{data.populate}')}"
    placeholder="{f:if(then: '{data.placeholder}', else: '', condition: '{data.placeholder}')}" />