Viewhelper: System-Kategorien auslesen.

Anwendnung

Angabe des Namesspaces im Fluid Template:

 

{namespace fhs=Fischhase\FhViewhelpers\ViewHelpers}

 

Dann kann derViewhelper aufgerufen werden:

 

{fhs:sysCategory(uid:data.uid)}

 

uid: UID des Datensatzes, der geprüft werden soll, z.B. Content-Element oder Page.
return: Array der Kategorien mit alles Feldern wie Title, Description usw.

So wird das Ergebnis direkt in die Variable "{categories}" geladen und steht Fluid zur Verfügung:

 

{fhs:sysCategory(uid:data.uid)-> f:variable(name:'categories')}

Viewhelper Quellcode

<?php
namespace Fischhase\FhViewhelpers\ViewHelpers;

use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
use TYPO3\CMS\Extbase\Utility\DebuggerUtility;  

/*
 *   {namespace fhs=Fischhase\FhViewhelpers\ViewHelpers}
 *
 *   {fhs:sysCategory(uid:data.uid)-> f:variable(name:'categories')}
 */

class SysCategoryViewHelper extends AbstractViewHelper {
    /**
     * @params integer $uid (CE)
     * @params string $tableCell (of sys_category)
     * @return CategorieName
     */

    public function initializeArguments() {
        $this->registerArgument('uid', 'integer', 'enthaelt die UID des CE', TRUE);
        $this->registerArgument('byParentId', 'bool', '', FALSE);
    }

    /**
    * @param mixed $uid
    * @param boolean $byParentId
    */

    public function render() {
        $uid = $this->arguments['uid'];
        $byParentId = $this->arguments['byParentId'];
       
        $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('sys_category');
        $query = $queryBuilder
            ->select('*')
            ->from('sys_category')
            ->join(
                'sys_category',
                'sys_category_record_mm',
                'mm',
                $queryBuilder->expr()->eq('mm.uid_local', 'sys_category.uid')
            )
            ->where(
                $queryBuilder->expr()->eq('mm.uid_foreign', $queryBuilder->createNamedParameter($uid, \PDO::PARAM_INT))
            );
        $result = $query->execute();
        $res = [];

        while ($row = $result->fetch()) {
            $res[] = $row;
        }      

       return $res;

    }


}