SlideShare une entreprise Scribd logo
1  sur  21
Télécharger pour lire hors ligne
Der SEF-Mechanismus in
      Joomla 1.5
Inhalt
    Einführung



    Joomla 1.5



        Überblick
    


        Verarbeitung eines Requests
    


        Response
    


    Eigene Komponenten mit Routing



    Abschluss





                                      2
Einführung
• SEF = Search Engine Friendly
• Suchmaschinenoptimierung
• „Schönere“ URLs
• Alternative zu Parameterlisten




                                   3
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
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
Einstellungen
    SEF-URLs => example.com/foo/bar



    Suffix => example.com/foo/bar.html



    mod_rewrite => Schreibt


    Serverintern die Request-URLs um.




                                         6
Seitenaufruf
    Erstellen der Application:


$mainframe =&
  JFactory::getApplication(‘site’);
-> Liefert JSite-Object.



    Aufruf des Routings:


$mainframe->route();
-> route() ist in JApplication implementiert.




                                                7
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
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
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
JRouter::getInstance()
JRouter::getInstance($client, $options):
[..]
$classname = ‘JRouter’.ucfirst($client);
$instance = new $classname($options);
[..]


    Instanzieren der Klasse JRouterSite
-




                                           11
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
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
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
_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
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
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
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
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
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
Fragen?

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




                                      21

Contenu connexe

En vedette

En vedette (7)

Scala case of case classes
Scala   case of case classesScala   case of case classes
Scala case of case classes
 
Advanced Scala
Advanced ScalaAdvanced Scala
Advanced Scala
 
Ruby
RubyRuby
Ruby
 
GNU Bourne Again SHell
GNU Bourne Again SHellGNU Bourne Again SHell
GNU Bourne Again SHell
 
Case class scala
Case class scalaCase class scala
Case class scala
 
Succession “Losers”: What Happens to Executives Passed Over for the CEO Job?
Succession “Losers”: What Happens to Executives Passed Over for the CEO Job? Succession “Losers”: What Happens to Executives Passed Over for the CEO Job?
Succession “Losers”: What Happens to Executives Passed Over for the CEO Job?
 
Hype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerHype vs. Reality: The AI Explainer
Hype vs. Reality: The AI Explainer
 

Similaire à Seminar Joomla 1.5 SEF-Mechanismus

Einführung in die Java-Webentwicklung - Part II - [3 of 3] - Java Server Face...
Einführung in die Java-Webentwicklung - Part II - [3 of 3] - Java Server Face...Einführung in die Java-Webentwicklung - Part II - [3 of 3] - Java Server Face...
Einführung in die Java-Webentwicklung - Part II - [3 of 3] - Java Server Face...kaftanenko
 
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
.NET Summit 2016 München: EcmaScript 2015+ with TypeScriptManfred Steyer
 
Migrationspfade für Angular 2
Migrationspfade für Angular 2Migrationspfade für Angular 2
Migrationspfade für Angular 2Manfred Steyer
 
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?Marc Müller
 
Jpgraph - eine Einführung
Jpgraph - eine EinführungJpgraph - eine Einführung
Jpgraph - eine Einführungfrankstaude
 
PrettyFaces: RESTful URLs für JSF
PrettyFaces: RESTful URLs für JSFPrettyFaces: RESTful URLs für JSF
PrettyFaces: RESTful URLs für JSFChristian Kaltepoth
 
Der neue Component Router für Angular 2
Der neue Component Router für Angular 2Der neue Component Router für Angular 2
Der neue Component Router für Angular 2Manfred Steyer
 
APIs mit Zend\Expressive erstellen
APIs mit Zend\Expressive erstellenAPIs mit Zend\Expressive erstellen
APIs mit Zend\Expressive erstellenRalf Eggert
 
Java Batch – Der Standard für's Stapeln
Java Batch – Der Standard für's StapelnJava Batch – Der Standard für's Stapeln
Java Batch – Der Standard für's Stapelngedoplan
 
Microservices mit Rust
Microservices mit RustMicroservices mit Rust
Microservices mit RustJens Siebert
 
Javascript auf Client und Server mit node.js - webtech 2010
Javascript auf Client und Server mit node.js - webtech 2010Javascript auf Client und Server mit node.js - webtech 2010
Javascript auf Client und Server mit node.js - webtech 2010Dirk Ginader
 
Source Code Analyse - Ein praktikabler Ansatz
Source Code Analyse - Ein praktikabler AnsatzSource Code Analyse - Ein praktikabler Ansatz
Source Code Analyse - Ein praktikabler AnsatzMarc Ruef
 
Source-Code-Analyse – ein praktikabler Ansatz
Source-Code-Analyse – ein praktikabler AnsatzSource-Code-Analyse – ein praktikabler Ansatz
Source-Code-Analyse – ein praktikabler AnsatzDigicomp Academy AG
 
E2E Tests mit PHP
E2E Tests mit PHPE2E Tests mit PHP
E2E Tests mit PHPkmhusseini
 
EnterJS 2015 - JavaScript von Morgen schon heute
EnterJS 2015 - JavaScript von Morgen schon heuteEnterJS 2015 - JavaScript von Morgen schon heute
EnterJS 2015 - JavaScript von Morgen schon heutePhilipp Burgmer
 

Similaire à Seminar Joomla 1.5 SEF-Mechanismus (20)

Einführung in die Java-Webentwicklung - Part II - [3 of 3] - Java Server Face...
Einführung in die Java-Webentwicklung - Part II - [3 of 3] - Java Server Face...Einführung in die Java-Webentwicklung - Part II - [3 of 3] - Java Server Face...
Einführung in die Java-Webentwicklung - Part II - [3 of 3] - Java Server Face...
 
Testing tools
Testing toolsTesting tools
Testing tools
 
Ruby on Rails SS09 06
Ruby on Rails SS09 06Ruby on Rails SS09 06
Ruby on Rails SS09 06
 
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
.NET Summit 2016 München: EcmaScript 2015+ with TypeScript
 
Migrationspfade für Angular 2
Migrationspfade für Angular 2Migrationspfade für Angular 2
Migrationspfade für Angular 2
 
Web Entwicklung mit PHP - Teil 1
Web Entwicklung mit PHP - Teil 1Web Entwicklung mit PHP - Teil 1
Web Entwicklung mit PHP - Teil 1
 
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?
 
Jpgraph - eine Einführung
Jpgraph - eine EinführungJpgraph - eine Einführung
Jpgraph - eine Einführung
 
PrettyFaces: RESTful URLs für JSF
PrettyFaces: RESTful URLs für JSFPrettyFaces: RESTful URLs für JSF
PrettyFaces: RESTful URLs für JSF
 
node.js
node.jsnode.js
node.js
 
Der neue Component Router für Angular 2
Der neue Component Router für Angular 2Der neue Component Router für Angular 2
Der neue Component Router für Angular 2
 
APIs mit Zend\Expressive erstellen
APIs mit Zend\Expressive erstellenAPIs mit Zend\Expressive erstellen
APIs mit Zend\Expressive erstellen
 
Java Batch – Der Standard für's Stapeln
Java Batch – Der Standard für's StapelnJava Batch – Der Standard für's Stapeln
Java Batch – Der Standard für's Stapeln
 
Microservices mit Rust
Microservices mit RustMicroservices mit Rust
Microservices mit Rust
 
Javascript auf Client und Server mit node.js - webtech 2010
Javascript auf Client und Server mit node.js - webtech 2010Javascript auf Client und Server mit node.js - webtech 2010
Javascript auf Client und Server mit node.js - webtech 2010
 
Source Code Analyse - Ein praktikabler Ansatz
Source Code Analyse - Ein praktikabler AnsatzSource Code Analyse - Ein praktikabler Ansatz
Source Code Analyse - Ein praktikabler Ansatz
 
Source-Code-Analyse – ein praktikabler Ansatz
Source-Code-Analyse – ein praktikabler AnsatzSource-Code-Analyse – ein praktikabler Ansatz
Source-Code-Analyse – ein praktikabler Ansatz
 
E2E Tests mit PHP
E2E Tests mit PHPE2E Tests mit PHP
E2E Tests mit PHP
 
Ruby on Rails SS09 04
Ruby on Rails SS09 04Ruby on Rails SS09 04
Ruby on Rails SS09 04
 
EnterJS 2015 - JavaScript von Morgen schon heute
EnterJS 2015 - JavaScript von Morgen schon heuteEnterJS 2015 - JavaScript von Morgen schon heute
EnterJS 2015 - JavaScript von Morgen schon heute
 

Seminar Joomla 1.5 SEF-Mechanismus

  • 2. Inhalt Einführung  Joomla 1.5  Überblick  Verarbeitung eines Requests  Response  Eigene Komponenten mit Routing  Abschluss  2
  • 3. Einführung • SEF = Search Engine Friendly • Suchmaschinenoptimierung • „Schönere“ URLs • Alternative zu Parameterlisten 3
  • 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 Vollständig Objektorientiert entwickelt  Keine Abhängigkeit 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 für 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 zurück. - (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); } • Abhängig vom Modus wird die Methode zum parsen der URI ausgewählt. 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 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. 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: • <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. 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. 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. 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. Fragen? quot;Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf.quot; - Konrad Zuse 21