php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2005

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 15.05.2005, 20:03  
Gast
 
Beiträge: n/a
Standard Template verständniss problem; referenz

Hallo zusammen,

ich versuche mich gerade an einer einfachen TemplateEngine. Hatte mir dazu auch einiges aus dem Netz zusammen gesucht, aber da sind zwei Ereignisse die ich nicht verstehe. Die Klasse an sich funktioniert aber.

Hier mal die Klasse:

PHP-Code:
 <?

 
class TemplateEngine
 
{
     private 
$template_vars    = array();
     private 
$template_dir        '';

        
   function 
setTemplateDir($tpl_dir)
    {
        
$this -> template_dir $tpl_dir;
    }

    function 
assign($key$val null)
    {
        
$this -> template_vars[$key] = $val;
    }

    function 
display($tpl_file)
    {
        
$TPL = &$this -> template_vars;

        include(
$this -> template_dir $tpl_file);
    }
 }

$tpl = new TemplateEngine;
$tpl -> setTemplateDir('templates/');
$tpl -> assign('test1''Hallo Welt');
$tpl -> assign('test2''foo bar');
$tpl -> display('test.tpl');
?>

//test.tpl


<html>
<head>
<title>Template Engine</title>
</head>
<body>
<?=$TPL['test1']?>

<?=$TPL['test2']?>

</body>
</html>
Bei der Methode "display() wird das Template per "include()" Befehl is das Script eingebunden, warum wird es so ausgegeben? Müßte das nicht ein fehler erzeugen?

Und im Template steht ein "=" vor dem array. Ohne dieses Funktioniert das Script nicht, aber ich weiß auch nicht wofür es ist. Vieleicht könnte mir das jemand bitte verraten.

Danke
 
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 15.05.2005, 20:59  
Gast
 
Beiträge: n/a
Standard

Zitat:
private $template_vars = array();
Dem Kind wird ein Name gegeben (template_vars) und es wird festgelegt, dass es vom Typ Array ist.

Zitat:
Müßte das nicht ein fehler erzeugen?
Da es das offensichtlich nicht tut die Gegenfrage: "Wie kommst Du darauf"?
 
Alt 15.05.2005, 22:30  
Gast
 
Beiträge: n/a
Standard

Hi,

also zu eins:

die Eigenschafts zuweisung meinte ich nicht das mir schon klar ... :P
Im Template selber wird die Variable so definiert:

PHP-Code:
<? $TPL['test1'?>
und dieses "=" meinte ich, ohne das funktioniert das script nicht.

zu zweitens:

also es funktioniert und gibt keinen fehler aus. Wenn ich etwas per "include()" befehl lade, wird ja der inhalt der Datei an der stelle so wie er ist eingefügt. Die *.tpl ist ja aber reines HTML. Würde ich statt des "includes()" den Code der *.tpl schreiben gibt es einen Fehler.

Außerdem ist mir noch aufgefallen das im template die Variablen nicht per "echo/print" ausgegeben werden. Das wundert mich doch sehr und ich weiß nicht warum, aber ich möchte es gern verstehen....
 
Alt 15.05.2005, 22:40  
Gast
 
Beiträge: n/a
Standard

Zitat:
ich versuche mich gerade an einer einfachen TemplateEngine.
Große Worte. Saug Dir eine/mehrere Templateklasse und analysiere die, damit Du weißt, wies gemacht wird. Und falls Dir da was fehlt, dann ergänze die Klasse.
 
Alt 15.05.2005, 23:36  
Gast
 
Beiträge: n/a
Standard

@meikel: verstehe ich mal wieder nicht. Genau das Vorgeschlagene tut Rikku anscheinend doch, kommt nicht weiter und fragt deshalb. Heute nervt's mich aber wirklich mal, dass viele anscheinend die Fragen nicht wirklich lesen, sondern nur die Überschrift und einen halben Satz und dann gleich antworten.

@Rikku:
PHP-Code:
<?php
..
function 
display($tpl_file)
{
    
$TPL = &$this -> template_vars;
...
?>
Vor dem Einbinden werden $TPL die Variablen des templates-Objekts zugewiesen (als Referenz; daher ist der einzige Effekt: kürzere Schreibweise im template)

<?= ist mehr oder weniger nur eine Kurzschreibweise für <?php echo
<?= $TPL['test1'] ?> => <?php echo $TPL['test1'] ?>

damit das funktioniert, muss allerdings short_open_tag gesetzt sein
siehe auch: http://de.php.net/manual/en/ini.core...short-open-tag
im Zweifel also besser immer <?php echo statt <?= schreiben
 
Alt 15.05.2005, 23:36  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von meikel
Zitat:
ich versuche mich gerade an einer einfachen TemplateEngine.
Große Worte. Saug Dir eine/mehrere Templateklasse und analysiere die, damit Du weißt, wies gemacht wird. Und falls Dir da was fehlt, dann ergänze die Klasse.

Na Danke,

wenn ich bei so einem kleinem wenig Engine schon ins stocken komme, wird mir das nicht viel bringen eine große zu analysieren. Wobei ich eine "große" wie zb. Smarty garnicht haben möchte.

*heul*

Ich möchte doch nur wissen warum die Template Datei so ausgeführt wird?

Wofür die "=" in der *.tpl Datei sind die nach "<?" kommen. Weil ohne die geht es nicht.

Und warum die Array Elemte überhaupt ausgeben werden. Weil wenn ich schreibe: " $test['test']; " wird der Wert ja normalerweise nicht ausgegeben. Hier aber schon. :P
 
Alt 15.05.2005, 23:49  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von VolkerK
@meikel: verstehe ich mal wieder nicht. Genau das Vorgeschlagene tut Rikku anscheinend doch, kommt nicht weiter und fragt deshalb. Heute nervt's mich aber wirklich mal, dass viele anscheinend die Fragen nicht wirklich lesen, sondern nur die Überschrift und einen halben Satz und dann gleich antworten.
Er hat sich da selbst was gebastelt. Sowas ...
Zitat:
Bei der Methode "display() wird das Template per "include()" Befehl is das Script eingebunden,
... hat mit einer "Template Engine" herzlich wenig zu tun.

Deshalb emphafhl und empfehle ich ihm, sich eine kleine Templateklasse zu saugen und die zu analysieren.
 
Alt 15.05.2005, 23:49  
Gast
 
Beiträge: n/a
Standard

Hi VolkerK,

antworten haben sich wohl überschnitten. :P

Vielen Dank für deine Erklärungen.

Jetzt kenne ich auch den Weg (siehe Signatur)

Wenn das "=" für echo steht ist es auch klar das die Array-Elemte ausgegeben werden. Schon 2 von 3 Problemen gelöst.

Ich glaub das 3 Problem konnte ich mir (vermute ich jedenfals) selber erklären. PHP setzt vor einem "include()" befehl die abschließenden PHP-Tags "?>". Wenn also die includierte Datei nicht mit "<?" wieder anfängt wird "natürlich" der Text als normaler HTTP Header gesendet.

Korrigiert mich bitte wenn das falsch ist.

Ansonsten ist alles schön geklärt, vielen Dank für die Hilfe.

greetz

Rikku
 
Alt 15.05.2005, 23:57  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von Rikku
wenn ich bei so einem kleinem wenig Engine schon ins stocken komme, wird mir das nicht viel bringen eine große zu analysieren.
Du sollst nicht eine große sondern eine gute Templateklasse analysieren.

http://www.kuerbis.org/template/
http://www.kuerbis.org/template/download.php

Beachte das:
Zitat:
developer version (PHP 5)
stable version (PHP 4)
Anwendungsbeispiele findest Du auf der Seite des Autors und da:
http://test.php-help.info/template-2/ (Quelltexte werden angezeigt)

KTemplate ist klein, fix und beherrscht dynmische Blöcke.

Zitat:
Wobei ich eine "große" wie zb. Smarty garnicht haben möchte.
Sei beruhigt: ich auch nicht.

Deinen Versuch analysiere ich dagegen nicht. Und zwar deshalb:
PHP-Code:
<?php
        
include($this -> template_dir $tpl_file); 
?>
Auch wenn es einige gibt, die das anders sehen: Ein Template ist für mich ein (HTML) Formular (Dokument) mit freien Feldern (Platzhaltern), welches von der Templateklasse ausgefüllt und bei Bedarf angezeigt wird.
 
Alt 16.05.2005, 00:07  
Gast
 
Beiträge: n/a
Standard

Zitat:
Ein Template ist für mich ein (HTML) Formular (Dokument) mit freien Feldern (Platzhaltern), welches von der Templateklasse ausgefüllt und bei Bedarf angezeigt wird.
Aber das trifft doch auf das Beispiel zu.
<?= ?> sind die Markierung, die anzeigt "fülle hier etwas aus, template system". Bei anderen System ist das vielleicht { } oder [ ] oder oder oder.
Also das alleine reicht mE nicht aus, dieses System abzuschreiben.

Aber bevor das hier ausartet: Nein, ich habe keine Lust, die Schönheit, Reinheit oder Richtigkeit verschiedener template-Ansätze zu diskutieren. Müßig und schon überreichlich im Netz und sicher auch hier im board vorhanden - Zeitverschwendung.
 
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Timestamp problem phrain PHP Tipps 2008 2 04.04.2008 09:41
MATCH .... AGAINST ... Problem Denise Datenbanken 4 21.03.2007 20:05
datensätze defekt oder problem mit dem einlesen? Ministry Datenbanken 4 06.07.2006 18:42
Problem mit height Party-Pix HTML, Usability und Barrierefreiheit 3 29.03.2006 14:17
IFRAME Problem PHP Tipps 2006 13 28.02.2006 15:27
Template problem webmaster_andre HTML, Usability und Barrierefreiheit 4 25.02.2006 22:50
problem!!! PHP Tipps 2006 6 08.02.2006 11:06
[Erledigt] wieder ein Problem bei phpmailer und smtp PHP Tipps 2006 24 07.02.2006 01:07
[Erledigt] phpBB Template - Problem PHP-Fortgeschrittene 0 15.11.2005 21:02
Klassen und OOP Problem PHP-Fortgeschrittene 3 08.09.2005 10:37
[Erledigt] Problem mit Backslash Patrick Schwarz PHP Tipps 2005-2 5 26.07.2005 09:54
[Erledigt] Problem mit User/Group: nobody(99)/99 Server, Hosting und Workstations 3 09.07.2005 15:31
Problem mit Datenausgabe im template .. PHP Tipps 2004-2 1 20.11.2004 21:28
Template Parser PHP-Fortgeschrittene 9 06.10.2004 23:04
Problem mit alter JavaScript-Funktion woods PHP Tipps 2004 1 13.08.2004 13:34


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:14 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.