在TYPO3中有一个新的AbstractViewHelper(TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper),我试图用它来实现一个非常简单的InArrayViewHelper到我的项目中。
问题是,如果您想访问然后
或其他
子标记,您应该使用渲染()
https://docs.typo3.org/m/typo3/book-extbasefluid/master/en-us/8-Fluid/8-developing-a-custom-viewhelper.html#renderstatic-method
所以我做了一些类似的事情
<?php
namespace Vendor\Project\ViewHelpers;
use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
class InArrayViewHelper extends AbstractViewHelper {
//use CompileWithRenderStatic;
public function initializeArguments() {
$this->registerArgument('haystack', 'mixed', 'View helper haystack ', TRUE);
$this->registerArgument('needle', 'string', 'View helper needle', TRUE);
}
public function render() {
$needle = $this->arguments['needle'];
$haystack = $this->arguments['haystack'];
if(!is_array($haystack)) {
return $this->renderElseChild();
}
if(in_array($needle, $haystack)) {
return $this->renderThenChild();
} else {
return $this->renderElseChild();
}
}
}
但是他们删除了那里的renderthechild
和rendereschild
。正确的方法是什么。我可以不使用\TYPO3\CMS\Fluid\Core\ViewHelper\AbstractConditionViewHelper就完成它吗?
首先:如果你希望你的ViewHelper是一个条件ViewHelper,你应该子类化TYPO3Fluid\Fluid\Core\ViewHelper\Abstract条件ViewHelper
,而不是TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper
。前者包含一系列辅助方法,例如renderThenchild
(它呈现f: so
节点或返回so
参数,以存在者为准)。
第二:对标签的访问(与呈现标签或编译执行的闭包相反)只能在模板尚未编译时发生,并且可以通过覆盖接收ViewHelperNode
它允许您使用getChildNodes
读取子节点和/或通过addChildNode
添加其他子节点。
基于TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper
并使用手动注册的和
else
参数的实现也可以工作,但是如果不复制TYPO3Fluid\Fluid\Core\ViewHelper\AbstractConditionViewHelper
中的几乎所有辅助方法,将不支持子节点,如f:then
。
因此答案是:是的,您可以在不使用AbstractConditionViewHelper的情况下完成,但您不应该这样做。
问题内容: MySQL / MSSQL可以在查询中使用整齐的内联if函数,以检测空值,如下所示。 我现在遇到的问题是该代码在Oracle数据库上运行不安全,因为它似乎不支持此内联if语法。 在Oracle中是否有等效功能? 问题答案: 使用标准的COALESCE函数: 或使用Oracle自己的NVL函数执行相同的操作。
if-then语句后面可以跟一个可选的else语句,该语句在布尔表达式为false时执行。 语法 (Syntax) if-then-else语句的语法是 - if condition then S1 else S2; 其中, S1和S2是不同的陈述。 Please note that the statement S1 is not followed by a semicolon 。 在if-th
If语句后面可以跟一个可选的Else语句,该语句在布尔表达式为false时执行。 语法 (Syntax) VB.Net中If ... Then ... Else语句的语法如下 - If(boolean_expression)Then 'statement(s) will execute if the Boolean expression is true Else 'statement(
除非后面的语句后面跟一个可选的else语句,该语句在布尔表达式为true时执行。 使用unless-then ... else语句,我们可以在一行中编写除非... else语句。 语法 (Syntax) 以下是CoffeeScript中的unless-then else语句的语法。 unless expression <b>then</b> Statements (for false) else
if-then语句后跟一个可选的else语句,该语句在布尔表达式为false时执行。 使用if-then ... else语句,我们可以在一行中编写if ... else语句。 语法 (Syntax) 以下是CoffeeScript中if-then...else语句的语法。 if expression <b>then</b> Statements (for true condition) else
if… then语句后面可以跟一个可选的else statement,该else statement,在逻辑表达式为false时执行。 语法 (Syntax)> if… then… else语句的基本语法是 - if (logical expression) then statement(s) else other_statement(s) end if 但是,如果给