您如何在TYPO3Fluid AbstractViewHelper中访问THEN和ELSE标记?

问题描述 投票:0回答:1

[TYPO3中有一个新的AbstractViewHelper(TYPO3Fluid \ Fluid \ Core \ ViewHelper \ AbstractViewHelper),我尝试使用它为我的项目实现一个非常简单的InArrayViewHelper。

问题是,如果您想根据render()访问thenelse子标签,则应使用[C0

所以我做类似的事情

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(); } } } renderThenChild。正确的方法是这样做。我可以不使用\ TYPO3 \ CMS \ Fluid \ Core \ ViewHelper \ AbstractConditionViewHelper来做到吗?

php typo3 fluid typo3-9.x
1个回答
0
投票

首先:如果希望ViewHelper成为ViewHelper的条件,则应该将renderElseChild而不是TYPO3Fluid\Fluid\Core\ViewHelper\AbstractConditionViewHelper子类化。前者包含一系列辅助方法,例如TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper(呈现renderThenChild节点或返回f:then自变量,以存在者为准)。

第二:访问tags(与呈现标记或编译后的执行的闭包相反)只能在模板尚未编译时发生,并且可以通过覆盖接收到的then来实现public static function postParseEvent允许您使用ViewHelperNode读取子节点和/或通过getChildNodes添加其他子节点。

基于addChildNode并使用手动注册的TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelperthen参数的实现也可以工作,但是如果不复制else中的几乎所有辅助方法,则将不支持像f:then这样的子节点。>

所以答案是:是的,您可以在没有TYPO3Fluid\Fluid\Core\ViewHelper\AbstractConditionViewHelper的情况下做到这一点-但您不应该这样做。

© www.soinside.com 2019 - 2024. All rights reserved.