typo3 流体模板:cObject 在 viewhelper 中的条件太多
typo3 fluid template: cObject within too many conditions in viewhelper
我需要在表单中选择一个小时,因此我创建了一个自定义视图助手,它仅将分钟四舍五入为 5 的倍数。
在 setup.ts 我宣布时间;
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 但我可以直接在库中格式化和操作时间。
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;
}
}
您始终可以通过 html 语法使用 f:if
条件
<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>
您没有说明您使用的是哪个版本的 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}" />
我需要在表单中选择一个小时,因此我创建了一个自定义视图助手,它仅将分钟四舍五入为 5 的倍数。 在 setup.ts 我宣布时间;
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 但我可以直接在库中格式化和操作时间。
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;
}
}
您始终可以通过 html 语法使用 f:if
条件
<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>
您没有说明您使用的是哪个版本的 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}" />