Hauptmenü

Werkzeuge

Kategorien

Archiv

AbstractConditionViewHelper in TYPO3 11

Erstellt in Extension Entwicklung, TYPO3 am 3. September 2023 vom Daschmi

Ich habe mit TYPO3 einen „inArray“ ViewHelper verwendet, dieser sah in TYPO3 10 wie folgt aus:

class InArrayViewHelper extends \TYPO3Fluid\Fluid\Core\ViewHelper\AbstractConditionViewHelper {  
  
	public function initializeArguments() {  
  
		parent::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();  
	
		}  

	}

}

Genutzt habe ich ihn zum Beispiel in einem EXT:news Template wie folgt:

<w:inArray haystack="{1:'4',2:'5',3:'6'}" needle="{settings.templateLayout}">  
	<f:then>
		<!-- Template Layout = 4 oder 5 oder 6 -->
	</f:then>	
	<f:else>
		<!-- Sonstiges Template Layout -->
	</f:else>
</w:inArray>

das funktioniert auch noch in TYPO3 11, allerdings nur bis man den Cache aktiviert und die Seite aus dem Cache geladen wird. Wenn man aber statt der render Methode die evaluateCondition Methode überschreibt funktioniert es.

class InArrayViewHelper extends \TYPO3Fluid\Fluid\Core\ViewHelper\AbstractConditionViewHelper {  
  
	public function initializeArguments() {  
  
		parent::initializeArguments();  
  
		$this->registerArgument('haystack', 'mixed', 'View helper haystack ', TRUE);  
		$this->registerArgument('needle', 'string', 'View helper needle', TRUE);  
  
	}  
  
	protected static function evaluateCondition($arguments = null): bool {  
  
		$needle = $arguments['needle'];  
		$haystack = $arguments['haystack'];  
		  
		if (!is_array($haystack)) {  
		  
			return false;  
		  
		}  
		  
		if (in_array($needle, $haystack)) {  
		  
			return true;  
		  
		} else {  
		  
			return false;  
		  
		}  
  
	}  
  
}