Achtung, öffnet in einem neuen Fenster. PDFDruckenE-Mail

Problem mit bestimmten System-Plugins

Donnerstag, den 23. September 2010 um 07:37 Uhr

Während der Entwicklung und des Supports der JoomGallery 1.5.5 ist uns ein Problem aufgefallen, dass in Verbindung mit den verschiedensten Third-Party-System-Plugins steht.

Unserer Meinung nach beachten diese Plugins eine bestimmte Eigenschaft von Joomla nicht, wodurch es zu Problemen kommen kann, wenn eine Seite mit suchmaschinenfreundlichen URLs arbeitet.

Diesen Zusammenhang möchten wir hier erläutern und die Entwickler dieser Plugins dazu aufrufen, ihren Code diesbezüglich zu überprüfen und gegebenenfalls anzupassen.

Zur Erklärung müssen wir leider etwas weiter ausholen: Wie den meisten Entwicklern wahrscheinlich bekannt ist, gibt es in Joomla 1.5 im Moment vier System-Plugin-Events, die in folgender Reihenfolge getriggert werden: 'onAfterInitialise', 'onAfterRoute', 'onAfterDispatch' und 'onAfterRender'.

Im Folgenden sind vor allem die Events 'onAfterInitialise' und 'onAfterRoute' wichtig sowie ein Core-Parameter von Joomla namens 'format'. Dieser Parameter, der für gewöhnlich in der URL mit übergeben wird, gibt an, welcher Dokumententyp (siehe $document->getType()) von Joomla gerendert werden soll. Standardmäßig ist das 'html', also wenn eine ganz normale HTML-Seite geladen werden soll. Deshalb wird 'format' auch normalerweise bei HTML-Seiten nicht übergeben (dann wird der Default-Wert 'html' verwendet).
Andere mögliche Werte sind 'error', 'feed', 'pdf' und 'raw' (diese entsprechen den Unterordnernamen des Verzeichnisses 'libraries/joomla/document'). Falls man zum Beispiel eine PDF-Datei erstellen und ausgeben möchte, müsste mal also 'format=pdf' explizit in der URL mit angeben, damit Joomla automatisch diesen Dokumententyp rendert.

Das eigentliche Problem kann nur autreten, wenn die suchmaschinenfreundlichen URLs in Joomla aktiviert sind (dabei ist es egal, ob es sich um das Joomla-Core-SEF oder um eine SEF-Komponente handelt). Da sich der 'format'-Parameter jetzt nämlich nicht mehr explizit in der URL befindet (sondern nur noch implizit in der SEF-URL), kann Joomla erst frühestens beim Event 'onAfterRoute' "wissen", dass 'format' nicht gleich 'html' sondern etwas anderes ist: Erst jetzt ist nämlich die SEF-URL geparsed und 'format' steht wieder explizit zur Verfügung.

Dies allein sorgt aber immer noch nicht für das eigentliche Problem. Dieses tritt nämlich erst auf, wenn ein System-Plugin installiert und aktiviert ist, das die folgenden Bedingungen erfüllt:

  • Es verwendet das Event 'onAfterInitialise' oder hat Code im Konstruktor.
  • Innerhalb einer dieser Funktionen ruft das Plugin die Document-Library von Joomla auf.
    Dies kann direkt geschehen mit:
    $document =& JFactory::getDocument();
    oder auch indirekt mit Aufrufen wie zum Beispiel:
    $mainframe->addCustomHeadTag($html);

Sind diese Bedingungen erfüllt (was leider bei sehr vielen System-Plugins der Fall ist), wird 'JDocument' geladen, bevor der 'format'-Parameter dem System explizit bekannt ist.

Dadurch legt die Zeile

$instance->setType($ntype);

der Funktion 'getInstance()' in der Datei 'libraries/joomla/document/document.php' den Dokumententyp bereits endgültig auf 'html' fest (dies wird später nicht mehr geändert)!

Eine Erweiterung, die über die URL einen anderen Dokumententyp anfordert (die JoomGallery benötigt beispielsweise bei der Ausgabe eines Bildes 'format=raw'), kann damit nicht mehr korrekt arbeiten.

Zusammenfassung

Da durch diese bestimmten System-Plugins der 'format'-Parameter bereits auf 'html' festgesetzt wird, bevor sicher ist, dass überhaupt 'html' angefordert wurde, sind wir der Meinung, dass diese Plugins für das Problem verantwortlich sind.

Plugins, die den HTML-Output einer Seite verändern wollen, sollten dies erst tun, wenn absolut sicher ist, dass überhaupt eine HTML-Seite ausgegeben werden soll. Dies ist frühestens beim Event 'onAfterRoute' der Fall.

Wir hoffen, dass viele Entwickler diesen Text lesen und versuchen die Plugins, die auf 'JDocument' zugreifen, umzuschreiben, sodass sie nur noch die Events 'onAfterRoute', 'onAfterDispatch' und 'onAfterRender' verwenden. Tests unsererseits haben gezeigt, dass dies meist ohne größere Probleme machbar ist.

Vielen Dank für das Lesen dieses sehr theoretischen Textes!

 

Achtung, öffnet in einem neuen Fenster. PDFDruckenE-Mail

JoomGallery in neuem Gewand

Dienstag, den 24. August 2010 um 00:00 Uhr

"Ups" werden manche denken, die häufiger auf unserer Webseite vorbeischauen und joomgallery.net jetzt in einer ganz neuen Aufmachung präsentiert bekommen. Yep, wir haben es gewagt, dem Zuhause der JoomGallery ein ganz neues Aussehen zu geben. Ein neues Template, ein neues Logo und - zumindest auf der deutschen Seite - auch ein neues CMS: nein, nein, wir sind Joomla nicht untreu geworden; wir haben nur das "alte" Joomla 1.0.x gegen die aktuelle Version 1.5.x getauscht. Dies hatte mehrere Gründe aber der wohl entscheidenste war, dass wir zeitgleich mit dem Relaunch der Webseite auch unsere nun endlich stabile MVC-Version der JoomGallery (1.5.5) veröffentlichen können (mehr dazu im folgenden Artikel).
Mit diesem entscheidenden Schritt werden auch ein paar "alte Zöpfe" abgeschnitten: zukünftig werden wir uns ausschließlich der Weiterentwicklung der MVC-Version widmen; PonyGallery ML und JoomGallery 1.0.x gehören der Vergangenheit an und werden weder weiterentwickelt noch supportet. Da wir nur ein sehr kleines Team haben ist dieser Schritt unumgänglich, um weiterhin die anfallenden Aufgaben bewältigen zu können. 
A propos kleines Team: mit Ralf (aka Erftralle) ist ein neuer Programmierer zu uns gestoßen, der, nachdem er bereits vorher im Forum seine Qualitäten unter Beweis gestellt hatte, nun auch offiziell dem Team angehört. Wir freuen uns sehr über diesen hochkarätigen Zuwachs.
Aber nun zum eigentlich wichtigen Thema: die neue JoomGallery 1.5.5 Stable (MVC)!  Mehr dazu von Patrick, der ganz erheblichen Anteil daran hat, dass diese Version überhaupt das Licht der Welt erblicken kann (eigentlich hat er sie im Alleingang geschrieben). 
Vielen Dank dafür!

 

Seite 2 von 2

<< Start < Zurück 1 2 Weiter > Ende >>

Uservoice