sys_category: Systemkategorien in eigener Extension einbinden und erweitern

Seit Version 6.0 bietet TYPO3 systemeigene Kategorien an, die sich komfortabel in eigene Extensions integrieren lassen.

Teil 1: Systemkategorien in eigener Extension einbinden und erweitern

Leider ist deren Integration nicht ganz trivial. Die beste Verfügbare Anleitung zum integrieren der Systemkategorien in eine eigene Extension (engl) habe ich bisher auf Github gefunden. daher hier eine Anleitung, wie man vorgehen kann.

Es gibt in der Systemextension Extbase, zu finden unter TYPO3ROOT/typo3/sysext/extbase bereits ein vorbereitetes Model und Repository für die System Category. Diese muss man in seiner eigenen Extension nun nur erweitern und das geht so:

in my_extension/Classes/Domain/Model/Category.php ablegen mit folgendem Inhalt:

<?php
namespace LW\LwPinboard\Domain\Model;

class Category extends \TYPO3\CMS\Extbase\Domain\Model\Category {}

analog das Repository unter my_extension/Classes/Domain/Repository/CategoryRepository.php

<?php
namespace LW\LwPinboard\Domain\Repository;

class CategoryRepository extends \TYPO3\CMS\Extbase\Domain\Repository\CategoryRepository {}

Wenn man keine zusätzlichen Anforderungen an die Funktionalität hat, kann man die Klassen von Category Model und Repository erstmal unverändert lassen. Damit Extbase weiß, in welcher Datenbanktabelle es schauen muss, muss man nun noch per TypoScript ein Mapping durchgeführt werden. Dies geht z.B. in my_extension/Configuration/TypoScript/setup.ts mit:

plugin.tx_myextension.persistence.classes {
	ABC\MyExtension\Domain\Model\Category {
		mapping {
			recordType = 0
			tableName = sys_category
		}
	}
}

Nun sind die Kategorien generell in der Extension verfügbar. Man könnte diese z.B. im Controller an das View hängen, um eine Liste aller Kategorien auszugeben:

Dazu muss man im eigenen Controller der Extension, bei mir my_extension\Classes\Controller\MessageController.php zunächst das CategoryRepository  hinzufügen und injecten:

 /**
 * @var \ABC\MyExtension\Domain\Repository\CategoryRepository
 * @inject
 */
protected $categoryRepository = null;

Nun kann in der entsprechenden Action das Repository so wie jedes andere auch abgefragt werden, z.B:

$categoryList = $this->categoryRepository->findAll();
$this->view->assign('categoryList', $categoryList);

Wir können nun eine Liste von System Kategorien per FLUID anzeigen, schön, aber wir wollten doch unsere Messages kategorisieren.

Dazu weiter mit Teil 2