seminar joomla 1.5 sef-mechanismus
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
![Page 1: Seminar Joomla 1.5 SEF-Mechanismus](https://reader034.vdocuments.pub/reader034/viewer/2022052310/55557b3bb4c9058a5a8b506e/html5/thumbnails/1.jpg)
Der SEF-Mechanismus in Joomla 1.5
![Page 2: Seminar Joomla 1.5 SEF-Mechanismus](https://reader034.vdocuments.pub/reader034/viewer/2022052310/55557b3bb4c9058a5a8b506e/html5/thumbnails/2.jpg)
Inhalt
Einführung
Joomla 1.5
Überblick
Verarbeitung eines Requests
Response
Eigene Komponenten mit Routing
Abschluss
2
![Page 3: Seminar Joomla 1.5 SEF-Mechanismus](https://reader034.vdocuments.pub/reader034/viewer/2022052310/55557b3bb4c9058a5a8b506e/html5/thumbnails/3.jpg)
Einführung
• SEF = Search Engine Friendly
• Suchmaschinenoptimierung
• „Schönere“ URLs
• Alternative zu Parameterlisten
3
![Page 4: Seminar Joomla 1.5 SEF-Mechanismus](https://reader034.vdocuments.pub/reader034/viewer/2022052310/55557b3bb4c9058a5a8b506e/html5/thumbnails/4.jpg)
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
![Page 5: Seminar Joomla 1.5 SEF-Mechanismus](https://reader034.vdocuments.pub/reader034/viewer/2022052310/55557b3bb4c9058a5a8b506e/html5/thumbnails/5.jpg)
Joomla 1.5
Am 22. Januar 2008 erste Stable-Version
Vollständig Objektorientiert entwickelt
Keine Abhängigkeit mehr zu Mambo
Oftmals Sicherheitsprobleme durchDrittkomponenten
5
![Page 6: Seminar Joomla 1.5 SEF-Mechanismus](https://reader034.vdocuments.pub/reader034/viewer/2022052310/55557b3bb4c9058a5a8b506e/html5/thumbnails/6.jpg)
Einstellungen
SEF-URLs => example.com/foo/bar
Suffix => example.com/foo/bar.html
mod_rewrite => SchreibtServerintern die Request-URLs um.
6
![Page 7: Seminar Joomla 1.5 SEF-Mechanismus](https://reader034.vdocuments.pub/reader034/viewer/2022052310/55557b3bb4c9058a5a8b506e/html5/thumbnails/7.jpg)
Seitenaufruf
Erstellen der Application:
$mainframe =&
JFactory::getApplication(‘site’);
-> Liefert JSite-Object.
Aufruf des Routings:
$mainframe->route();
-> route() ist in JApplication implementiert.
7
![Page 8: Seminar Joomla 1.5 SEF-Mechanismus](https://reader034.vdocuments.pub/reader034/viewer/2022052310/55557b3bb4c9058a5a8b506e/html5/thumbnails/8.jpg)
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
![Page 9: Seminar Joomla 1.5 SEF-Mechanismus](https://reader034.vdocuments.pub/reader034/viewer/2022052310/55557b3bb4c9058a5a8b506e/html5/thumbnails/9.jpg)
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 parent9
![Page 10: Seminar Joomla 1.5 SEF-Mechanismus](https://reader034.vdocuments.pub/reader034/viewer/2022052310/55557b3bb4c9058a5a8b506e/html5/thumbnails/10.jpg)
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
![Page 11: Seminar Joomla 1.5 SEF-Mechanismus](https://reader034.vdocuments.pub/reader034/viewer/2022052310/55557b3bb4c9058a5a8b506e/html5/thumbnails/11.jpg)
JRouter::getInstance()
JRouter::getInstance($client, $options):
[..]
$classname = ‘JRouter’.ucfirst($client);
$instance = new $classname($options);
[..]
- Instanzieren der Klasse JRouterSite
11
![Page 12: Seminar Joomla 1.5 SEF-Mechanismus](https://reader034.vdocuments.pub/reader034/viewer/2022052310/55557b3bb4c9058a5a8b506e/html5/thumbnails/12.jpg)
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
![Page 13: Seminar Joomla 1.5 SEF-Mechanismus](https://reader034.vdocuments.pub/reader034/viewer/2022052310/55557b3bb4c9058a5a8b506e/html5/thumbnails/13.jpg)
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
![Page 14: Seminar Joomla 1.5 SEF-Mechanismus](https://reader034.vdocuments.pub/reader034/viewer/2022052310/55557b3bb4c9058a5a8b506e/html5/thumbnails/14.jpg)
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
![Page 15: Seminar Joomla 1.5 SEF-Mechanismus](https://reader034.vdocuments.pub/reader034/viewer/2022052310/55557b3bb4c9058a5a8b506e/html5/thumbnails/15.jpg)
_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
![Page 16: Seminar Joomla 1.5 SEF-Mechanismus](https://reader034.vdocuments.pub/reader034/viewer/2022052310/55557b3bb4c9058a5a8b506e/html5/thumbnails/16.jpg)
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
![Page 17: Seminar Joomla 1.5 SEF-Mechanismus](https://reader034.vdocuments.pub/reader034/viewer/2022052310/55557b3bb4c9058a5a8b506e/html5/thumbnails/17.jpg)
Eigene Komponenten mitRouting
• 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
![Page 18: Seminar Joomla 1.5 SEF-Mechanismus](https://reader034.vdocuments.pub/reader034/viewer/2022052310/55557b3bb4c9058a5a8b506e/html5/thumbnails/18.jpg)
Eigene Komponenten mitRouting 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
![Page 19: Seminar Joomla 1.5 SEF-Mechanismus](https://reader034.vdocuments.pub/reader034/viewer/2022052310/55557b3bb4c9058a5a8b506e/html5/thumbnails/19.jpg)
Eigene Komponenten mitRouting 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
![Page 20: Seminar Joomla 1.5 SEF-Mechanismus](https://reader034.vdocuments.pub/reader034/viewer/2022052310/55557b3bb4c9058a5a8b506e/html5/thumbnails/20.jpg)
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
![Page 21: Seminar Joomla 1.5 SEF-Mechanismus](https://reader034.vdocuments.pub/reader034/viewer/2022052310/55557b3bb4c9058a5a8b506e/html5/thumbnails/21.jpg)
Fragen?
"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf." - Konrad Zuse
21