Seminar Joomla 1.5 SEF-Mechanismus

1,742 views
1,722 views

Published on

This presentation was held at the university of applied sciences in Giessen/Germany. It's about the SEF-Mechanism in Joomla 1.5.x.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,742
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Seminar Joomla 1.5 SEF-Mechanismus

  1. 1. Der SEF-Mechanismus in Joomla 1.5
  2. 2. Inhalt Einführung  Joomla 1.5  Überblick  Verarbeitung eines Requests  Response  Eigene Komponenten mit Routing  Abschluss  2
  3. 3. Einführung • SEF = Search Engine Friendly • Suchmaschinenoptimierung • „Schönere“ URLs • Alternative zu Parameterlisten 3
  4. 4. Vergleich • URL ohne SEF: • example.tld/index.php?id=5&test=Hallo • URL mit SEF: • example.tld/articles/Hallo • example.tld/index.php/articles/Hallo 4
  5. 5. Joomla 1.5 Am 22. Januar 2008 erste Stable-  Version Vollständig Objektorientiert entwickelt  Keine Abhängigkeit mehr zu Mambo  Oftmals Sicherheitsprobleme durch  Drittkomponenten 5
  6. 6. Einstellungen SEF-URLs => example.com/foo/bar  Suffix => example.com/foo/bar.html  mod_rewrite => Schreibt  Serverintern die Request-URLs um. 6
  7. 7. Seitenaufruf Erstellen der Application:  $mainframe =& JFactory::getApplication(‘site’); -> Liefert JSite-Object. Aufruf des Routings:  $mainframe->route(); -> route() ist in JApplication implementiert. 7
  8. 8. Routing 1 Abarbeitung in JApplication::route() : $uri = clone(JURI::getInstance()); $router =& $this->getRouter(); $result = $router->parse($uri); JRequest::set($result,’get’,false); Kopieren der Request-URI - Router-Objekt holen. - URI parsen - Ergebniswerte in $_GET speichern. - 8
  9. 9. JSite::&getRouter() Implementierung: $config =& JFactory::getConfig(); $options[‘mode’] = $config->getValue(‘config.sef’); $router= &parent::getRouter(‘site’, $options); return $router; Beschreibung: Konfiguration für SEF Laden - Weiter reichen an parent - 9
  10. 10. JApplication::&getRouter() JApplication::&getRouter($name, $options) [..] jimport(‘joomla.application.router’); $router =& JRouter::getInstance($name, $options); [..] return $router; Importiere Joomlas Routerklasse - Reiche Instanz von JRouter zurück. - (JRouterSite-Objekt) 10
  11. 11. JRouter::getInstance() JRouter::getInstance($client, $options): [..] $classname = ‘JRouter’.ucfirst($client); $instance = new $classname($options); [..] Instanzieren der Klasse JRouterSite - 11
  12. 12. JApplication::route() Abarbeitung in JApplication::route() : $uri = close(JURI::getInstance()); $router =& $this->getRouter(); $result = $router->parse($uri); JRequest::set($result,’get’,false); $router ist nun vom Typ “JRouterSite” - Übergabe von $uri an parse($uri) - 12
  13. 13. JRouterSite::parse() Implementierung JRouterSite::parse($uri): [..] // Set the route $uri->setPath(trim($path, ‘/‘)); $vars += parent::parse($uri); return $vars; • In $uri bereinigten $path setzen. • Vaterklasse mit dem Rest der $uri betrauen. 13
  14. 14. JRouter::parse() $vars = array(); $vars = $this->_processParseRules($uri); if($this->_mode == JROUTER_MODE_RAW) { $vars += $this->_parseRawRoute($uri); } if($this->_mode == JROUTER_MODE_SEF) { $vars += $this->_parseSefRoute($uri); } • Abhängig vom Modus wird die Methode zum parsen der URI ausgewählt. 14
  15. 15. _parseSefRoute($uri) • Implementiert in JRouterSite (includes/router.php) • Sucht anhand der URI die richtige Komponente heraus. • Jedes Menu-Item hat ein Alias. • Aus dem Alias eines Items und denen der Vateritems setzt sich die SEF-URI zusammen. • Sucht im Verzeichnis der Komponente nach einer „router.php“ und inkludiert diese falls vorhanden. • Liefert Ergebnis des Komponenten spezifischen Routings zurück. 15
  16. 16. Response • Der umgekehrte Weg: • SEF-Plugin in Joomla überschreibt onAfterRender()-Event • Nutzt JResponse::getBody() um den Content zu bekommen. • Sucht in allen Links nach „index.php“ und wendet darauf die Komponenten spezifischen SEF-Methoden an. • Tauscht die im Body befindlichen Links durch die SEF-Links aus. 16
  17. 17. Eigene Komponenten mit Routing • Ganz normal entwickeln und parametrisierte URIs ausgeben. • router.php anlegen • 2 Funktionen implementieren: • <name>ParseRoute($segments) • <name>BuildRoute(&$query) • Wobei „name“ der hintere Teil aus dem Ordnernamen der Komponente ist: z.B: com_test => name = „Test“. 17
  18. 18. Eigene Komponenten mit Routing 2 • TestParseRoute($segments): • $segments ist gesäuberter Teil der URI. D.h. ohne den für die Auflösung zur Komponente nötigen Teil. • Methode liefert Assoziatives Array zurück mit den Bestandteilen die sonst in $_GET stehen würden. 18
  19. 19. Eigene Komponenten mit Routing 3 • TestBuildRoute(&$query): • &$query ist die parametrisierte URI • Methode liefert ein Array mit Segmenten zurück die danach durch „/„ getrennt die neue URI bilden. 19
  20. 20. Abschluss • Implementierung im Framework recht aufwändig. • Vorteilhaft für eigene Kompontente, da durch zwei Funktionen SEF- Fähigkeit hergestellt werden kann. • Warum SEF-Plugin? • Schlecht bis garnicht Dokumentiert. 20
  21. 21. Fragen? quot;Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf.quot; - Konrad Zuse 21

×