Folgendes Setup: Seite mit News-Plugins: Links ein Kategoriebaum, rechts die dadurch gefilterte Listenansicht. Dann gibt es da noch eine Detailseite, auf der dann das Plugin für die Detailansicht ist. Nun will mein Kunde auf der Detailansicht links ebenfalls den Kategoriebaum haben und dabei soll die aktuelle Kategorie der News hervorgehoben sein. Und das funktioniert so:
Die Extension news ist ziemlich genial – es gibt dort Signals, die aus dem Controller aufgerufen werden und so das Manipulieren von Daten möglich machen. Dann muss man nur eine eigene Klasse registrieren (ext_localconf.php)
$signalSlotDispatcher = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\SignalSlot\\Dispatcher'); $signalSlotDispatcher->connect( 'GeorgRinger\\News\\Controller\\CategoryController', 'listAction', 'My\\Extension\\Signals\\CategoryController', // fully your choice 'listActionSlot', // fully your choice TRUE );
Und dann entsprechend die Funktion implementieren. In meinem Fall war es etwas komplizierter, da jede News mehreren Kategorien zugewiesen wurde und die Kategorien verschachtelt waren. Da ich nur eine Kategorie hervorheben kann, habe ich mich dann dafür entschieden, die Kategorie ohne Unterkategorien zu wählen.
/** * get current news item category and set in overwrite demand * * @param array $categories * @param array $overwriteDemand * @param array $demand * @param array $extendedVariables */ public function listActionSlot($categories, $overwriteDemand, $demand, $extendedVariables) { $newsArguments = GeneralUtility::_GET('tx_news_pi1'); $newsUid = (int)$newsArguments['news']; if($newsUid > 0) { /** @var $db TYPO3\CMS\Core\Database\DatabaseConnection */ $db = $GLOBALS['TYPO3_DB']; $result = $db->exec_SELECT_mm_query( 'sys_category.*', 'sys_category', 'sys_category_record_mm', 'tx_news_domain_model_news', 'AND tablenames = \'tx_news_domain_model_news\' AND fieldname=\'categories\' AND uid_foreign = '.$newsUid ); $parentUids = array(); $uids = array(); while($row = $db->sql_fetch_assoc($result)) { $parentUids[] = $row['parent']; $uids[] = $row['uid']; } /* find category that is not a parent */ $categoryUid = array_shift(array_diff($uids, $parentUids)); return [ 'categories' => $categories, 'overwriteDemand' => ['categories' => $categoryUid], 'demand' => $demand, 'extendedVariables' => $extendedVariables ]; } return [ 'categories' => $categories, 'overwriteDemand' => $overwriteDemand, 'demand' => $demand, 'extendedVariables' => $extendedVariables ]; }
Und so klappts dann bei mir 🙂
Neueste Kommentare