// der php hacker

// archiv

Meine erste „Template-Engine“

Geschrieben am 03. Nov 2010 von Cem Derin

Die Resonanz zum Developers Shame Day war überwältigend (Feedback auf Twitter, Facebook und im restlichen Netz). Ich habe ich mich sehr über das zahlreiche Feedback gefreut, und wenn ihr diesen Beitrag hier lest, werdet ihr wahrscheinlich auch in dem ein oder anderen Blog schon ein Stück Schamcode zu sehen bekommen.

Leider habe ich die Trackback-Funktion noch nicht in die Templates einbauen können, aber wenn ihr einen Kommentar mit einem Link hinterlasst, sollte das ja auch erst einmal reichen (zu mal häufig Trackbacks gar nicht bei mir ankommen).

Natürlich stelle ich mich auch den Geistern der Vergangenheit und hab das älteste Stück PHP aus meiner Feder herausgesucht, dass ich finden konnte. Zu dem Zeitpunkt habe ich schon mit PHP mein Geld verdient, habe angenommen, ich wäre ein „fortgeschrittener Programmierer“ und habe das Stück Code in unzähligen Projekten effektiv eingesetzt. Es handelt sich um eine Template-Engine. Früher war sowas beliebt. Früher wusste ich auch nicht, was eine Klasse ist und habe den Begriff inflationär – und falsch – verwendet!

Ich war früher unglaublich stolz, heute blicke ich selbst nicht mal mehr wirklich durch. Aber genug geredet. Ich verstecke mich und ihr dürft gucken!

<?php
     /*
       Template-Klasse v1.1
       von Cem Derin, 2002-2004
     */

       // Array Funktionen

       // Array für einfachen Parser
       function array_simple($srcarray, $name, $key) {
           // Indexzahl des übergebenen Arrays ermitteln
           $icount = count($srcarray);

           // Neues Item hinzufügen
           $srcarray[$icount]['name'] = $name;
           $srcarray[$icount]['key'] = stripslashes($key);

           // Array wieder ausgeben
           return($srcarray);
       }

       // Array für Schleifen-Parser
       function array_loop($srcarray, $addarray) {
           // Indexzahl des übergebenen Arrays ermitteln
           $icount = count($srcarray);

           //Neues Item hinzufügen
           $srcarray[$icount] = $addarray;

           //Array wieder ausgeben
           return($srcarray);
       }

       // Parser-Funktionen

       // Einfacher Parser
       function parse_simple($source, $replace) {
           // Indexzahl des übergebenen Arrays ermitteln
           $icount = count($replace);

           // Quelle ¸bergeben
           $quelle = $source;

           // Counter initialisieren
           $counter = 0;

           //Schleife starten
           while($counter < $icount) {
               // Variable in Quelle ersetzen
               $quelle = str_replace($replace[$counter]['name'], $replace[$counter]['key'], $quelle);

               // Counter erhöhen
               $counter = $counter + 1;
           }

           // Bearbeitete Quelle ausgeben
           return($quelle);
       }

       // Schleifen Parser
       function parse_loop($source, $replace, $loop) {
           // Die Quelle in Array schreiben
           $quelle = split($loop, $source);

           //Die Einträge zählen
           $q_count = count($quelle);

           // Den Quellen-Pointer initialisieren
           $q_counter = 0;

           // Die Routine für jeden Quelleneintrag wiederholen
           while($q_counter <= $q_count) {
	           // Prüfen, ob die Quellzeile eine Loop-Zeile ist
	           if(grade($q_counter) != 0) {
		           // Die Quellzeile ist eine Loopzeile
		           // Ermitteln, wieviele Datensätze der Loop-Array hat
		           $l_count = count($replace);

		           // Loop-Array-Counter initialisieren
		           $l_counter = 0;

		           // Die Routine für jeden Datensatz wiederholen
		           while($l_counter < $l_count) {
			           // Ermittlen, wieviele Items der Datensatz hat
			           $i_count = count($replace[$l_counter]);

			           // Itemcounter initialisieren
			           $i_counter = 0;

			           // Den Rohling erstellen
			           $rohling = $quelle[$q_counter];

			           // Die Routine für jedes Item wiederholen
			           while($i_counter < $i_count) {
				           // Rohling bearbeiten
				           $rohling = str_replace($replace[$l_counter][$i_counter]['name'], $replace[$l_counter][$i_counter]['key'], $rohling); 

				           // Counter erhoehen
				           $i_counter = $i_counter + 1;
			           }

			           // Den Rohling mit den Vorgängern verbinden
			           $output = $output. $rohling; 

			           // Loop-Array Counter erhöhen
			           $l_counter = $l_counter + 1;
		           }

		           // Die neue Zeile eintragen
		           //$quelle[$q_counter] = $output;
		           $return = $return. $output;
		           $output = $NULL;

	           } else {
		           // Eine Grade Zahl, kein Loop
		           $output = $output. $quelle[$q_counter];
	           }

	           // Quellen-Pointer erhöhen
	           $q_counter = $q_counter + 1;
           }

           // Ausgabe
           return($return);

       }

       // Ist eine Zahl grade
       function grade($zahl) {
	       return($zahl % 2);
       }
?>

Und frei zur Verfügung gestellt hab ich das damals auch schon hier! Da gibts sogar noch ne Anleitung!


#001
03. Nov 2010

Oh, das Ding ist schon sehr cool :D Ich frage mich vorallem, warum du extra die beiden Funktionen gebaut hast um die Arrays zu erweitern… ;)

Ich bin echt mal gespannt was noch so von den anderen kommt, dein Blog wird heute auf jeden Fall von mir beobachtet!

Hier ist auch mein Eintrag:
http://www.sven-finke.de/2010/developers-shame-day/

Nicht ganz so viel Sourcecode, da ich ihn nicht mehr habe und auch nicht veröffentlichen dürfte, aber dafür erkläre ich das peinliche Prinzip was dahinter gesteckt hat!

#002
03. Nov 2010

[...] auch alle Kommentare weggelassen… #facepalmMehr Code zum Developers Shame Day findest Du bei:unset hatte mal eine Template EngineDatafreak zeigt sein Backup ScriptDanke Cem für die Idee, ich hatte mein Unterhaltungswert bereits [...]


#003
03. Nov 2010

Ich frage mich gerade, in welche Ecke ich gehen sollte und mich schämen wenn ich mir die Codes so anschaue und eher beeindruckt als abgeschreckt bin… ich sollte anfangen anständig PHP zu programmieren… dringend.


#004
03. Nov 2010
Fabian

Meine Lieblingszeile ist ja $quelle = $source, das ist echt goldig :D

Der Link ist übrigens kaputt, dir ist da eine Klammer reingerutscht.


#005
03. Nov 2010

Finde ich super, dass fast jede Zeile mit einem Kommentar versehen ist :-D Zum Glück wurde dieses Paradigma mittlerweile wieder beerdigt…

Der Vollständigkeit halber hier noch der Link von meinem Beitrag:
http://www.readmore.ch/post/1468830738/developers-shame-day-bb-code-selbstgemacht


#006
03. Nov 2010

Eine “Template-Klasse v1.1″ ohne Klasse ist ne gute Idee. Insgesamt ist diese Möchtegern-Klasse aber schon um längen besser, als meine ersten Gehversuche. Zu bewundern unter:

http://www.udo-telaar.de/shame-day-erste-php-versuche


#007
03. Nov 2010

@Cem: Sammelst du die Einträge irgendwo? Würde gerne ‘ne Liste haben mit allen beschämenden Codestücken. Und ich muss sagen, dass ich bis jetzt führe ;)


#008
03. Nov 2010
Cem Derin

@Nils: Klar, die Pingbacks hab ich alle, ich versuche die im Laufe des Tages mal in den Artikel zu packen. Eventuell schaffe ich es ja noch kurzfristig, die Dinger in Layout aufzunehmen. Anhand der Kommentaranzahl abzüglich der “echten” Kommentare, siehst du zumindest schon mal, wieviele es sind ;)


#009
03. Nov 2010

Eine Sammlung von allen Artikeln wäre schon cool. Leider kommt einem so manches doch ziemlich bekannt vor ;)

#010
03. Nov 2010

[...] PHP Hacker [...]


#011
03. Nov 2010

So, mein Beitrag zum Developers Shame Day 2010:

http://flabben.net/2010/11/03/developers-schame-day-2010.html


#012
03. Nov 2010
Martin Kuckert

Ich musste erstmal tief in meiner Backup-Festplatte kramen, um was passendes zu finden. Aber hier mein Schnippsel: http://pastebin.com/iAHrqnRy

Welchen Hintergrund auch immer die Funktionen hatten. Ich habe keinen Aufrufpunkt mehr ausfindig machen können…


#014
03. Nov 2010

Hab auch gruseliges bei mir auf der Festplatte gefunden: http://www.phpdevblog.net/2010/11/developers-shame-day-dear-god.html

#015
04. Nov 2010

[...] die Funktionen immer noch keiner (oder zumindest nicht, warum man nicht die nativen genommen hat). Veröffentlicht hab ich diese im Rahmen des „Developers Shame Day“. Deswegen nicht hier nochmal [...]

// kommentieren

// senden
theme von mir, software von wordpress, grid von 960 grid system. funktioniert in allen browsern, aber der safari bekommt das mit der schrift am schönsten hin.