16. Oktober 2012 | 5 Comments Diese Woche möchte ich euch den bisherigen Fortschritt des Portfolios präsentieren. Es hat sich in der letzter Woche tatsächlich etwas am Code bzw. an unserer Basis-Implementation getan. Natürlich auch am Layout – Ich war fleißig 😉 Was die Code-Basis angeht, so bin ich zum Beispiel auf die Beta Version von RainTPL 3 umgestiegen. Diese Version bietet einige neue Features die ich gerne benutzen möchte: Ganz speziell geht es mir dabei um die Möglichkeit eigene Template-Tags zu definieren. Das sieht in der Praxis folgendermaßen aus: Tpl::register_tag('({i18n=".*?"})', '{i18n="(.*?)"}', function ($params) { // Code... }); Selbst-definierte Tags lassen sich z.B. benutzen für Mehrsprachigkeit – Derzeit bietet nämlich weder RainTPL noch das Slim Framework eine eigenen Lösung. Im RainTPL Forum gibt es zwar ein-zwei Diskussionen bzw. Featurewünsche, doch im Code gibt es noch nichts konkretes. RainTPL v3 nutzt nun auch Namespaces und (laut Entwickler) einen verbesserten Parser mit weniger Quellcode. Ich habe angefangen das Github Repository zu beobachten und bin gespannt wie sich RainTPL in der kommenden Zeit entwickelt. Bisher habe ich übrigens (trotz Beta-Phase) noch keine Fehler gefunden, die mich von der Nutzung abhalten. Nun aber zu den tatsächlichen Änderungen am Code! // Zuerst finden wir die Sprache anhand der Domain heraus. $lang = end(explode('.', $_SERVER['SERVER_NAME'])); if ($lang == 'de') { setlocale(LC_ALL, 'de_DE.utf-8'); } else if ($lang == 'com') { setlocale(LC_ALL, 'en_US.utf-8'); } // Slim Framework sowie RainTPL + Plugins einbinden. require 'Slim/Slim.php'; require 'RainTPL/Tpl.php'; require 'RainTPL/Tpl/Plugin/PathReplace.php'; // Angabe der zu nutzenden Namespaces. use Rain\Tpl, Slim\Slim; // Slim autoloader vorbereiten. Slim::registerAutoloader(); // RainTPL konfigurieren. Tpl::configure(array( "tpl_dir" => "tpl/", "cache_dir" => "tmp/" )); // Plugin zur Verzeichnis-ersetzung aktivieren. Tpl::register_plugin(new Tpl\Plugin\PathReplace()); // Tag für Übersetzungen einbauen. Tpl::register_tag('({i18n=".*?"})', '{i18n="(.*?)"}', function ($params) { // TODO: Funktion zum übersetzen von Strings. }); // Routen definieren. $app->get('/', function () use ($tpl, $app) { $tpl->assign(array( 'title' => 'Es funktioniert!', 'content' => 'Das System funktioniert wie gewünscht.' )); $app->response()->body($tpl->draw('_base', true)); }); // Slim starten. $app->run(); Wenn wir uns den Code genauer ansehen fallen uns folgende Änderungen auf: Sprache wird anhand der Domain („example.de“, „example.com“, …) identifiziert. Alternativ funktioniert dies aber auch via URL Segment – Diese Methode würde sich allerdings auf das Routing auswirken. $lang = current(explode('/', ltrim($_SERVER['REQUEST_URI'], '/'))); Kommentare in Deutsch 😉 Das „Verzeichnis-ersetzen“-Feature von RainTPL wurde als Plugin ausgelagert und muss explizit aktiviert werden Die „Standard“-Pfade von RainTPL haben sich geändert, weshalb ich nun RainTPL’s statische „configure()“ Methode benutze Ein selbstdefiniertes Tag für Übersetzungen (zumindest solange es keins vom Framework selbst gibt) Das gerenderte Template wird an den Body der Slim Framework Response übergeben (nächter Schritt: Einen Wrapper in Slim für RainTPL bauen) Ein erstes Layout Und damit wir auch was schönes zum ansehen haben, hier eine erste Layout-Idee – Natürlich 100% responsive! Ich bin damit noch nicht sehr zufrieden. Das ganze sollte derzeit also eher als eine Art „Arbeitsversion“ angesehen werden. Doch widmen wir uns wieder der technischen Seite! Ziel dieses kleinen Projektes soll natürlich ein Portfolio sein, das sich schnell erweitern und bearbeiten lässt. Es soll also keinen großen Pflegeaufwand geben! Ich stelle mir folgende Logik vor… $app->get('/', function () use ($tpl, $app) { // Erstellen einer Struktur für die Startseite $structure = array( array( 'tpl' => 'text', 'data' => array( 'headline' => 'Hello there' 'paragraphs' => array( 'Paragraph 1', 'Paragraph 2', 'Paragraph 3' ) ) ), array( 'tpl' => 'bars', 'data' => array( 'headline' => 'Skills' 'bar_types' => array( 'PHP' => array( 'Kohana' => 100, 'ProcessWire' => 75, 'Wordpress' => 25, 'Slim Framework' => 50, 'Smarty' => 100, 'RainTPL' => 50 ), 'Javascript' => array( /* ... */ ), 'Misc' => array( /* ... */ ) ) ) ), /* ... */ ); $tpl->assign('structure', $structure); // Das zusammenstellen der einzelnen Elemente passiert im Base-Template. $app->response()->body($tpl->draw('_base', true)); }); Ich hatte die Idee, die einzelnen Seiten mit Hilfe einer kleinen Struktur aus mini-Templates zu definieren! In meinem Beispiel (siehe Quelltext und Layout-Screenshot) gibt es also mini-Templates für „Text“ (Der Einleitungstext mit Überschrift und Paragraphen), „Bars“ (Für die verschiedenen Prozentbalken) und ggf. so etwas wie „projects“ oder vielleicht „gallery“ (Um das ganze schön generisch und wiederverwendbar zu halten – DRY). Die Quelltext-Lösung oben stellt dabei nur die ganz grobe Idee dar – Denn die reinen PHP Arrays werden zwar am schnellsten abgearbeitet, doch wir sind schließlich Entwickler und möchten einen schönen Objekt-Orientierten Ansatz der sich schnell abstrahieren und weiterentwickeln lässt! Vielleicht lässt sich dann die fertige Lösung auch für weitere Projekte nutzen? An dieser Stelle müssen wir also tatsächlich (erstmals) selbst aktiv entwickeln, da uns weder das schlanke Micro-Framework noch die Template-Engine entsprechende Komponenten bietet. Auf dem Plan stehen somit primär zwei Ziele: Die RainTPL Wrapper Klasse für das Slim Framework soll entwickelt werden Es gilt eine Klasse zu erstellen, die uns bei der Strukturierung der einzelnen Seiten hilft. Die Details muss ich erst noch ausarbeiten… Mit diesen Worten möchte ich mich für diese Woche abmelden. Schaut auch nächsten Dienstag wieder rein um zu erfahren wie sich das Projekt entwickelt! Bis dahin wünsche ich allen Lesern und Leserinnen eine angenehme Woche!
Hi! Do you know if they make any plugins to assist with SEO? I’m trying to get my blog to rank for some targeted keywords but I’m not seeing very good results. If you know of any please share. Appreciate it! Antworten
Sie stehen mit der deutschen Grammatik auf Kriegsfuß. Teilweise 4 Rechtschreibfehler in einem Satz. Ein Beispiel von vielen: „Und damit wir auch etwas Schönes zum Ansehen haben, hier eine erste Layout-Idee – natürlich 100% responsive!“ Peinlich, oder? Antworten
Hallo Besserwisser, um ehrlich zu sein: Nein. Aber wenn es dich sehr stört kannst du gerne meine Beiträge Korrekturlesen und dich per E-Mail bei mir melden. Viele Grüße Leo Antworten