TYPO3-Tutorial: RealURL verstehen

7. Mai 2008 | 8 Kommentare

TYPO3 Tutorials by undkonsorten BerlinWir haben schon mehrfach über schöne URIs in TYPO3 berichtet, nachwievor das mächtigste Tool dafür ist Realurl. Wie verfährt man aber bei Extension, für die im Netz keine Snippets zu finden sind? Wir zeigen’s am Beispiel einer Galerie-Extension, für die uns keine Dokumentation vorlag.

Ausgangssituation: Die Galerie-Extension soll „schöne URIs“ bekommen, die für Menschen und (Such-) Maschinen besser lesbar ist. RealURL ist als Extension installiert, aber die Galerie wird noch in der Form ?tx_gallery_pi1[pointer]=0&tx_gallery_pi1[item]=74&cHash=2506cb0645 angehängt. Hierbei ist das Feld „pointer“ das erste Bild der angezeigten Seite, also bei pointer = 0 (wie im Beispiel), werden die ersten 4 Bilder angezeigt, bei pointer = 4 die zweite Seite (Bilder 5-8) – die Galerie ist in diesem Beispiel so konfiguriert, dass pro Seite 4 Bilder angezeigt werden. Das Feld „item“ bezeichnet den Datensatz in der Galerie, im Beispiel besteht dieser Datensatz aus ID, Titel, Referenz auf Grafikdatei und erläuterndem Text. Diese id (also das Feld „item“, 74 im Beispiel) stimmt nicht mit dem pointer überein, d.h Seite 3 (pointer=8) kann z.B. mit „item“ Nr. 35 anfangen. Um den cHash müssen wir uns nicht kümmern, der wird von RealURL standardmäßig über den cHash-Cache umgesetzt.

Ziel ist, dass die URI in der Form „/galerie/seite-2/bildtitel.html“ angezeigt wird. Es muss also das Feld „pointer“ in „seite-x“ umgesetzt werden. Und bei „item“ muss in der Datenbank nach dem zugehörigen Titel nachgeschaut werden, damit ein lesbarer Name entsteht. Gleichzeitig sollen Doppeldeutigkeiten vermieden werden, und auch keine Sonderzeichen als %20 oder ähnliches maskiert werden.

Vorgehensweise: Als erstes empfehlenswert ist die Installation der Extension Realurl Configurator. Damit ist die Konfiguration von Realurl (also der realurlconfig.php) einfach möglich, vor allem ist ein Syntaxcheck vorgeschaltet, so dass man keine fehlerhaften Konfigurationsdateien hochlädt. Außerdem gibt es eine RTE mit Syntax-Highlighting.

Folgendes muss nun in die realurlconf.php (über den Realurl Configurator) unter postVarSets und _DEFAULT eingetragen werden:

// Galerie soll so angezeigt werden: galerie/seite-2/titel.html
'galerie' => array(

   // Pointer=erstes Bild der angezeigten Vorschauseite,
   // wird in der Datei class.tx_realurl_userfunctest.php umgesetzt, siehe dort
   array('GETvar' => 'tx_gallery_pi1[pointer]',
   'userFunc' => 'EXT:realurl/class.tx_realurl_userfunctest.php:&tx_realurl_userfunctest->main',
   ),

   // Das jeweilige Bild
   array('GETvar' => 'tx_gallery_pi1[item]',
      'lookUpTable' => array(
      'table' => 'tx_gallery_item', // Tabelle, in der die Bilder stehen
      'id_field' => 'uid', // zugeordnetes ID-Feld
      'alias_field' => 'title', // welches Feld soll als Navigationsname angezeigt werden?
      'addWhereClause' => ' AND NOT deleted',
      'useUniqueCache' => 1, // keine Doppeldeutigkeiten
      'useUniqueCache_conf' => array ( 
         // Feintuning des Navigationsnamens
         'strtolower' => 1,
         'spaceCharacter' => '-',
      ),
   ),
),
),

Die Kommentare sollten erklären, wie der Name des Bildes entsteht. Bleibt die Umsetzung der Seitenzahl, hierbei ist zu beachten dass pointer=0 auf „seite-1“ pointer=4 auf „seite-2“ und soweiter umgesetzt werden. Die dafür nötige Umrechnung ist ausgelagert in die Datei class.tx_realurl_userfunctest.php. Der relevante Code in dieser Datei sieht folgendermaßen aus:

class tx_realurl_userfunctest {
function main($params, $ref) {
if ($params[‚decodeAlias‘]) {
return $this->alias2id($params[‚value‘]);
} else {
return $this->id2alias($params[‚value‘]);
}
}
// Bis hierher Vorgabe, zunächst die Funktion, die die ID in den Navigationsnamen umsetzt
function id2alias($value) {
return ’seite-‚.(($value/4)+1); // Die Formel: ID/4+1, noch ein „seite-“ davorgehängt – fertig
// Die Zahl 4 muss ersetzt werden, wenn sich die Anzahl der Bilder pro Seite ändert, dann aber auch unten in der Funktion alias2id!
}
// Die folgende Funktion setzt den Navigationsnamen in die ID um
function alias2id($value) {
if (ereg(‚^seite-([0-9]+)$‘,$value,$reg)) { // Die regular expression zieht aus dem String die Seitenzahl
return ($reg[1]-1)*4; // Jetzt muss noch die Seitenzahl in pointer umgerechnet werden: (Nr-1)x4.
}
}
}

Hier wird also der Rest der Umsetzung übernommen. Auch hier sollte alles durch die Kommentare erklärt werden.

Ähnliche Artikel:

Meta-Daten



8 Kommentare

Auch mal Kommentieren:

Kommentar