Side-by-Side

Du glaubst noch immer nicht, dass diese kleine Extension Deinen Typo3-Alltag auf den Kopf stellen könnte?

Werfen wir einen Blick auf einige klassische Aufgaben. Die linke Spalte wirst Du gut kennen: So arbeitest Du bisher. Rechts daneben siehst Du die Lösung mit nnhelpers. Vergleiche nicht nur die Anzahl der Code-Zeilen, die für das Lösen der Aufgabe erforderlich sind - sondern auch den geistigen Energieaufwand, den man braucht, um sich die Schritte, Methoden und Parameter zu merken.

Achten auch darauf, wie sich das z.B. Grundkonzept beim Erstellen von Links im Backend-Kontext von Version 8 zu 9 verändert hat. Ja, die Situation hat sich deutlich verbessert. Aber denke mal an die Zeit, die Du wieder gebraucht hättest, diese Lösung zu finden und sie in allen Deinen Extensions zu aktualisieren!

Dann sieh Dir den nnhelpers-Einzeiler auf der rechten Seite an. Siehst Du den Unterschied im Aufbau von Links im Frontend- oder Backend-Kontext? Und wie steht es mit dem Sprung von Version 8 LTS zu 9 LTS?

Ich denke, Du verstehst, um was es geht.

Ein TypoScript-Setup außerhalb des Controllers erhalten

Aufgabe: Du möchtest den Wert für demo.path aus den TypoScript-Settings eines Plugins holen, aber leider bist Du nicht in einem Kontext, bei dem $this->settings vorhanden ist. Vielleicht bist Du in einem Repository – oder ViewHelper.

Standard Typo3

use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Extbase\Configuration\ConfigurationManager;
use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface;

$objectManager = GeneralUtility::makeInstance( ObjectManager::class );
$configurationManager = $objectManager->get( ConfigurationManager::class );
$settings = $configurationManager->getConfiguration( ConfigurationManagerInterface::CONFIGURATION_TYPE_SETTINGS, null, 'tx_my_ext');
$value = $settings['demo']['path'] ?? '';

MIT nnhelpers

$value = \nn\t3::Settings()->get('my_ext_table', 'demo.path');

Einen Datensatz aus der Datenbank lesen

Aufgabe: Eine “rohe” Zeile aus der Datenbank lesen anhand seiner uid.

Standard Typo3

use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Core\Utility\GeneralUtility;

$queryBuilder = GeneralUtility::makeInstance( ConnectionPool::class )
   ->getQueryBuilderForTable( 'my_ext_table' )
   ->select('*')
   ->from( 'my_ext_table' );
$queryBuilder->andWhere(
   $queryBuilder->expr()->eq( 'uid', $queryBuilder->createNamedParameter( 99 ))
);
$row = $queryBuilder->execute()->fetch();

MIT nnhelpers

\nn\t3::Db()->findByUid('my_ext_table', 99);

Alle Zeilen in der Datenbank holen

Aufgabe: Alle Daten einer Tabelle aus der Datenbank lesen, aber die Flags für hidden sowie die start_time und end_time ignorieren. Diese Anwendung hat man häufig, wenn man extrem viele Datensätze möglichst performant und ohne Model braucht, z.B. für einen Eport nach Excel.

Standard Typo3

use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Core\Database\Query\Restriction;

$queryBuilder = GeneralUtility::makeInstance( ConnectionPool::class )
   ->getQueryBuilderForTable( 'my_ext_table' )
   ->select('*')
   ->from( 'my_ext_table' );
$restrictions = $queryBuilder->getRestrictions();
$restrictions->removeByType( StartTimeRestriction::class );
$restrictions->removeByType( EndTimeRestriction::class );
$restrictions->removeByType( HiddenRestriction::class );

$rows = $queryBuilder->execute()->fetchAll();

MIT nnhelpers

\nn\t3::Db()->findAll('my_ext_table', true);