Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Seminar Joomla 1.5 SEF-Mechanismus

1,839 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
  • Be the first to comment

  • Be the first to like this

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

×