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; } }