Schnelles GPTPL 2.4 Template System

Status
Für weitere Antworten geschlossen.

ABC

abgemeldet
21 April 2006
3.851
444
Hier habe ich für euch ein GPTPL Template System:
Das GPTPL ist ein kleines aber durchaus Leistungsintensives Templatesystem welches seine Templates zwischenchachen kann und somit in den Benchmarks sich ganz klar von anderen OSS Templatesystemen abhebt!

Lizenzbestimmungen:
Jeder darf das GPATPL in Version 2.3 und höher frei verwenden. Für kommerzielle oder auch nicht kommerzielle Zwecke, so lange das Template System als Bestand eines Projektes ist, darf es auch frei unter diesen Lizenzbestimmungen weitergegeben werden, verkauft oder vetrieben werden.
Das TPLSYSTEM darf in keinester Weise als Produkt vertrieben werden, wenn es nicht als Bestand eines Produktes ist, und oder von dem Produkt zur berechnung von Templates verwendet wird.
Ich übernehme keinerlei Haftung für jegliche Schäden die durch die Nutzung der Software entstehen können, weder an den Lizenznehmer noch an dritte.
Der Code darf in keinster Weise verändert an dritte weitergegeben werden. Die Hinweise auf den Autor dürfen nicht aus der PHP Datei entfernt werden!
Wer den Lizenzbestimmungen zu wieder handelt für den gilt die Lizenz als erloschen, und somit auch allen dritten, welchen der Lizenznehmer die Software weitergeben hat.

gptpl.php
PHP:
<?
//======================================================
// TPL LIB VERSION 2.1 | 18.06.2007 | TPLLIB2.4        =
//======================================================

//UP. 2.2 Kleine Lücke ausgebessert. $Zeichen bei der Rueckgabe umschreiben
//UP. 2.3 Erweiterung auf Part Verteilte Templates
//UP. 2.4 Doppelte Einlesung von der Festplatte durch ?file_get_contents() ausgebaut

//-----> Definition <------||
$_reg_comp['TPLLIB'] = 2.4;

//-----> Einstellungen <-----||
$_TPLLIB_TPLDIR = 'templates'; //Ordnername zum Templateordner ohne (/) am Ende! Auch absoluter Pfad möglich und https:// Pfad falls Templates auf einem anderen Server liegen.
$_TPLLIB_CACHE = 1; //1 -> Template Cache an. Hat den Vorteil dass der Server die Templates jeweils nur einmal von der HDD ausliest, und dann für ernuete Verwendungen im Speicher bereit hält bis das Script verarbeitet wurde. | 0 -> Template Cahce ist aus. Es wird jedes mal das Template von der HDD ausgelsen, verbleibt aber dafür nicht bis zum Scriptende im Speicher.


/*=======================================================
Author:
GPTPL ist eine TPLIB von (c) Herrn Ceglarski Lukasz. Unter Einhaltung der Lizenzbestimmungen ist die Software für die Verwendung zu kommerziellen sowie nicht komerziellen Zwecken gestattet! 
========================================================*/



function call_return_value($notlocal_int) 
{
    if((eregi('->',$notlocal_int) && eregi('\[',$notlocal_int)) || eregi('->',$notlocal_int)) 
    {
        $notlocal_int = explode('->', $notlocal_int);
        @eval('global $'.$notlocal_int[0].'; $notlocal_var = $'.$notlocal_int[0].'->'.$notlocal_int[1].';');
        return str_replace('$', '$',$notlocal_var);
    } 
    elseif(eregi('\[',$notlocal_int)) 
    {
        $notlocal_int_0 =  preg_replace("/([^\[]*)\[(.*)\]/",'\\1',$notlocal_int);
        $notlocal_int_1 =  preg_replace("/([^\[]*)\[(.*)\]/",'\\2',$notlocal_int);
        @eval('global $'.$notlocal_int_0.'; $notlocal_var = $'.$notlocal_int_0.'['.$notlocal_int_1.'];');
        return str_replace('$', '$',$notlocal_var);
    } 
    else 
    {
        @eval('global $'.$notlocal_int.'; $notlocal_var = $'.$notlocal_int.';');
        return str_replace('$', '$',$notlocal_var);
    }
    return ''; //empty
}



function call_template($tplname,$part = '') 
{
    global $_TPLLIB_TPLDIR, $_TPLLIB_CACHE, $_TPLLIB_PROTOKOLL, $_TPLLIB_PART;
    if ($_TPLLIB_CACHE == 1) 
    {
        global $TPLLIB_TEMPLATES;
        if (!isset($TPLLIB_TEMPLATES[$tplname])) 
        {    
            $TPLLIB_TEMPLATES[$tplname] = @file_get_contents($_TPLLIB_TPLDIR.'/'.$tplname);
            if(empty($TPLLIB_TEMPLATES[$tplname]) && !file_exists($TPLLIB_TEMPLATES[$tplname]))
            {
            	die('TPLLIB ERROR 01: Ein Template ist nicht vorhanden! Das Template ('.$tplname.') konnte nicht gefunden werden.');
            }
            $x = explode('<!--#part#',$TPLLIB_TEMPLATES["$tplname"]);
            for($i = 0; $i <= count($x)-1; $i++)
            {
                $dt = explode('#part#//-->',$x[$i]);
                $_TPLLIB_PART[$tplname][$dt[0]] = $dt[1];
                unset($dt);
            }
        }
    } 
    else 
    {
        $TPLLIB_TEMPLATES[$tplname] = @file_get_contents($_TPLLIB_TPLDIR.'/'.$tplname);
        if(empty($TPLLIB_TEMPLATES[$tplname]) && !file_exists($TPLLIB_TEMPLATES[$tplname]))
        {
            die('TPLLIB ERROR 01: Ein Template ist nicht vorhanden! Das Template ('.$tplname.') konnte nicht gefunden werden.');
        }
        $x = explode('<!--#part#',$TPLLIB_TEMPLATES["$tplname"]);
        for($i = 0; $i <= count($x)-1; $i++)
        {
            $dt = explode('#part#//-->',$x[$i]);
            $_TPLLIB_PART[$tplname][$dt[0]] = $dt[1];
            unset($dt);
        }        
    }
    
    if (!empty($part))
    {
        $template = $_TPLLIB_PART[$tplname][$part];
    }
    else 
    {
        $template = $TPLLIB_TEMPLATES[$tplname];
    }
    
    $muster = array(
        '/(\$)([a-z0-9_]*\[[a-z0-9_\[\]\'"]*\])([^\]])/miUe',
        '/(\$)([a-z0-9_]*\[[a-z0-9_\[\]\'"]*\])([^\]])/miUe',
        '/(\$)([a-z0-9_]*|[a-z0-9_]*\[[a-z0-9_\[\]\'"]*\]|[a-z0-9_]*->[a-z0-9_]*\[[a-z0-9_\[\]\'"]*\]|[a-z0-9_]*->[a-z0-9_]*)([^a-z0-9->_\'"\[\]])/miUe',
        '/(\$)([a-z0-9_]*|[a-z0-9_]*\[[a-z0-9_\[\]\'"]*\]|[a-z0-9_]*->[a-z0-9_]*\[[a-z0-9_\[\]\'"]*\]|[a-z0-9_]*->[a-z0-9_]*)([^a-z0-9->_\'"\[\]])/miUe',
        '/(\$)([a-z0-9_]*\[[a-z0-9_\[\]\'"]*\]|[a-z0-9_]*->[a-z0-9_]*\[[a-z0-9_\[\]\'"]*\]|[a-z0-9_]*->[a-z0-9_]*|[a-z0-9_]*)([^a-z0-9_>\[\]])/miUe',
        '/(\$)([a-z0-9_]*\[[a-z0-9_\[\]\'"]*\]|[a-z0-9_]*->[a-z0-9_]*\[[a-z0-9_\[\]\'"]*\]|[a-z0-9_]*->[a-z0-9_]*|[a-z0-9_]*)([^a-z0-9_>\[\]])/miUe',
    );
    return preg_replace($muster,"''.call_return_value('\\2').return_escape_template('\\3').''",$template);
}

function return_escape_template($int) 
{
    if ($int == '\"') 
    {
        return '"';
    } 
    else 
    {
        return $int;
    }
}
?>


Installation:
1.) Die datei gptpl wird in ein Verzeichnis (Beispielweise includes) abgespeichert und vor der Verwendung 1x eingebunden. Beispiel:
PHP:
<?
require('includes/gptpl.php');
?>

2. Es wird ein Verzeichnis für die templates angelegt. Beispiel templates/ welches künftig für die Templatedateien Platz hat. Dieses Verzeichnis wird in der gptpl.php in der Variable $_TPLLIB_TPLDIR vermerkt! Bitte kein (/) Backslash am Ende!
PHP:
<?
$_TPLLIB_TPLDIR = 'templates'; //Ordnername zum Templateordner ohne (/) am Ende! Auch absoluter Pfad möglich und https:// Pfad falls Templates auf einem anderen Server liegen.
?>

3.) Cacheeinstellungen in der gptpl.php vornehmen. Hierzu dient die Variable $_TPLLIB_CACHE! Eine Beschreibung findet ihr im Sourcecode. (1=Chachen = Highspeed)


Funktionsbeschreibung:
Das einfache an diesem Templatesystem ist, dass ihr euch nur um eine Einzige Funktion kümmern müsst.

call_template(TEMPLATE, [optional Template part]);

Liefert das fertig berechnete Template oder [Optional] Template Part zurück.


Anwednungsbeispiele:
Im folgenden erstellt ihr euch ein Template in euren Template Ordner:

test.php.html

HTML:
<html>
	<head>
		<title>test.php</title>
	</head>
	<body>
		Hallo mein name ist $mein_name!<br>
	</body>
</html>

Wie ihr erkennen könnt schreib ihr euch enfach die Variablen die künftig im PHP Code bestehen sein sollen und im Template ersetzt werden sollen einfach in den Code herein. Das macht die Sache sehr simpel. Ihr könnt auch Ruhig Array Variablen und oder Objektvariablen einschreiben!

Im zweiten Zug wird eine PHP Datei erzeugt:
test.php
PHP:
<?php
require('includes/gptpl.php');
$mein_name = 'Mustermann';
echo call_template('test.php.html');
?>


Beispiel: Arbeiten mit Template Parts:
Das GPTPL beitet die Möglichkeit mit Template Parts zu arbeiten. In diesem Beispiel wird gezeigt wie einfach das geht.

Die Parts werden wie folgt im Template markiert:
test.php.tpl
HTML:
<!--#part#anfang#part#//-->
<html>
	<head>
		<title>test.php</title>
	</head>
	<body>
	<!--#part#hallo#part#//-->
		Hallo mein name ist $mein_name!<br>
	<!--#part#wiedersehen#part#//-->
		Auf wiedersehen!<br>
	<!--#part#ende#part#//-->
	</body>
</html>

Dabei handelt es sich um ein HTML Kommentar:
<!--#part#parname#part#//-->

Dabei sollte man wissen, dass der Parser künftig diese Parts in einem Array verwalten wird. Deshalb ist der Partname als zulässiger PHP Arrayschlüssel zu wählen. Möglich ist daher:
<!--#part#name#part#//--> oder
<!--#part#name_2#part#//-->

Nicht möglich wären Partnamen wie:
<!--#part#teil 1#part#//--> oder
<!--#part#Hier ist der Part vom Tabellen Kopf#part#//-->

Damit der Parser nie bestehende HTML Kommentare angreift ist das ..#part#.. nie zu entfernen! Ein Template kann unendlich Partteile beinhalten. Der Parser wird jeweils nur das nötige welches Angefordert wird berechnen.

Um das zu verdeutlichen
test.php
PHP:
<?php
require('includes/gptpl.php');
$mein_name = 'Mustermann';
//wir geben den Part anfang aus
echo call_template('test.php.html','anfang');
//wir geben den Part hallo aus
echo call_template('test.php.html','hallo');
//der part wiedersehen wird nicht ausgegeben!
//wir geben den part ende aus
echo call_template('test.php.html','ende');
?>


Komplexes Beispiel: Eine dymamische Tabelle entsteht!
test.php.html
HTML:
<!--#part#anfang#part#//-->
<html>
	<head>
		<title>test.php</title>
	</head>
	<body>
	<!--#part#tabellenkopf#part#//-->
		<table border="1" cellpadding="2" cellspacing="2" align="center">
			<tr valign="middle">
				<td align="center">
					<b>Zeilenzahl:</b>
				</td>
			</tr>
			<!--#part#zeile#part#//-->
			<tr valign="middle">
				<td align="center">
					$i
				</td>
			</tr>
			<!--#part#tabellenfuss#part#//-->			
		</table>
	<!--#part#ende#part#//-->
	</body>
</html>

test.php
PHP:
<?php
require('includes/gptpl.php');
//wir geben den Part anfang aus
echo call_template('test.php.html','anfang');
//wir geben den Part tabellenkopf aus
echo call_template('test.php.html','tabellenkopf');
//Wir möchten mehrfach den Part zeile ausgeben mit unterschiedlichen Inhalten!
for ($i = 1; $i <= 30; $i++)
{
	echo call_template('test.php.html','zeile');
}
//wir geben den part tabellenfuss aus
echo call_template('test.php.html','tabellenfuss');
//wir geben den part ende aus
echo call_template('test.php.html','ende');
?>


Beispiel Templatevererbung:
Das GPTPL bietet die Möglichkeit einem Template mehrere Templates oder Templatesparts zu vererben. Dahinter steckt, es ist von Grund auf nicht wichtig welche Reihnenfolge ihr bei der Programmierung verwendet. In diesem Beispiel möchte ich zeigen wie das funktioniert.

Nehmen wir an eine Webseite hat immer einen Header Part und einen Footer. Wir können uns hier diese Geschichte sparen. Wir fassen unseren Header Part und Footer Part zusammen!

main.php.html
HTML:
<html>
	<head>
		<title>Header und Footer</title>
	</head>
	<body>
Link1 Link2 Link3<br><br>
		$site_inhalt
	</body>
</html>

Wie ihr seht ist der Header und der Footer in einem einzigen Template gespeichert. Dazu wollen wir je nach Seite einen Inhalt in das Template einbringen.

lala.php.html
HTML:
<font color="Green">
	<b>Ich binn hier das lala.php.html Template! Es ist jetzt $zeit Uhr!</b>
</font>

dazu wird einfach wie folgt vorgegangen:
PHP:
<?
require('includes/gptpl.php');
//Wir berechnen die Zeit für das Template lala.php.html dabei sind wir nicht gebunden an eine Reihenfolge
$zeit = date("H:i:s"); 
//wir füllen die Variable $site_inhalt mit dem Inahlt des brechneten Templates lala.php.html
$site_inhalt = call_template('lala.php.html');
//nun vererben wir das Template an unser Main Template
echo call_template('main.php.html');
?>

Die Folge ist, das lala.php.html Template steckt nun sicher im main.tpl.html drin am richtigen Ort.

Ich wünsche viel Spass! (Fragen können gebpostet werden).
 
Zuletzt bearbeitet:
Hi ABC,
sicherlich hast du einiges an Aufwand in GTPL investiert, darum fällt es mir nicht leicht, es jetzt so zu zerreißen, aber ich habe da doch einige Kritikpunkte:
  1. Variablenparsing per eval()
    Ginge es um erweiterte Funktionen (z.B. die aus Smarty bekannten Modifier), könnte ich ja noch drüber hinwegsehen, aber so ist das imho ein absolutes don't!
  2. Globale Variablen
    Solange man alle Templates selbst schreibt und diesen somit vertrauen kann, ok, aber prinzipiell ist ein uneingeschränkter Zugriff auf alle Variablen ein Sicherheitsrisiko.
  3. Verwendung von ereg()
    Mal abgesehen davon, dass ereg() bekanntlich wesentlich langsamer ist als preg_match(), ist ein Regulärer Ausdruck an der Stelle overkill. Die String-Funktionen hätten vollkommen ausgereicht.
  4. Doppelter Code
    Dein Caching in allen Ehren, aber wieso musstest du deshalb den Parsing-Code zweimal schreiben. Den hättest du doch genausogut hinter die if-Abfrage setzen können.
  5. Das Part-System
    Prinzipiell eine gute Idee, aber die Tatsache, dass der Programmierer jeden Part einzeln parsen lassen muss, hebt die Trennung von Logik und Design wieder auf.
  6. Die Lizenzbedingungen
    Der Code darf in keinster Weise verändert an dritte weitergegeben werden. Dadurch scheidet eine Verwendung für mich komplett aus, denn irgendwas habe ich an jedem Script auszusetzen, das ich mir runterlade, folglich passe ich es meist an meinen Bedarf an. Wenn ich es schon bei kleinsten Veränderungen nicht mehr weitergeben darf, ist das somit sehr ungünstig.

Ja, gäbe da noch ein paar Pünktchen, aber muss jetzt los...

Gruß,
MrToiz
 
1. Wo siehst du das 8O
2. Wo ist ein uneingeschränkter Zugriff möglich?
Schon mal ausprobiert? Daten aus einer DB Eingabe, Formular oder sonstwas bekommst du dort 100% nicht durch. Er parst nur das Template. Da wird nichts per eval geparst was ausführbar wäre.
3. Das ist ein Vorschlag den ich durchaus nachvollziehen kann.
4. Das hat den Hintergrund, dass es mit Vorgängerversionen kompatibel ist und auch nach diesen Versionen vartan erweitert werden kann.
5. Das stimmt eventuell schon aber es würde kein Problem sein es zu erweitern. Ich nehme das als sinnvollen Ereweiterungsvorschal entgegen.
6. Es gibt halt viele die meinen das ein wenig abzuändern und dann unter ihren Namen verkaufen zu können. Ich habe das zigfach erlebt. Ich möchte hiermit nur Hilfe anbieten. Dabei will ich keine Schranken schließen. Wenn einer Proviat anfragt kann man ein Auge zudrücken.

Aber ich bin dir für jeden Verbesserungsvorschlag dankbar!

Im allgemeinen ist dies halt eben kein Wunschkonzert. Ich habe meine Arbeit so getan und setze diese auch so ein. Aber wie gesagt. Probiers mal einfach aus, ob du was durch den Parser bekommst, was nicht im Template liegt. DB Formular oder ähnliches.

Ich habe schon viel über das eval() angehört. Aber es stellt eben halt das dar was ich mir damit gedacht habe. Und womit ich mich beschäftigt habe. Ich wollte ein simples System, welches schnell und einfach bei der Entwicklung ist. Sicher ist das auch. Es sei den du schreibst in dein Template selbst bösen Code. Es schreiben viele, über das eval() aber noch keiner konnte mir ein Beispiel liefern, wo das ausgenutzt werden konnte. Jedem habe ich das so geschrieben wie dir. Deshalb versuche es mal aus den Parser auszunutzen. Das wird dir nicht gelingen!! Gerade das Eval ermöglicht mir nicht laufen jede Variable freigeben zu müssen. Und ich behaupte wer das unset() nicht kennt, der hat ein ganz anderes Problem.

Das sind Ansichtsachen. Mehr nicht. Schau dir einfach mal wie oft die Eval Funktion in den Grundscripten von PHP genutzt wird. Da müsste es einem schlecht werden. Eval() ist gefährlich wenn man damit Dinge macht von den man keine Ahnung hat. Aber im allgeminen ist die eine Sinvolle Funktion.

Zum Verständnis warum du den Parser nicht ausnutzen kannst:
1.) der Parser müsste erst den Code über eine Variable einparsen
2.) Dabei wird immer das $- Zeichen aufgelöst. Kann also nie nochmal geparst werden.
3.) Der Parser kann nur str_replace nutzen. Dahinter er kann nur den Inhalt einer Variable ausgeben. Nie ausführen.
4.) Der Parser parst immer aus dem Template. Dahinter du kannst keinen Code durch den Parser jagen. Er akzeptiert nur das Template selbst. Du kannst nicht ein Template parsen und dann einfach nochmal durch den parser jagen. Denn die funktion würde sofort auf das blanke Template zurückgreifen. D.h. ein berechnetes Template (Ergebnis) lässt sich nicht erneut Parsen. Nur die Rohschrift das Template selbst wird geparst. Also kannst du dort versuchen einzubringen was du nur magst. Er holt sich das Template immer von der HDD oder aus dem Cache. Er wird aber nie an eine DB oder Formulareingabe oder sontiges zu parsen kommen. Sollte ja an Hand des Codes klar sein. Weil er liefert dir das Ergebnis zurück. Greift aber bei erneutem in sein Cache und parst von dort aus oder von der HDD.

Die Ausnutzung ist dort unmöglich.

Danke für dein Feedback!

P.s. Hier habe ich dir ein Beispiel aus der Anwedung eines Gästebuches:
HTML:
<!--#part#seitenanfang#part#//-->
<h3><strong>Gästebuch<sup></sup></strong> $_wb_sitetitel </h3>
<div class="content">
<!--#part#formular#part#//-->
<a name="eintragen"></a>
<form action="$_wb_url/gaestebuch.htm#eintragen" method="POST">
<p><font color="red">$fehler</font><br>
<strong>Name Vorname:</strong><br>
<input type="text" name="g_autor" value="$_POST['g_autor']" maxlength="100" size="50"><br>

<strong>Webseite:</strong><br>
<input type="text" name="g_website" value="$_POST['g_website']" maxlength="100" size="50"><br>

<strong>E-Mail:</strong> (Zwecks Rückfragen)<br>
<input type="text" name="g_email" value="$_POST['g_email']" maxlength="100" size="50"><br>

<strong>Eintrag:</strong><br>
$_SMILEYLIB_ALLSMILEYS
<br>
<textarea name="g_msg" id="texteingabe" style="width: 420px; height: 150px;">$_POST['g_msg']</textarea><br>
<br>
<div align="right"><input type="hidden" name="gbetr" value="1"><input type="submit" name="absenden" value="eintragen"></div>
</form>
</p>
<div class="foot"></div>
<div class="divider"></div>
<!--#part#seiten_nav#part#//-->
$seiten_nav[0]<br>
<!--#part#gbeintr_ausgabe#part#//-->
<table border="0" cellpadding="0" cellspacing="0" align="center" width="99%" style="border: none; padding: 0px;">
<tr valign="middle">
	<td class="gb_titel" style="border: 1px solid #522c00; border-right: none; background: url('$_wb_url/images/gb_bg.gif');" align="left" width="8%"><img src="$_wb_url/images/icons/message.png" border="0" align="absmiddle" alt="Gästebuch Eintrag"><b>#</b><a name="b$row['id']"></a>$row['id']</td>
	<td class="gb_titel" style="border: 1px solid #522c00; border-left: none; border-right: none; background: url('$_wb_url/images/gb_bg.gif');" align="left" width="42%"><img src="$_wb_url/images/icons/author.png" border="0" align="absmiddle" alt="Author"> $row['name']</td>
	<td class="gb_titel" style="border: 1px solid #522c00; border-left: none; border-right: none; background: url('$_wb_url/images/gb_bg.gif');" align="left" align="right" width="10%"><img src="$_wb_url/images/icons/email.png" border="0" align="absmiddle" alt="E-mail angefügt"> $row['homepage']</td>
	<td class="gb_titel" style="border: 1px solid #522c00; border-left: none; background: url('$_wb_url/images/gb_bg.gif');" align="right"><img src="$_wb_url/images/icons/date.png" border="0" align="absmiddle" alt="Datum"> $row['time']</td>
</tr>
<tr valign="top">
	<td height="60" class="gb_text" style="border: 1px solid #522c00; padding: 2px; border-top: none; background: #ffffff;" colspan="4"><br>$row['beitrag']</td>
</tr>
</table>
<br>
<!--#part#fehler1#part#//-->
Bitte geben Sie ihren gültigen Vor und Zunamen ein!<br>
<!--#part#fehler2#part#//-->
Max. 30 Zeichen beim Namen verwenden<br>
<!--#part#fehler3#part#//-->
Wenn Sie eine Webseite angeben, muss es sich um eine echte handeln!<br>
<!--#part#fehler4#part#//-->
Bitte geben Sie ihre E-Mailadresse ein!<br>
<!--#part#fehler5#part#//-->
E-Mail ungültig<br>
<!--#part#fehler6#part#//-->
Sie sollten mindestens $gb_settings['min_text_size'] Zeichen eingeben!<br>
<!--#part#fehler7#part#//-->
Ihr Eintrag darf höchstens '.$gb_settings['max_text_size'].' Zeichen umfassen!
<!--#part#homepageanzeige#part#//-->
<a href="$row['webseite']" target="_blank"><img src="$_wb_url/images/icons/home.png" border="0" align="absmiddle" alt="Homepage"></a>
<!--#part#gb_offline#part#//-->
<br><br><br><br><div align="center" style="border: dashed 1px #522c00; padding: 4px;"><b>Das Gästebuch ist derzeit abgeschaltet!</b></div><br><br><br><br><br><br><br><br><br><br><br><br>
<!--#part#seitenende#part#//-->
</div>

Das Ergebnis ist hier zu betrachten:
https://www.img-hosting.de/gaestebuch.htm
 
Zuletzt bearbeitet:
Auch von mir ein paar kleine Anmerkungen.

  • die Non-Cache Variante kannst du streichen, das ist vielleicht gut gemeint, aber bringen tut es gar nix. Dann nehm leiber in Kauf das du nen paar KB speicher mehr pro aufruf brauchst, als ständig auf die Festplatte zuzugreifen.
  • "$var = @file_get_contents() ? file_get_contents() : die();" 8O Du liest damit zweimal die Datei ein, ist nicht wirklich schön. Entweder du Testest vorher mit is_readable() oder alternativ kannst du auch mit "$var = @file_get_contents() OR die();" arbeiten.
  • dieses preg_match zeugs zum raussuchen der Variablen, dass ist nicht unbedingt Performance freundlich. (lässt sich aber bei diesem Ansatz kaum anders umstäzen)
  • und dann noch die kleinen Syntax sünden $_TPLLIB_PART["$tplname"][$part]

Ansonsten ists eigentlich Ok. Man kann sich natürlich noch drüber streiten ob der globale Variablen scope sicherheitsbedenklich ist, sollte aber hier nicht das Problem sein. Zum Thema eval... es ist immer ein interessantes Thema. Sobald manche leute eval() sehen reagieren sie sofort mit eval is eivl. Das hat für mich immer so den hauch von Microsoft ist scheiße, sprich ich hab keine Ahnung muss aber alles nachlabern. Natürlich ist eval() bei falscher Anwendung sehr bedenklich und man kommt in den meisten fällen auch ohne eval() aus, aber das heißt nicht dass es unnütze ist.
 
..... $var = @file_get_contents() OR die();...

Guter Vorschalg! Das habe ich so noch aus Uhrzeiten drin. :ugly: Nehme ich in das nächste Update rein!

Hast recht.

Danke für dein Feedback!

Wenn es weiter Konkrete Verbesserungsvorschläge gibt, dann her damit. Würde dann heute abend noch eine 2.4 einschreiben.

p.s. Noch zur Performenc gesagt. Da kann man sicher noch einiges rausholen. Allerdings, wäre es net wenn jeman Mal Benchmarks im Vergleich zu anderen Templatesystemen fährt. Smarty habe ich schon abgehängt das weis ich. Sicher ist das Komplexer und keines Falles soll es ein Angriff sein. Ich nutze auch Smarty in manchen Fällen von Früher. Jedenfalls in den heutigen Rechenleistungen geht das garnicht mehr so in das Gewicht rein.

Man kann die Leistung sicher noch um 50% redzuieren. Aber wenn überhaupt werden 2-3 Templates pro Seite berechnet, was man ja auch an meiner Referenz Link oben sieht, macht sich das 0 Bemerkbar. Und Projekte die hunderte Templates auf einmal berechnen müssen für die ist sowieso eine andere Lösung denke ich sinnvoller. Ich würde dazu sagen auf Grund der einfachen ausführung hängt dieses Systemchen anderen TPL Systemen nicht nach! Im Gegenteil. Aber sicher ist da noch einiges heraus zu holen.

Ich konnte bislang nur mit simplen Microtime Vergleichen Benchmarks feststellen. Wenn jemand sich den Spass erlaubt kann er ja mal die Ergbnisse posten.
 
Zuletzt bearbeitet:
Hi,
bitte verstehe mich nicht falsch, ich wollte dich keinesfalls persönlich angreifen, sondern dir nur ein wenig konstruktive Kritik zur Verbesserung deines Systems geben. Ich hab nämlich die Zusatzfeatures von umfangreichen Systemen wie Smarty lieb gewonnen und nutze sie intensiv. Bei kleineren Scripts, für die ein kompaktes Templatesystem wie deines interessant sein könnten, verzichte ich meistens gleich ganz drauf. 8)

1. Wo siehst du das 8O
OK, Parsing war der falsche Ausdruck, ich meinte das Laden der globalen Variablen.

Zum Thema eval... es ist immer ein interessantes Thema. Sobald manche leute eval() sehen reagieren sie sofort mit eval is eivl. Das hat für mich immer so den hauch von Microsoft ist scheiße, sprich ich hab keine Ahnung muss aber alles nachlabern.
Selbst wenn ich mir den Code noch fünfmal angucke und für sicher befinde, heißt das nicht, dass er auch sicher ist. Wenn ich also eval() vermeiden kann, dann tue ich das, weil ich so selbst potentielle Sicherheitslöcher stopfen kann. Bisher dachte ich z.B. auch, dass addslashes() gegen SQL-Injections ausreiche, musste aber vor ein paar Monaten feststellen, dass dies nicht der Fall ist. Glücklicherweise verwende ich seit jeher mysql_real_escape_string() und bin somit besser geschützt.

2. Wo ist ein uneingeschränkter Zugriff möglich?
Du lässt den Zugriff auf alle globalen Variablen zu. Verwendest du dein System irgendwann mal in einer Umgebung, in der User eigene Templates hochladen können (z.B. wenn du einen Gästebuchservice betreiben willst), können auf diese Weise kritische Daten herausgefunden werden.
Bei einem Templatesystem, wo alle Variablen vorher registriert werden müssen, fällt außerdem auch Punkt 1 weg, weil dann keine globalen Variablen mehr benötigt werden, folglich kannst du dann auch eval() vermeiden.

Schon mal ausprobiert? Daten aus einer DB Eingabe, Formular oder sonstwas bekommst du dort 100% nicht durch. Er parst nur das Template. Da wird nichts per eval geparst was ausführbar wäre.
Wie gesagt beziehen sich meine Sicherheitsbedenken nur auf den Fall, dass du das System irgendwann einmal auch für User-Templates verwendest.

6. Es gibt halt viele die meinen das ein wenig abzuändern und dann unter ihren Namen verkaufen zu können. Ich habe das zigfach erlebt. Ich möchte hiermit nur Hilfe anbieten. Dabei will ich keine Schranken schließen. Wenn einer Proviat anfragt kann man ein Auge zudrücken.
Da hilft eine Lizenz, die das Bearbeiten erlaubt, solange der Autoren-Hinweis beibehalten wird.


Soo, muss wieder weg ;)
 
Allerdings, wäre es net wenn jeman Mal Benchmarks im Vergleich zu anderen Templatesystemen fährt. Smarty habe ich schon abgehängt das weis ich. Sicher ist das Komplexer und keines Falles soll es ein Angriff sein. Ich nutze auch Smarty in manchen Fällen von Früher. Jedenfalls in den heutigen Rechenleistungen geht das garnicht mehr so in das Gewicht rein.

Was nen Vregleich^^
Smarty hat hunderte Funktionen die dir fehlen und dann strebst du einen Performance-Vergleich (den du auch selbst wieder streichst) mit deinem popeligen 80-Zeiler an? :roll::LOL:

Zudem ist die Liznze in Witz, was soll man mit sowas anfangen? Stelle es doch unter eine richtige Lizenz wie die LGPL oder lass es sein. Auch wäre der Code als OOP weit besser aufgehoben, einfach um eine Reihe von Funktionen logisch zu einem ganzen Part zusammenzufügen.
 
Zudem ist die Liznze in Witz, was soll man mit sowas anfangen? Stelle es doch unter eine richtige Lizenz wie die LGPL oder lass es sein.

Male dein Auto rot. Zieh dir eine weiße Hose an.... Was ich dir damit sagen will, warum sollte ich das tun? Meine Lizenzn ist bekannt.

Auch wäre der Code als OOP weit besser aufgehoben, einfach um eine Reihe von Funktionen logisch zu einem ganzen Part zusammenzufügen.

PHP wird OOP ab Version 6 erst richtig beherschen. Das OOP in PHP ist bislang nur insziniert und nicht wie es im richtig Falle sein sollte. Objekt Orientierung für 3 Funktionen wovon eine angegriffen wird. :roll: Mein besten Respekt, aber für mich eher wieder mal so "....mach dies mach das..." Sache. Naja da OOP natürlich nur 10% aller PHPler beherschen ist dies dann natürlich eine Hilfe. Ich finde deine Aussagen immer unerwarteter. Weis nicht was in letzter Zeit mit dir los ist. Und sicherlich hast du bedacht, dass das Objekt dann so oder so nicht auf Private Parts zugereifen darf. Das zeugt für mich nur, dass du ein wenig die Realität verwechselst. (Möchte, Mach - mit - ist und sein kann).

Nochmal es ist meine Arbeit, und Gott sei gedankt, ist dem Menschen seine Kreativität überlassen.

Nicht dass du das missverstehst. Ich binn jeder Hilfe dankbar. Aber wenn du was vorzubringen hast dann lass es begründet sein. Es haben viele verschiedene Ansichten, und deshalb ist deine nicht besser. Aber konstuktive Meinungen können die Sache durchaus verbessern.

Danke für dein Feedback!
 
Zuletzt bearbeitet:
So Update auf 2.4 ist auch schon da!

Veränderung:
Der doppelte Abruf von filge_get_contents() wurde dank ZeroCCC verhindert!

@ZeroCCC

Was wir beide nicht bedacht haben:

PHP:
<?
$TPLLIB_TEMPLATES[$tplname] = @file_get_contents($_TPLLIB_TPLDIR.'/'.$tplname) || die('...');
?>

würde nicht funktionieren, da er TRUE (1) im Erfolgsfall an $TPLLIB_TEMPLATES[$tplname] abliefert. Habe ich auch nicht erwartet ab so kommt es raus.
 
PHP wird OOP ab Version 6 erst richtig beherschen. Das OOP in PHP ist bislang nur insziniert und nicht wie es im richtig Falle sein sollte.
falsch PHP beherrscht mitlerweile schon einen Großteild er Objektorientierung jedoch noch nicht Vergleichbar mit Java (Interfaces als Parameter etc).
Und mit PHP6 wird sich nach dem aktuellen Stand auch noch nichts in die Richtung ändern ;) (ich lese die Mailingliste mit)

Ich finde deine Aussagen immer unerwarteter. Weis nicht was in letzter Zeit mit dir los ist. Und sicherlich hast du bedacht, dass das Objekt dann so oder so nicht auf Private Parts zugereifen darf. Das zeugt für mich nur, dass du ein wenig die Realität verwechselst. (Möchte, Mach - mit - ist und sein kann).
Juo, ich bin momentan extrem launisch und habe meine Tage :biggrin:
Nein, ich arbeite viel mit Java und da gibt es einfach keine freistehenden Funktionen - macht auch keinen Sinn, denn irgendwie müssen diese ja gekapselt werden, der Vorteil der OOP wäre auch, die Erweiterbarkeit deiner Klasse durch hinzufügen von bestimmten Dingen etc, schau dir nur an wie einfach man Smarty handeln kann, wenn man direkt von Smarty ableitet, in den Konstruktor die Configurationen machen und dann den super-Konstruktor aufrufen.
Besonders das Code nicht verändert werden darf, hmm, ganz ehrlich, was bringt es mir dann? Es gibt dutzende größere und kleinere Template-Systeme, die unter LGPL released sind und ich daher auch modifizieren darf, jedoch einen Copyleft hinterlassen muss, diese kann ich daher auch gebrauchen, aber wenn ich keine Anpassungen machen darf? Was bringt es mir dann?
 
Spezifisch hat es den Hintergrund, das es noch 14 weitere Scripts gibt. Beispiel:

- gp_session.lib (Session Bibliothek)
- gp_mysql (OOP) (Mysql Klasse die mehrere DB Verbindungen veralten kann und bei Ausfall einer DB eine andere ansteuern kann)
- gp_seitnav_builder (Erstellt automatisch anhand von Parameter Seite vor zurück Seite 1,2,3... Seiten navigation)
- gp_mailon (Konvertiert HTML und Textmails gleichzeitig)
- gp_massmailon (speichert die Mails anstatt sie zu versenden in eine DB ab und versendet immer Stapelweise per Corn Mails. Hilfreich ist das bei Massenmails)
- gp_regestry (Ist eine RegistrierungsSchlüssel Datenbank die alle Typen von HTML Formulareingaben kennt (text, hidden, select, checkbox ....) und diese verwaltet. eignet sich für sämtliche Webseite Einstellungen und es gibt dazu ein automatisches Formular wo man alle Angaben ändern kann dazu).

Ich kann dir vieles aufzählen. Ein kleines Beispiel:
die gp_seitnav_builder benötigt die gptpl. Die GPTPL registriert sich wie folgt:

PHP:
//-----> Definition <------||
$_reg_comp['TPLLIB'] = 2.4;

Die Seitnavlib frägt das aus!

PHP:
<?
/*===========================================================
=                                                           =
=                  Komponenten Kontorlle.                   =
=                                                           =
===========================================================*/
if ($_reg_comp['SQLLIB'] < 1.0)
{
	@mysql_close();
	die('ERROR: GP SITENAV Builder benötitigt SQLLIB ab Version 1.0');
}
if ($_reg_comp['TPLLIB'] < 2.3)
{
	@mysql_close();
	die('ERROR: GP SITENAV Builder TPLLIB ab Version 2.3');
}

//.....
?>

Das soll sozusagen für Anfänger geeignet sein. Es handelt sich um meine Bibliotheken die ich über Jahre entwickelt habe. An hand denen kann man ganz sicher sehr schnell Seiten ins netz stellen, und dabei selbst höchste Kreativität gewähren. Der Sinn liegt darin, dass wenn sich ein User künftig was erweitern will, dass er darauf vertrauen kann, dass alle Komponenten miteinander harmonieren, und nicht dass es nur Ärger gibt, weil jeder darin verändert hat was er mag und ihm lieb ist.

Smarty ist ein TPL System. Es kümmert sich nur um seine Aufgabe. Meine Bibliotheken sind so zu sagen Idiotensicher aufeinander abgestimmt.

Vielleicht verstehst du jetzt nähere Zusammenhänge, was ich mir dabei gedacht habe.

Wenn ich eben mal schnell eine Seite in das Internet publizieren möchte, haue ich zuerst meine Bibliotheken rein. Wenn ich was vergessen sollte wird mir das sofort angezeigt ohne lange Warte und Debug Zeiten. Und ich kann zu 100% darauf vertrauen, dass alle Bibliotheken miteinander harmonieren.

Die anderen Komponenten werde ich auch noch veröffentlichen. Wenn es sinnvolle Änderungen geben soll, dann kann das jeder ansprechen, und man kann das Updaten. Nur wenn jeder daraus macht was er möchte, dann wird es viel Ärger bereiten für alle anderen die ihre Website später abändern oder erweitern möchten.

Und wenn jemand was ändern will, soll er mir das sagen, dann weise ich ihn darauf hin, und werde es ihm bestimmt nicht verbieten. (Allerdings einfach machen ist wie einfach dahinschreiben, wovon man den Hintergrund nicht kennt).

Und dann vorher zu deiner Anmerkung mit OOP. Warum nicht? Weil jeder dann aus call_template() obj->call_template() ändern darf, würde ich es machen. Und was wäre wenn sich um die Änderung keine kümmert? Nur Ärger mehr nicht.

Du kannst mir aber vertrauen, dass ich mir bei meiner Arbeit immer was gedacht habe. Als ich angefangen habe, habe ich mir die Funktionen mal von dem Script mal von einem anderen Script kopiert (natürlich nur von eigenen Scripten). Dann habe ich die immer so angepasst, bis es meinen Wunsch entsprach. Und was war nach 20 bis 30 Seiten im Netz? Chaos.

Ein guter Progger hat immer seine Bibliotheken mit denen er arbeitet auf der HDD oder sonst wo. Ich brauche mich so nur noch um den Grundcode kümmern, worum es geht, und muss nicht dauernd das Rad neu erfinden, noch prüfen hoffen und bangen, dass irgendwas nicht funktionieren oder harmonieren kann. Das Spart Zeit, das glaubst mir denke ich nicht! Ich weiss, dass es unter Einsatz meiner Bibliotheken immer eine 100% Funktionstüchtigkeit gibt!

Wenn ich mir Komplexe Dinge proggen möchte, dann haue ich meine Libs rein. Fülle die Funktion aus, und kann vetrauen das alles bestens funzt. Funzt mal was nicht richtig, date ich die Lib aus und kopiere sie einfach in die Webseiten ein Update. Wartungaufwand = 0 [STRG]+[C] [STRG]+[V]. Entwicklungszeit höchst gering.

Zum Schluss noch. Das gptpl ist daruf entwickelt worden dem Entwickler die Sache so einfach wie nur möglich zu machen. Sowohl im PHP Code als auch im Template. Und dem wird es absolut gerecht. Da brauche ich keine 10K Funktionen oder Futers. Was ich brauche ist Zeit sparen, weil die Konkurrenz nie schläft. Wenn ich freie Zeit habe gehe ich mit meinen Sohn was unternehmen. Rentabilität, Einfachheit, und den Zweck soll es erfüllen. Da brauche ich nicht diskutieren, ob einem 2 Zeilen nicht gefallen. Woran ich interessiert bin, wenn jemand einen Verbesserungsvorschlag hat, nehme ich den auf, solange diese die Funktionstüchtigkeit zwischen den Bibliotheken nicht beeinträchtigt. Andernfalls nehme ich es auf Grund nicht auf.
 
Zuletzt bearbeitet:
k ;)
nur mal als kleiner Denkanstoß, hast du schonmal von den eZ Components gehört?
Das sind viele "kleine" Klassen, die alle bestimmte Aufgaben haben: Sessions, ORM, TemplateSystem, Logging etc. diese lassen sich einfach alleine anwenden oder man kombiniert die Klassen, und dann holt man meiner Meinung das beste raus, als nur über einzelne Funktionen, denn Dinge mal komplex miteinander kommunizieren müssen, oder man ein Interface für eine DB-Klasse definiert, dass ich einfach in einer Methode das RDBMS tauschen kann und nix anpassen muss, dann zeigt sich die wahre Macht von OOP.
 
Das ist vollkommen richtig. Was du aber bedenken musst. Ich habe mit PHP Version 2 angefangen. Ab Version 3 habe ich mit meinen Libs angefangen. Wenn ich diese jetzt in OOP umschreiben würde, dann brauchte ich Zeit ohne Ende, um alles anzupassen. Und das will ich nicht.

Wenn ein Kunde zu mir kommt und an seiner Seite was erweitert haben möchte, dann möchte ich nicht gleich alles umschreiben oder auf alte Gegebenheiten zurück greifen. Ja und wenn die Konkurrenz es billiger macht ist der Kunde weg.

Deshalb stelle ich auch meine Arbeit zur Verfügung. Sie hat diesen Sinn in sich. Selbstverständlich ist es jedermann Sache. Und es gibt bestimmt auch andere Lösungen. So wie das OPEN GEO das mal echt ein Hammer ist meiner Meinung nach. Und das ist auch das schöne unter Programmieren, zu diskutieren und die Erfahrungen auszutauschen.

Mir geht es darum, dass die Anwender das Vertrauen haben, dass in 5 Jahren unter Einsatz von meiner Bibliotheken immer noch alles seine Funktionalität beibehält.
 
Zuletzt bearbeitet:
scheinbar hast du nie mit oop gearbeitet. ich hab die viel zu langen texte nur teilweise überflogen. dabei sind mir schon ein-zwei unklarer begründungen aufgefallen. wenn du schon seit v2 mit php arbeitest, solltest du mehr als nur einmal auf funktionen mit gleichen namen gestoßen sein. du hast vermutlich niemals den sinn von oop in diesem umfeld erkannt. ein paar kleine punkte wären zum beispiel:

- kapseln durch namensräume
- beibehalten localer config-variablen
- die typische interne datenstruktur
- vererbung und überschreibung von klassen und methoden und damit der erfüllung deines wunsches nach unverändertem einsatz des original codes.
- refactoring

die tatsache, dass du schon viele jahre etwas genutzt hast, reicht bei weitem nicht als grund aus, auf altem stand von php2 in zeiten von php5 weiter zu arbeiten. dieser grund ist in meinen augen sogar ein klares ausschlusskriterium.

im übrigen setze ich smarty in allen aktuellen projekten ein, egal ob groß oder auch sehr klein. die einbindung verlangt nur das kopieren eines verzeichnisses; die funktionsvielfalt, die einfache anwendung (für programmierer und otto-normalos) und die sehr umfangreich dokumentation, kann bisher kein anderes system bieten.
 
Na toll wieder einer der zu Faul ist zu lesen. :ugly:

- kapseln durch namensräume
- beibehalten localer config-variablen
- die typische interne datenstruktur
- vererbung und überschreibung von klassen und methoden und damit der erfüllung deines wunsches nach unverändertem einsatz des original codes.
- refactoring

Da binn ich mal sehr gespannt wie mir OOP hunderte von Webseiten vererbt. ;) Vielleicht leist du nochmal von vorne. Und vieleicht erkundigst du dich nochmal.

Jetzt am besten rennst du schnell in das nächste Musikgeschäft, kaufst dir das lauteste Megafon welches es zu kaufen gibt. Ziehst dich halb nackt aus (damit du beachtet wirst) und hüpfst durch die Einkaufspassage bei dir, während du in das Megafon brüllst wie toll doch OOP ist. Ich glaube du wirst die Gleiche Beachtung finden. Es juckt keinen.

OOP hat mit Templates ein Gummiball zu tun. OOP ist ein Objektorientiertes Programmierparadigma. Eine Art zu Coden. Ein spezieller Syntaxstil der leichter nachzuvollziehen ist. Einem Rechner bringt OOP -> 0 -> 0 und nochmal für dich 0 Vorteile. Aus der sicht der Maschine ist es nichts andere wies eine bündelung von Funktionen und Variablen für einen bestimmten Teil. Die geringen Vorteile der Vererbung gehen nur daher weil Objekte im Speicher reserviert sind (Kopie bzw. Abbild). Den Rechner ist das Jacke wie Hose, wenn du verstehen magst. Der rechnet immer noch mit 0 1 01 01... OOP ist viel mehr ein Realitätsabsurde Abbildung eines allen möglichen Objekts mit allen möglichen eigenschaten. Letzt endlich ist OOP nicht anderes wie der normaler Sourcecode, ausser, dass dieser gesondert behandelt werden kann (im Speicher manipulliert werden kann).

Und selbst dies geschieht im Speicher nur durch Kopie. Egal was du anwendest, ob es nun Polymorphie, Vererbung oder sonstiges ist.

OOP ist für den Computer ein MULTIDIMENSIONALES ARRAY MEHR NICHT! Und OOP PRO KONTRA Themen findest du 1.000de im Netz. Lies dir dort mal alles durch, oder mach das mit meinem Vorschlag. OOP macht es dem Programmierer leichter und der Maschine schwerer. Es ist ein lastiges unterfangen und vor allem Speicherfressend.

Natürlich ist OOP eine nützliche Sache. Aber du verstehst den Zusammenhang nicht.

OOP eignet sich vor allem dann, wenn du schen duplizieren oder verändert duplizieren willst. Und dann wenn du eine Sache entwickelst, die dur nur umschreiben kannst. Einen anderen Grundlast schwerwiegenden Vorteil hat OOP nicht. Dadafür hat OOP Maschinentechnisch schwere Nachteile. Aber alles lässt sich auch in normalen Sourcecode darstellen was ein Objekt kann, bis auf Polymorphie. Sonst gibt es nichts.

Sich gegen Global aussprechen und im OOP public verwenden. Im eigentlichen ist dies das Gleiche.

Such dir am besten einmal in deiner Fachlektüre den Unterpunkt Vor und Nachteile heraus.

(Tut mir leid, aber wer nicht liest...)
 
Zuletzt bearbeitet:
nen megafon muss ich mir bei solchen statements nicht kaufen.. aber vielleicht solltest du dir mal eine flüstertüte besorgen..

kurz um: wenn du nicht an der meinung der anderen interessiert bist, dann schreib nichts in ein forum. die tatsache das du mit veralteten technicken immer noch glaubst das gelbe-vom-ei erfunden zu haben, ist nunmal schlicht falsch. von webseiten-vererbung hat hier niemand gesprochen. es geht um ein tpl-system; wer sollte hier nochmal lesen was er selbst geschrieben hat?

wenn du in projekten mit dutzenden von libarys arbeitest, wirst du dich hüten fremdsysteme zu integrieren die eine derart fatale kapselung liefern. die überschneidungen und diverse weitere unschöne nebeneffekte sind nicht von der hand zu weisen. das ist aber vermutlich nicht dein täglich brot, sonst würdest du nicht solche seltsamen aus dem zusammenhang gerissene begründungen liefern.

die erklärung: "oop ist ein array".. lasse ich mal so im raum stehen. auf den eigentlichen kern meiner aussage bist du eh nicht eingegangen :yawn:
 
Naja du hast denke ich das Thema aus dem Wind gerissen. Das sind alles nur Spekulationen.

PHP:
die Tatsache, dass du schon viele Jahre etwas genutzt hast, reicht bei weitem nicht als Grund aus, auf altem stand von php2 in Zeiten von php5 weiter zu arbeiten. dieser Grund ist in meinen Augen sogar ein klares Ausschlusskriterium.

Ich denke das habe ich dir beantwortet. Natürlich reicht das als Grund aus. Du solltest mal die Internetseiten vom Wirtschaftsgymnasium besuchen. Ja im ernst. Nenne mir ein Vorteil, weshalb ich OOP hier einsetzen sollte.

Was soll ich den dort
-vererben?
-klonen?

Meinst du ich bin nicht auf dem neusten Stand? Ich arbeite in der IT Branche, und habe Jahrelange Erfahrung mit dem was ich tue. Ich habe in OOP schon ein Forum geschrieben, welches 2003 auf der Heft CD von Chip war.

Pass auf, ich sage dir es mal deutlich was ich dir vermitteln will. Als ich angefangen habe, habe ich meine Klappe gehalten und überall um Hilfe gebettelt. Wie geht das, wie dies...? Und dann kam die Zeit mit Fachlektüre.
noch vor der Jahrtausendwende (müsste nachsehen wann das genau war) hat mich meine Firma auf dir VHS zum PHP Kurs gesendet. Dann als ich alles irgend wann einmal beherrscht habe (Syntax Ablauf) habe ich auch meine Klappe aufgerissen. Ist ja kein Problem. Dann entdeckte ich so was wie OOP. Was glaubst du was ich alles gemeldet habe was geht und nicht geht. OOP war ach so toll und noch so geil, selbst für ein ganzes Forum hat es gereicht.

Aber (und da war ich schon 4 Jahre in PHP täglich unterwegs) als ich damals bei meinem IT Unternehmen angenommen worden bin, kam ich mit Progern zusammen, die unteranderem schon an webtSeiten gearbeitet haben wie Amazone, Ebay und der gleichen. Was glaubst du, was ich auf den Eimer bekommen habe, wenn ich so gekommen wäre wie du? Und ich bin so gekommen wie du, und habe Programmierung nach 6 Jahren (4PHP) neu lernen müssen.

Du wirst in jedem IT unternehmen gegen Mauern laufen. Weil es wird einen anderen Programmierer nie jucken was du über OOP denkst, und was nicht. Wenn du was vorzubringen hast, dann Code es so wie es sein sollte. Bringe es vor, und Begründe.

Ist wirklich nicht böse gemeint. Es gibt viele Leute die das so machen wie du. Bei uns im Unternehmen (63 IT Programmierer) ist die Goldregel folgende. Ein Programmierer lernt nie aus. Weder du nicht noch ich nicht noch ein anderer. Wenn ich also als Programmierer irgend was behaupte, dann kann ich nur behaupten was ich mir denken. Ansonsten hast du nicht eingesehen was du bist, und du wirst eventuelle in Internetforen (wo es meist darum geht wer die größter Partei anregt) damit durchkommen. Aber in einem echtem Team wirst du sofort ausgelacht mit dieser Methode. Du wirst sofort merken, dass du nicht mehr ernst genommen wirst. Weil selbst einer der gestern erst sein Buch bezüglich Programmierung aufgeschlagen hat, könnte dir Dinge erzählen von den du keine Ahnung hast.

Daher mein Kontra. Bringt ein OOP Beispiel her. Begründe deine Ansicht. Du kannst darauf vertrauen, dass sich jeder Programmierer seine eigenen Gedanken daraus macht. Und was er aus deinem Code gut findet wird er auch annehmen. Dazu bedarf Eis keine Partei oder Meinung.

Was glaubst du, wenn du in einem 50 Mann Team arbeiten würdest. Weches Stimmerecht du hast, und dort sind die Einigungen absolut notwendig, da meist alles über Subversion geht.

Deshalb auch mein Code da oben im Posting 1 ist Scheisse. Das ist ganz einfach so zu sehen. Aber es gibt diesen Ansatz nicht, was Perfektes zu liefern. Perfektion entsteht durch Auseinandersetzung.

Schau dir mal den Beitrag von ZeroCCC an!

Er hat sein Ding begründet vorgebracht und ein Codebeispiel vorgebracht. Seine Ansicht wie er das lösen würde. Das ist überzeugend, und das ist was man braucht als Programmierer. Und das was ich davon für diesen Zweck für sinnvoll befunden habe habe ich intigriert. (Freiwilli) (Daher da es mich überzeugt hat).

Wer aber was wie findet, das ist sowas von unwichtig. Daraus kommt kein Guter Programmierer. Das habe ich im Unternehmen lernen müssen. Meinungen geben sind Meinungen. Aber das macht dich und mich nicht aus. Was dich und micht ausmacht ist das was wir leisten. Nicht das was wir denken.
 
Zuletzt bearbeitet:

Sry das ist lächerlich. Du wolltest Tipps und hast Tipps bekommen, nur weil dir ein Tipp nicht passt brauchst du dich nicht auf so ein Kindergarten niveau begeben. OOP ist ein guter ansatz um Code modular aufzubauen... also auch bestens geeignet um ein Template System zu kapseln. Da brauchst du jetzt nicht rumeiern das du schon jahrelang progrmmierst... nur weil du keine Lust hast dich mit der Entwicklung die in der Zeit standgefunden hat auseinander zusetzen heißt es nochlange nicht das es schlecht ist. Wenn ich da deine Argumente lese die du da aufführst 8O Wenn jeder so denken würde dann würden wir immer noch immer mit 0 und 1 Programmieren. Aber scheinbar ist dir der zusammenhang nicht wirklich klar. Ich stell einfach mal ne frage in den Raum

Warum verwendest du ein Template System?

Tipp... Vorteile/Nachteile und das ganze mal auf OOP übertragen. Vielleicht wird dir dann was klar.
 
Ne ich habe keine Tipps bekommen, sonder eine Einweisung in OOP. Das ist ein großer Unterschied. Bzw. Wo ist der Tipp, den ich ansetzen soll? Soll ich nun alles in OOP umschreiben, weil ein paar der Meinung sind OOP ist was geiles.

Mein Nachbar Progger wird seinen Code auch nicht umschreiben weil ich was anderes besser findet. Deshalb stütze ich mich nie auf diese Gegebenheiten. Wenn du verstehst was ich damit sagen will.

Vorschläge sind Hilfreich!

Ich habe immer noch nicht den Vorteil liegen. Genau dagegen stänker ich hier herum. Also nicht flasch verstehen. Weist in 5 Minuten postet einer, dass in den Templates keine Variablen stehen sollten sondern Markups. Und nun wird mein System dadurch besser, wenn ich das dann auch umsetze? Genau daraum geht es mir. Nicht weil er seine Meinung geschrieben hat.

Der Standpunkt, dass OOP besser sei wie ein Sourccode den kann ich hier nirgends auf mein Template anweden, und das habe ich vor dem gestänker begründet. Natürlich binn ich dankbar für jede Hilfe und offen. Aber wie schon von Anfang an geschreieben, für Hilfe nicht für sinnlose Disskussionen.

Mich interessiert sowas wie

"Hau in Zeile XY den Code rein weil ich denke, dass das so besser ist"

oder

"Schau dass du das in Zeile oder an Stelle XY nicht machst weil das den Hintergrund hat"

Das bringt mich voran! Das ist die Goldwage die ich suche!
 
Zuletzt bearbeitet:
schon komisch, ich zweifle ein tpl-system an.. und bekomme dafür persönliche beleidigungen zum gegenzug..

nochmal klar was dein system alles fehlt:
- es hat keinen mehrwert
- es hat keine eigene tpl-sprache
- es hat keine kapselung und ist damit für externe projekten uninteressant..

was man an deiner schreibweise stört:
- viele worte, wenig inhalt
- persönliche angriffe
- höhenflüge

nochmal klar für dich mit wegigen worten: du redest am thema vorbei und beziehst alles auf dich.. es geht NICHT um DICH, sondern um dein unfunktionales stück programmcode.

versuch die nächste antwort kurz zu halten, die langen texte sind ermüdend.

solche tips wie "Hau in Zeile XY den Code rein weil ich denke, dass das so besser ist" oder "Schau dass du das in Zeile oder an Stelle XY nicht machst weil das den Hintergrund hat", muss man einen langjärigen it-experten bei so wenigen zeilen nicht geben..

*und jetzt noch mit verteilen roter-pünkchen anzufangen, ist nun wirklich endgültig daneben :D
 
Status
Für weitere Antworten geschlossen.