2016-09-06 41 views
0

我需要在表单中放置一个小时选择,因此我创建了一个自定义视图帮助器,将分钟舍入为5的倍数。在setup.ts中设置为 typo3流体模板:在视图中太多条件下的cObject

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\')}')}" /> 

谁知道一个好的解决办法,也许我一开始完全错误的,也许不需要视图助手,但我可以在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; 
    } 
} 
+0

请避免''{ticket.time }''(用TextNodes包装对象访问器)。有关更多信息,请参阅https://vimeo.com/167666466。 –

回答

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

简单杀死了猫...当然,经过几小时的摆弄之后我再也看不到了,谢谢你! – webMan

+0

不客气! –

+0

如果答案有帮助,给这个人一些信贷和投票;) –

1

你不说你使用的TYPO3的版本,因此流体。这个答案适用于TYPO3v8和流体独立:

<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}" /> 
+0

我与typo3工作7.6.10 ...我试图直接传递它,但发现只有一种方式与静态值...这必须是一个新的选项在8 ... – webMan

+0

我再次尝试在你的vids之后内联编码...感谢你向别人解释的时间...但是我无法让它工作...'{ticket.date}'to ticket.date工程 – webMan