TYPO3 (TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper) 中有一个新的 AbstractViewHelper,我尝试用它为我的项目实现一个非常简单的 InArrayViewHelper。问题是,如果您想根据https://docs.typo3.org/m/typo3/book-extbasefluid/master/en-us/8-Fluid/8-developing-a-render()访问then或子标签,您应该使用custom-viewhelper.html#renderstatic-methodelse所以我做了类似的事情<?phpnamespace 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(); } }}好吧,但他们搬走了renderThenChild并renderElseChild在那里。这样做的正确方法是什么。我可以不用 \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractConditionViewHelper 吗?
1 回答
桃花长相依
TA贡献1860条经验 获得超8个赞
首先:如果你想让你的 ViewHelper 成为一个条件 ViewHelper 你应该子类化TYPO3Fluid\Fluid\Core\ViewHelper\AbstractConditionViewHelper
,而不是TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper
。前者包含辅助方法的集合,例如renderThenChild
(呈现节点f:then
或返回then
参数,以存在者为准)。
第二:访问标签(与呈现标签或编译执行的闭包相反)只能在模板尚未编译时发生,并且可以通过覆盖public static function postParseEvent
which receives whichViewHelperNode
允许您读取子节点来实现通过.withgetChildNodes
和/或添加额外的子节点addChildNode
。
基于TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper
和使用手动注册then
和else
参数的实现也可以工作,但不支持子节点,例如f:then
不复制几乎所有来自TYPO3Fluid\Fluid\Core\ViewHelper\AbstractConditionViewHelper
.
所以答案是:是的,你可以不用AbstractConditionViewHelper
- 但你不应该这样做。
- 1 回答
- 0 关注
- 108 浏览
添加回答
举报
0/150
提交
取消