Tutorials

Einige nützliche Hilfen und Code-Schnipsel, die ich immer wieder benötige und deshalb hier für alle sammle.

Zurück zur Übersicht

TYPO3: in_array ViewHelper

#Tutorials#TYPO3#PHP

Da in Fluid Standard-ViewHelper leider der in_array ViewHelper fehlt, habe ich mir diesen schnell selbst geschrieben. Hier ist der ViewHelper samt Beispiel zur Benutzung.

<?php
namespace Vendor\Ext\ViewHelpers;

class InArrayViewHelper extends \TYPO3\CMS\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);
  }

  // php in_array viewhelper
  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();
    }   
  }
}
Benutzung geht dann beispielsweise so:
{namespace test=Vendor\Ext\ViewHelpers}
<test:inArray haystack="{week}" needle="mittwoch">
  <f:then>
    in array
  </f:then>
  <f:else>
    not in array
  </f:else>
</test:inArray>


// inline
{test:inArray(haystack:'{week}',needle:'mittwoch',then:'in array',else:'')}

Kommentare

  • Ines
    Danke! Die Version für 10.4 funktioniert auch mit TYPO3 11.5.
    Antworten
  • Smair Testing
    Thanks! Here is an updated version for Typo3 10.4




    namespace MyVendor\MyExtension\ViewHelpers;

    use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractConditionViewHelper;


    class InArrayViewHelper extends AbstractConditionViewHelper
    {
    public function initializeArguments()
    {
    parent::initializeArguments();
    $this->registerArgument('haystack', 'mixed', 'View helper haystack. Needs to be an array of strings', true);
    $this->registerArgument('needle', 'string', 'View helper needle. Needs to be a string!', true);
    }

    /**
    * @param array $arguments
    * @return bool
    */
    protected static function evaluateCondition($arguments = null)
    {
    $needle = (string)$arguments['needle'];
    $haystack = $arguments['haystack'];

    if (!is_array($haystack)) {
    return false;
    }

    if (in_array($needle, $haystack)) {
    return true;
    } else {
    return false;
    }
    }
    }
    Antworten
  • Nodens
    Vielen Dank funktioniert auch in 9.5.x auf Anhieb. Hat mit Zeit gespart, Danke!
    Antworten
  • Michael
    Super, vielen Dank! Inline muss es allerdings heißen:
    {test:inArray(haystack:'{week}',needle:'mittwoch',then:'in array',else:'')}
    Antworten

Hinterlasse einen Kommentar

Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Kommentar wird gespeichert
Danke für deinen Kommentar! Sobald er freigegeben wurde erscheint er hier.