Seminar Joomla 1.5 SEF-Mechanismus

of 21 /21
Der SEF-Mechanismus in Joomla 1.5

Embed Size (px)

description

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

Transcript of Seminar Joomla 1.5 SEF-Mechanismus

  • 1. Der SEF-Mechanismus in Joomla 1.5

2. Inhalt Einfhrung Joomla 1.5 berblick Verarbeitung eines Requests Response Eigene Komponenten mit Routing Abschluss 2 3. Einfhrung SEF = Search Engine Friendly Suchmaschinenoptimierung Schnere URLs Alternative zu Parameterlisten3 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. Joomla 1.5 Am 22. Januar 2008 erste Stable- Version Vollstndig Objektorientiert entwickelt Keine Abhngigkeit mehr zu Mambo Oftmals Sicherheitsprobleme durch Drittkomponenten 5 6. Einstellungen SEF-URLs => example.com/foo/bar Suffix => example.com/foo/bar.html mod_rewrite => Schreibt Serverintern die Request-URLs um.6 7. Seitenaufruf Erstellen der Application: $mainframe =& JFactory::getApplication(site); -> Liefert JSite-Object.Aufruf des Routings: $mainframe->route(); -> route() ist in JApplication implementiert. 7 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. JSite::&getRouter() Implementierung: $config =& JFactory::getConfig(); $options[mode] =$config->getValue(config.sef); $router= &parent::getRouter(site, $options); return $router;Beschreibung: Konfiguration fr SEF Laden - Weiter reichen an parent -9 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 zurck. -(JRouterSite-Objekt) 10 11. JRouter::getInstance() JRouter::getInstance($client, $options): [..] $classname = JRouter.ucfirst($client); $instance = new $classname($options); [..] Instanzieren der Klasse JRouterSite -11 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. 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. 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); } Abhngig vom Modus wird die Methode zum parsen der URI ausgewhlt.14 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 Vateritemssetzt 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 zurck.15 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. Eigene Komponenten mit Routing Ganz normal entwickeln und parametrisierte URIs ausgeben. router.php anlegen 2 Funktionen implementieren: ParseRoute($segments) BuildRoute(&$query) Wobei name der hintere Teil aus dem Ordnernamen der Komponente ist: z.B: com_test => name = Test.17 18. Eigene Komponenten mit Routing 2 TestParseRoute($segments): $segments ist gesuberter Teil der URI. D.h. ohne den fr die Auflsung zur Komponente ntigen Teil. Methode liefert Assoziatives Array zurck mit den Bestandteilen die sonst in $_GET stehen wrden.18 19. Eigene Komponenten mit Routing 3 TestBuildRoute(&$query): &$query ist die parametrisierte URI Methode liefert ein Array mit Segmenten zurck die danach durch / getrennt die neue URI bilden.19 20. Abschluss Implementierung im Framework recht aufwndig. Vorteilhaft fr eigene Kompontente, da durch zwei Funktionen SEF- Fhigkeit hergestellt werden kann. Warum SEF-Plugin? Schlecht bis garnicht Dokumentiert.20 21. Fragen?quot;ber Fragen, die ich nichtbeantworten kann, zerbreche ichmir nicht den Kopf.quot; - Konrad Zuse 21