Transcript
Page 1: Seminar Joomla 1.5 SEF-Mechanismus

Der SEF-Mechanismus in Joomla 1.5

Page 2: Seminar Joomla 1.5 SEF-Mechanismus

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

Einführung

• SEF = Search Engine Friendly

• Suchmaschinenoptimierung

• „Schönere“ URLs

• Alternative zu Parameterlisten

3

Page 4: Seminar Joomla 1.5 SEF-Mechanismus

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

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

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

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

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

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

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

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

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

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

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

_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

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

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

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

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

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

Fragen?

"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf." - Konrad Zuse

21


Recommended