In diesem kurzen Tutorial wird erklärt, wie man in der eigenen Extension ein Frontend-Plugin Custom Feld hinzufügt. Dies kann man z.B. für Filter oder andere Parameter nutzen, die im Frontend genutzt werden können. Dieses Tutorial fügt eine Select-Box mit verschiedenen Filtern hinzu.

1. Anpassungen im TCA

Zuerst muss die tt_content.php in Configuration/TCA/Overrides angepasst werden. In diesem beispiel wird ein Feld für eine FilterID hinzugefügt, um zwischen verschiedenen Obstarten zu sortieren:

 

<?php
defined('TYPO3') || die();

\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin(
    'meineExt',
    'meineExtPlugin',
    'meineExtTitle'
);

// Füge das neue Feld "filterid" zur TCA von tt_content hinzu
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns('tt_content', [
    'tx_meineext_filterid' => [
        'exclude' => 1,
        'label' => 'Filter ID',
        'config' => [
            'type' => 'select',
            'renderType' => 'selectSingle',
            'items' => [
                ['Nichts ausgeben', 0],
                ['Bananenarten', '122888'],
                ['Kirscharten', '126619'],
                ['Apfelarten', '126779'],
            ],
        ],
    ],
]);

// Füge das Feld "filterid" zu dem spezifischen Plugin hinzu:
$GLOBALS['TCA']['tt_content']['types']['list']['subtypes_addlist']['meineExt_meineExtPlugin'] = 'tx_meineext_filterid';

 

 

2. Datenbankfelder hinzufügen

Damit die Änderungen auch gespeichert werden können, muss nun in der Tabelle tt_content ein neues Feld hinzugefügt werden. Dies machen wir über die ext_tables.sql:

 

//Vorhandene Tabellenänderungen
...

CREATE TABLE tt_content (
    tx_meineext_filterid int(11) DEFAULT '0' NOT NULL
);

 

Wenn wir jetzt im TYPO3 Backend unter Admin-Tools -> Maintenance einmal den Systemcache leeren und den Autoload Dumpen, sollte bei der Datenbanküberprüfung die Anpassung in tt_content zu sehen sein. Sie sollte auch bereits angehakt sein. Jetzt kann die Aktualisierung durchgeführt werden.

 

3. Frontend Controller anpassen

Zum Schluss können wir nun via cObjectData im Controller und in der gewünschten Action mit der hinzugefügten Filterfunktion arbeiten:

 

/**
* action list
*
* @return \Psr\Http\Message\ResponseInterface
*/
public function listAction(): \Psr\Http\Message\ResponseInterface
{
    $data = $this->configurationManager->getContentObject()->data;

    if($data['tx_meineext_filterid'] == 0) {
        $products = $this->productRepository->findAll();
        $this->view->assign('products', $products);
    }
    else {
        $products = $this->productRepository->findByProductid($data['tx_meineext_filterid']);
    }

    $this->view->assign('products', $products);

    return $this->htmlResponse();
}
Previous PostLinux Tutorial: MQTT Broker Installation und Konfiguration
Next PostTYPO3 Tutorial: Flux zu Mask Elemente migrieren