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, table:'pages')}

 

uid: UID des Datensatzes, der geprüft werden soll, z.B. Content-Element oder Page.
table: Damit nicht alle Datensatzdyper mit der ID rausgegeben werden, muss hier die Tabelle definiert werden. Hier: Finde alle ID von irgendelchen Seiten.
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, table:'pages')-> 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, table:'pages')-> 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);
        $this->registerArgument('table', 'string', 'Name der Tabelle', TRUE);
    }
   
    public function render() {
        $uid = $this->arguments['uid'];
        $byParentId = $this->arguments['byParentId'];
        $table = $this->arguments['table'];
       
        $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('sys_category');
        $query = $queryBuilder
            ->select('sys_category.*')
            ->from('sys_category')
            ->join(
                'sys_category',
                'sys_category_record_mm',
                'mm',
                $queryBuilder->expr()->eq('mm.uid_local', 'sys_category.uid')
            )
            ->join(
                'mm',
                $table,
                'p',
                $queryBuilder->expr()->eq('p.uid', 'mm.uid_foreign')
            )
            ->where(
                $queryBuilder->expr()->eq('p.uid', $queryBuilder->createNamedParameter($uid, \PDO::PARAM_INT)),
                $queryBuilder->expr()->eq('mm.tablenames', $queryBuilder->createNamedParameter($table, \PDO::PARAM_STR))
            );
        $result = $query->execute();
        $res = [];
        while ($row = $result->fetch()) {
            $res[] = $row;
        }      
       
        return $res;
    }
}