0

我需要在表单中选择一个小时,所以我创建了一个自定义视图助手,它只将分钟四舍五入到 5 的倍数。在 setup.ts 我 decalare 时间;

lib.time = TEXT
lib.time {
    data = date:H:i
}

在模板中我调用 cObject;

<nr:time value="{f:cObject(typoscriptObjectPath: 'lib.time')}" />

我也尝试过内联哪个有效(包装在随机 ViewHelper 中);

<f:link.action action="form">{nr:time(value: '{f:cObject(typoscriptObjectPath: \'lib.time\')}')}</f:link.action>

现在我到达了我需要它的地方,它有一个条件,在这里我没有找到任何有效的语法......;

<f:form.textfield property="date" class="date"
        value="{f:if(condition: ticket.time, then: '{ticket.time}', else: '{f:cObject(typoscriptObjectPath: \'lib.time\')}')}" />

任何知道一个好的解决方案的人,也许我一开始就完全错误,也许不需要viewhelper,但我可以直接在lib中格式化和操纵时间。

ps:这是 TimeViewHelper.php :

class TimeViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper  {

     /**
     * @param string $value
     * @return
     */

    public function render($value) {
        $time = strtotime($value);
        $m = date('i', $time);
        $f = 5*60; // 5 minutes
        $r = $time % $f;

        $t = $time + ($f-$r);
        $new_time = ($m == 0 || $m % 5 === 0) ? $value : date('H:i', $t);
        return $new_time;
    }
}
4

2 回答 2

4

您始终可以使用f:if带有 html 语法的条件

<f:if condition="{ticket.time}">
  <f:then>
    <f:form.textfield property="date" class="date" value="{ticket.time}" />
  </f:then>
  <f:else>
    <f:form.textfield property="date" class="date" value="{f:cObject(typoscriptObjectPath: 'lib.time')}" />
  </f:else>
</f:if>
于 2016-09-06T11:24:34.233 回答
1

你没有说你使用的是哪个版本的 TYPO3 和 Fluid。此答案适用于 TYPO3v8 和 Fluid Standalone:

<f:form.textfield property="date" class="date"
    value="{ticket.time -> f:or(alternative: '{f:cObject(typoScriptObjectPath: \'lib.time\')}" />

lib.time如果您帮自己一个忙并将其分配为模板变量,则更容易表达:

<f:form.textfield property="date" class="date" value="{ticket.time ? ticket.time : variableWithDefaultTime}" />
于 2016-09-07T11:42:22.240 回答