Vorheriger Artikel Nächster Artikel

TYPO3: Zehn Tipps & Tricks für Extbase und Fluid

2

Aus dem
t3n Magazin Nr. 24

06/2011 - 08/2011

Default-Sortierung im Repository

Nicht unbedingt unbekannt, aber weitestgehend ungenutzt ist ein Feature, welches in Extbase 1.3 hinzugekommen ist: Im Repository besteht die Möglichkeit, das Ergebnis nach bestimmten Feldern aufsteigend oder absteigend zu sortieren. Dies wird beispielsweise mittels „$query->setOrderings(array('name' => Tx_Extbase_Persistence_QueryInterface::ORDER_DESCENDING));“ erledigt.

Um dies nicht für jede einzelne Repository-Funktion einstellen zu müssen, gibt es die Eigenschaft defaultOrderings:

Im Repository

protected $defaultOrderings = array ('name' => Tx_Extbase_Persistence_QueryInterface::ORDER_DESCENDING);

Listing 6

Eigenes Template im Controller

Normalerweise ist in Extbase und immer alles genau geregelt – „Convention over Configuration“ lautet das Motto und das macht durchaus Sinn. So ist beispielsweise festgelegt, dass im Controller automatisch der View (und damit zunächst die HTML-Datei) ermittelt wird, der zum Controller und zur Action passt. Eine List-Action des Blog-Controllers (List.html) erwartet das Template somit im Verzeichnis Resources/Private/Templates/Blog/.

Nun kann es aber durchaus sein, dass man von dieser Vorgabe abweichen und ein eigenes Template definieren möchte – beispielsweise damit ein eingeloggter Administrator ein anderes Template erhält als der normale User. Dies kann über die Methode setTemplatePathAndFilename wie folgt realisiert werden:

Im Controller – innerhalb einer Action

public function listAction() {
	...
	$this->view->setTemplatePathAndFilename(
			'typo3conf/ext/' .
			$this->request->getControllerExtensionKey() .
			'/Resources/Private/Templates/Blog/NeuesTemplate.html'
		);
	...
	$this->view->assign(...);
}

Listing 7

Individuelle SQL-Abfragen

Extbase besitzt einen sehr leistungsfähigen Query-Manager. Dieser baut Abfragen so zusammen, wie es SQL eben passt – getreu dem Motto „Don't care about databases“. Tatsächlich gibt es im Domain Driven Design (der Philosophie, die hinter FLOW3 und damit auch hinter Extbase steht) keine Datenbanken, sondern nur „Repositories“.

Damit wird die technische Realisierung der Speicherung letztlich außerhalb der Domäne transportiert. Folgerichtig befindet sich in der Domäne kein SQL – denn dies funktioniert ja nur mit einer Datenbank. Die Daten könnten aber auch im Filesystem oder in einem Webservice gespeichert sein.

Im Alltag wird aber nach wie vor eine MySQL-Datenbank verwendet werden und so existiert auch in Extbase eine Möglichkeit, Datenbanken direkt anzusprechen. Dies kann zum Beispiel dann von Nutzen sein, wenn komplexe Queries für statistische Auswertungen oder auf Performance optimierte Befehle abgesetzt werden sollen.

Damit dies allerdings gelingt, muss der interne Mechanismus ausgeschaltet werden, mit dem Extbase probiert, aus dem Query-Result wieder fertige Objekte zu konstruieren. Hier kommen die so genannten Query-Settings und mit ihnen die Statement-Methode der Query-Factory ins Spiel:

Im Repository

public function findRaw(){
	$query = $this->createQuery();
	$query->getQuerySettings()->setReturnRawQueryResult(TRUE);
	$query->statement('SELECT * from tx_simpleblog_domain_model_blog');
	return $query->execute();
}

Listing 8

Es wird nun statt des Objekt-Interfaces ein Array mit dem Ergebnis der Datenbankabfrage zurückgeliefert. Allerdings verliert damit seine Aufwärtskompatibilität zu FLOW3. Nun noch Controller und View angepasst und schon steht dem Datenbankzugriff nichts mehr im Weg:

Controller

$this->view->assign('result',$this->blogRepository->findRaw());

Listing 9

View

<f:for each="{result}" as="row">
	{row.title}<br />
</f:for>

Listing 10

2
Vorheriger Artikel Zurück zur Startseite Nächster Artikel
3 Antworten
  1. von Stefan am 22.05.2012 (16:20Uhr)

    Schöne Übersicht, ein paar Punkte sind sehr hilfreich bei Problemen die bisher echt Nerven gekostet haben. Die verfügbaren Extbase/Fluid-Dokus sind ja insgesamt etwas mager und wiederholen sich auf einem bestimmten Niveau.
    Hier sind aber endlich mal ein paar neue Beispiele - vielen Dank!

    Antworten Teilen
  2. von Claus am 26.07.2012 (13:15Uhr)

    Das Code Template von Typovision enthält einen Fehler. Das Image Tag hat kein Argument source, sondern src.

    Antworten Teilen
  3. von sabine.deeken am 05.11.2013 (13:11Uhr)

    Settings-Zugriff im Viewhelper mit Namespaces (getestet in TYPO3 6.1):

    /**
    * @var \TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface
    * @inject
    */
    protected $configurationManager;

    /**
    * Injects the configuration manager, retrieves the plugin settings from it
    *
    * @param \TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface $configurationManager
    * @return void
    * @override \TYPO3\CMS\Extbase\Mvc\Controller\AbstractController
    **/
    public function injectConfigurationManager(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface $configurationManager) {
    $this->configurationManager = $configurationManager;
    $settings = $this->configurationManager->getConfiguration(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::CONFIGURATION_TYPE_SETTINGS);
    $this->settings = $settings;
    }

    Antworten Teilen
Deine Meinung

Bitte melde dich an!

Du musst angemeldet sein, um einen Kommentar schreiben zu können.

Jetzt anmelden

Aktuelles aus dem Bereich Fluid
TYPO3 Mask: Die Template-Alternative zu Templavoila
TYPO3 Mask: Die Template-Alternative zu Templavoila

Derzeit gibt es wenige Templating-Ansätze im TYPO3 CMS. Einige Erweiterungen sind veraltet und andere bieten einfach zu wenig Funktionalität. Genau das soll TYPO3 Mask ändern. » weiterlesen

TYPO3-Podcast T3Bits: Neue Episoden zu Responsive Webdesign und Fluid
TYPO3-Podcast T3Bits: Neue Episoden zu Responsive Webdesign und Fluid

Vor etwas mehr als einem Monat ist der TYPO3-Podcast T3Bits gestartet. Webentwickler Sebastian Michaelsen behandelt darin die Welt rund um das CM-System. Seit der ersten Episode sind inzwischen zwei.. ... » weiterlesen

TYPO3 CMS 6.2: Alle Features der neuen Version im Überblick
TYPO3 CMS 6.2: Alle Features der neuen Version im Überblick

Am gestrigen Dienstag wurde die neue Version 6.2 des beliebten Content-Management-Systems (CMS) TYPO3 veröffentlicht. Welche Änderungen und Verbesserungen es gibt, haben wir hier für euch … » weiterlesen

Kennst Du schon unser t3n Magazin?

t3n 36 jetzt kostenfrei probelesen! Alle Inhalte des t3n Magazins Diesen Hinweis verbergen