Ordnung in Template- & Funktions-Dateien zu halten ist bei größeren Projekten schwer und bei längeren Projekt enorm wichtig. Um Ordnung zu halten trenne ich meine Dateien in ‚Daten‘ & ‚Template‘.
Oft wird man mit fremden Templates oder eigenen Templates aus düsterer Vergangenheit konfrontiert und ärgert sich, dass man sich nicht zu recht findet. Kleinste Änderungen am HTML Markup oder wenn Daten aus einer zusätzlichen Quelle ( z.B. Post-Options, oder Theme-Settings ) kommen sollen, machen einem das Leben schwer. Vor allem macht es unübersichtlichen Code noch unübersichtlicher.
Mein System, um Ordnung zu halten ist die Trennung in verschiedene Bereiche. In Template Files sieht sie Trennung so aus:
- Daten & Inhalte generieren
- Inhalte in ein HTML Template setzen
und in Funktions Files (z.B. um HTML Snippets, wie Bildern zu generieren):
- Template(s) als String mit Platzhaltern
- Daten & Inhalte generieren
- Inhalte ins HTML Template setzen
Hier sind zwei Code-Beispiele wie das in der Praxis aussieht. An einem einfachen Beispiel: Ich will einen Blog-Post Teaser generieren, mit einem Thumbnail und dem Post Title als Link. Zu erst speichere ich mir die Post-ID auf eine Variable & den Blog Title. Danach speichere ich mir auf verschiedene Variablen die HTML-Blöcke für die Vorschau-Bilder ( Thumbnails ). Wenn ich alle korrekten Daten habe, setze ich sie in HTML Gerüst am Ende der Datei ein. Hier gibt es keine IF’s oder LOOPS mehr, nur noch die echten Daten. Wenn ich jetzt später an den Daten oder am HTML was ändern muss, sehe ich sehr leicht wo ich ansetzen muss.
Im zweiten Beispiel ist der Code drin, wie ich den HTML Block für das Bild-Snippet generiere. Zu erst habe ich eine HTML-Template Variable, diese ist meistens ein ARRAY() das ich später zwischen verschiedenen Template wählen kann – in dem Beispiel ist es jetzt nur ein Template. In diesem sind PLACEHOLDER drin, z.B. %IMAGESOURCE% – diese werden später durch entsprechende Werte ersetzt. Nach dem Template generiere ich wie im Beispiel davor alle meine Daten und speichere diese auf klar benannten Variablen ab. Im dritten Teil ersetze ich per strtr() alle PLATZHALTER im Template durch meine generierten Daten und gebe per return mein HTML Snippet aus.
Dies sind jetzt einfache Beispiele, aber lassen sich aber sehr komplex skalieren. Sie sind vor allem Sinnvoll, wenn mit vielen Eingaben des Nutzers über Meta-Boxen, Post-Options, oder Theme-Settings rechnen muss. Oder es viele IF-Entscheidungen und LOOPS gibt.
Das dritte Beispiel unten, ist wie ich in diesem WordPress-Blog einen einzelnen Post generiere. Hier muss es Abfragen geben wie:
- Was ist der Post-Thumbnail
- Welche weiteren Bilder wurden hoch geladen
- Entferne aus den weiteren Bildern das Thumbnail (das es keine Dopplung gibt)
- Prüfe ob es Code-Blöcke gibt und gib diese auch mit den Media-Dateien aus
Und mit der oben beschriebenen Struktur, ist es aber auch nach einem Jahr oder für fremde Personen leicht, heraus zu finden, wo sie bei einer Änderung ansetzen müssen – Und vor allem: Ohne die Code-Struktur kaputt zu machen!