Template-Overrides

  • Gelesen 82961 mal
Artikel bewerten
(24 Stimmen)

Ein paar kleine Notizen zum zuvor gelernten ...und dann gehts in die mächtigen Template-Overrides. Du solltest dir hier etwas Zeit nehmen um zu verstehen was Joomla-Template-Overrides überhaupt sind und für was sie gut sind.

 

Mit dem theoretischen Teil sind wir nun durch. Weiter mit dem praktischen Teil!

Mit der Theorie aus den Teilen zuvor sollten wir in der Lage sein, unser Template zu erstellen. Das heißt, dass wir html-Tags in die index.php hineinschreiben und die CSS-Befehle in die template.css schreiben. Auf diesen Vorgang werde ich nicht genauer eingehen, dies ist normale Webdesigner Arbeit.

Dennoch ein paar Joomla-spezifische Tricks, mit der die Erstellung ein wenig schneller und einfacher geht.

Eine grafische Vorlage der neuen Webseite bekommt man in der Regel vom Grafiker oder hat diese selbst ausgearbeitet. Daraus erfahren wir, wo die Menüs, sprich Module auf der Webseite platziert sind.

Erinnern wir uns an die Schul-Mathematik mit "Gegeben - Gesucht - Lösung" wissen wir von den Gegebenheiten der einzelnen Template- Positionen ( <position> ).

Bei der Namensgebung kann man seine eigenen Namen verwenden. Joomla lässt uns vollkommen freie Hand. Leerzeichen und Sonderzeichen sind natürlich tabu, Unterstriche zur Worttrennung sinnvoll.

Auf geht's zur templateDetails.xml zu den Postions und kreieren für jede Module-Position einen eigenen Tag. Das geschieht ungetestet bzw. "stumpf rein". Der nächste Weg führt uns wieder in die index.php dort tragen wir die gerade eben erstellten Positionen via <jdoc:include type="modules" name="jede-positon-die-wir-gerade-erstellt-haben" /> ein. Sinnvollerweise gleich an die richtige Stelle.
Solltet ihr bereits den Browser aktualisiert haben, werden die Ergebnisse dürftig sein. Warum? Wir haben uns gerade die Möglichkeit für die Anzeige geschaffen. Also Tatsachen schaffen!

Im Joomla Backend erstellen wir der Reihe nach die Module die auf der Webseite angezeigt werden sollen. Bevor ihr speichert, unbedingt die Position auswählen wie sie in der templateDetails.xml und in der index.php eingerichtet wurde. Selbstverständlich sollte das Modul auch aktiviert (published) sein, ebenso sollte das Modul mit Inhalten belegt sein.

Wenn man nicht so richtig zu Rande kommt, einfach ein "leeres Module" mit ein wenig Inhalt erstellen und dies auch der gewünschten Position zuordnen. Wurden Module bereits erstellt, dann reicht es aus, die Position anzupassen.

...damit sind wir mit den Zusammenhängen und Grundaufgaben für die Erstellung eines Joomla- Templates durch.

Dem ein oder anderen wird aufgefallen sein, das wir in früheren Joomla-Versionen den language-tag in der templateDetails.xml hatten. Dies ist seit der Joomla-Version 1.6 nicht mehr nötig. Wir installieren nur den Sprachordner für das Template und lassen ihn auch dort. Joomla findet die Sprache ohne Umwege im Template.

 

Was sind Template-Overrides in Joomla?

Auf den Punkt gebracht, wird das jeweilige Komponenten-Layout im Template-Ordner gesucht bzw. verwendet. Es wird dabei nicht das eigentliche Template überschrieben, sondern ein anderes Komponenten-Layout verwendet. Das klingt sicher sehr trocken. Nehmen wir ein wenig den Zauber aus dem großen Wort "Template-Override" und portionieren das Ganze in leicht verdauliche Häppchen. Jeder Webseiten-Betreiber möchte seiner Seite ein individuelles Design verpassen, man möchte sich ja von anderen Webseiten unterscheiden. Gehen wir davon aus, dass wir ganz normal Inhalte über die Joomla Standard Komponente anzeigen wollen, können wir das Design beeinflussen in dem wir beispielsweise das pdf-Icon und das mail-to-friend-icon abschalten können. So wirklich angepasst und individuell ist das Design dann noch nicht. Der erste und nachvollziehbare Weg, wäre die passende Datei zu suchen und deren Code umzuschreiben. In unserem konkreten Fall ist das die Datei: joomla-root/components/com_content/views/article/tmpl/default.php.

Hier ein dickes STOP. Wir ändern niemals nur irgendetwas an den Joomla-Kerndateien oder an den Komponenten-Dateien wenn es um das Design geht. Wir müssen dort nichts verpfuschen. Dies würde dramatische Auswirkungen auf das nächste Joomla-Update haben, denn dann sind alle Änderungen futsch.

Wer natürliche Hemmungen hat, Template-Overrides einzusetzen, weil der Name "Override" auftaucht, den kann ich beruhigen und versichern das hier nichts überschrieben im Sinne von unwiderruflicher Veränderung oder Ähnlichem passiert.
Joomla hat einen Mechanismus eingebaut, bei dem es mögliche Plätze für die Overrides abklappert und das verwendet, welches in der Hierarchie am höchsten steht. Die Schritte, die Joomla dafür geht, möchte ich hier kurz schematisch darstellen.

ein Nutzer klickt einen Link zu einem Artikel

  • Ein Klick über einen Link kommt rein
  • Joomla sucht den Artikel und holt diesen aus der Datenbank
  • Joomla prüft, welches Template auf Standard gesetzt wurde
  • Nun schaut Joomla, ob die Datei joomla-root/templates/test-template/html/com_content/article/default.php existiert
  • Ist dies der Fall, wird der Inhalt aus der Datenbank hierüber ausgegeben. Die Datei joomla-root/components/com_content/views/article/tmpl/default.php wird ignoriert
  • Falls nicht (dies ist der original Zustand) nimmt Joomla joomla-root/components/com_content/views/article/tmpl/default.php zur Ausgabe

Was können wir daraus ableiten?

Dass Joomla sich den erstbesten Pfad bzw. die erstbeste Datei sucht, um seine Inhalte auszugeben. Sollten wir keine Overrides verwenden, ist dies auch egal, Joomla hat sein eigenes Komponenten-Layout.
Der Sinn und Zweck der Verwendung von Overrides ist es, seine eigenen Anpassungen vorzunehmen ohne den Kern der Anwendung zu berühren.
Um den letzten Zweifel an den Overrides zu beseitigen kann man hier ganz einfach sagen, dass bei den Overrides lediglich der "bessere" Pfad und somit die "eigene" Datei genommen wird.

Persönlich halte ich diese Art der flexiblen Erweiterung als einen Segen, da ähnliche Overrides für die Komponenten-Programmierung usw. zur Verfügung stehen.

 

Wo finde ich was?

Die Template-Overrides müssen im augenblicklichen Template unter html abgelegt werden. Die Overrides greifen nur, wenn dieses Template aktiv ist und im selben die Overrides liegen.

Der Ablageort für die Overrides setzt sich aus den folgenden Ordnern zusammen:

  • joomla-root/templates/
    • /test-template (das temlpate das wir gerade verwenden)
      • /html (dies ist der Ordner in dem wir alle Template-Overrides ablegen)
        • /com_content (dies ist der Komponenten-Name für einen Joomla Artikel)
          • /article (dies ist der View für die tatsächliche Anzeige des Artikels)

An dieser Stelle ist sicher eine Art Merksatz oder Arbeitsfolge hilfreich.
Also, zum Template navigieren, html Ordner anlegen falls nicht vorhanden, einen Ordner mit dem Komponenten Namen anlegen, einen Ordner für den View anlegen und alles was in der Komponente und diesem View im Ordner tmpl liegt hier herein kopieren.

Sollten diese Ordner nicht vorhanden sein, legt ihr diese am besten der Reihe nach und mit einer "leeren" index.html Datei an.

Als nächstes kopieren wir uns die betreffenden Joomla Originaldateien.

Konkret alle Dateien die sich im Ordner joomla-root/components/com_content/views/article/tmpl/ befinden kopieren wir in den zuvor besprochenen Ordner joomla-root/templates/test-template/html/com_content/article/.

Wer nun feststellt, dass in unserem Overrides-Ordner weder der Ordner "views" noch "tmpl" auftaucht, keine Sorge das ist richtig so.

Jetzt Testen wir!

Wir wollen nun wissen, ob unsere Bemühungen Früchte getragen haben. Kurz und schmerzlos die frische (joomla-root/templates/test-template/html/com_content/article/) default.php öffnen und einen <h1>Ja, ich habe erfolgreich ein Override für den article default view erstellt</h1> Satz eintragen.

Im Browser rufen wir nun irgend einen Artikel auf. Das Ergebnis sollte selbstredend erscheinen.

Ab diesem Punkt könnt ihr den View anpassen wie ihr wollt. Wenn etwas schief geht, kann man immer wieder die Original-Datei als Ausgangspunkt nehmen.

 

Zum Schluss

Die Overrides gehen mit den Joomla-Kern-Komponenten problemlos. Zumindest kann ich mich nicht erinnern, dass ich hier Unannehmlichkeiten hatte. Anders sieht es bei nachträglich installierten Komponenten aus. Hier trennt sich oft die Spreu vom Weizen, da sich nicht jedes Entwickler-Team an dieses Klasse Joomla-Feature gehalten hat und somit die Overrides nicht unterstützen. Schaut einfach bei den Herstellern vorbei und schaut, ob diese die Template-Overrides unterstützen. Sollte dies nicht der Fall sein, kann ich aus meiner Erfahrung sagen, ohne triftigen Grund des Entwicklers "Finger weg". Diesen Override-Mechanismus, der während der Komponenten-Entwicklung der einfachste Mechanismus ist, nicht zu berücksichtigen ....naja.