Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
(Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI...

eigenes PHP Template System

Diskussion: eigenes PHP Template System im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige Tag zusammen, arbeite gerade an einem eigenen PHP Template Engine. Im Internet habe ich mich mehr oder weniger schlau ...

Antwort
Alt 30.09.10, 21:43   #1 (permalink)
 
Benutzerbild von overflow
 
Registriert seit: 17.01.04
overflow Leistung: Z3
overflow eine Nachricht über ICQ schicken overflow eine Nachricht über MSN schicken
Likes: 17
Standard eigenes PHP Template System

Anzeige

Tag zusammen,

arbeite gerade an einem eigenen PHP Template Engine.
Im Internet habe ich mich mehr oder weniger schlau
gelesen. Leider gibt es auch viel unnütz, was mich dazu
bringt hier im Publikum nachzufragen, wie solch ein
PHP System eigentlich aussehen sollte,
welches PHP vom HTML Code trennt.

Was haltet ihr davon ? :

http://www.inside-php.de/tutorial/PH...te-System.html

PS: Bitte keine vorgefertigten Systeme wie Smarty etc. vorschlagen.

regards overflow

overflow ist offline   Mit Zitat antworten
Alt 30.09.10, 22:03   #2 (permalink)
Administrator
 
Benutzerbild von Mackz
 
Registriert seit: 02.10.01
Mackz Leistung: Pentium IMackz Leistung: Pentium I
Likes: 30
Standard

BasicAvid hatte vor einiger Zeit Tutorials zu dem Thema geschrieben.
Dort gibts auch ein Thema zum Erstellen einer Template-Engine.

Die Tutorials findest du hier: PHP - Tutorial: Ein FrontController in PHP
__________________
RL sux big time... auch 2012!

Deleting pr0n is like killing your best friend

[HaBo] bei Facebook - Werde Fan
Mackz ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 01.10.10, 00:49   #3 (permalink)
Themenstarter
 
Benutzerbild von overflow
 
Registriert seit: 17.01.04
overflow Leistung: Z3
overflow eine Nachricht über ICQ schicken overflow eine Nachricht über MSN schicken
Likes: 17
Standard

Danke dir,

habe es ein wenig überflogen. Für Einsteiger ist es nichts.
Man braucht schon einiges an Vorwissen um zu verstehen,
was er meint.
overflow ist offline   Mit Zitat antworten
Alt 01.10.10, 10:19   #4 (permalink)
 
Benutzerbild von BasicAvid
 
Registriert seit: 17.03.04
BasicAvid Leistung: Facit NTK
Likes: 2
Standard

Zitat:
Zitat von overflow Beitrag anzeigen
wie solch ein
PHP System eigentlich aussehen sollte,
welches PHP vom HTML Code trennt.
Es ist schonmal falsch zu denken, man müsste PHP vom HTML Code trennen. PHP wurde als Template-Engine entwickelt und sollte dann auch als solche genutzt werden. Klar kann man wie Smarty und Konsorten, sich erstmal eine eigene Script-Sprache ausdenken, wo man dann erstmal die Templates parsen muss. Aber was bringt mir das ganze? Nichts als Overhead und Performance einbußen. Also ist es besser man benutzt PHP selbst dafür.

Eine ganz einfache Template-Engine würde ich so machen:

Template-Engine:
PHP-Code:
<?php

class Template {

    private 
$tplVars;
    private 
$templatePath 'tpl/';
    
    public function 
__construct($templatePath null) {
        if (
$templatePath !== null)
            
$this->templatePath $templatePath;
    }
    
    public function 
display($tpl) {
        if (!
file_exists($this->templatePath $tpl)) {
            throw new 
Exception('Das angegebene Template ' $tpl ' existiert nicht.');
        }
        
ob_start();
        include(
$this->templatePath $tpl);
        
$content ob_get_contents();
        
ob_end_clean();
        
        echo 
$content;
    }
    
    public function 
get($key) {
        if (!
array_key_exists($key$this->tplVars))
            return 
null;
        
        return 
$this->tplVars[$key];
    }
    
    public function 
assign($key$value) {
        
$this->tplVars[$key] = $value;
    }
    
    public function 
__get($key) {
        return 
$this->get($key);
    }

    public function 
__set($key$value) {
        
$this->assign($key$value);
    }

}

?>
So sehe der Aufruf aus:

index.php
PHP-Code:
<?php

include "Template.class.php";

$tpl = new Template();
$tpl->test 'Ich bin ein Test!';
$tpl->assign('test2''Ich bin ein zweiter Test!');
$tpl->display('TestTemplate.tpl');

?>
Und so das Template:

TestTemplate.tpl:
HTML-Code:
<html>
    <head>
        <title>Test-Template</title>
    </head>
<body>
    <h1>Dies ist das Test-Template</h1>
    <p><?php echo $this->get('test'); ?></p>
    <p><?php echo $this->test2; ?></p>

</body>
</html>
Das ganze kann man jetzt noch schön erweitern.
__________________
Mfg Basic Avid
- Use it or be used! -
BasicAvid ist offline   Mit Zitat antworten
Alt 01.10.10, 15:16   #5 (permalink)
 
Benutzerbild von metax.
 
Registriert seit: 22.01.07
metax. Leistung: 8086
metax. eine Nachricht über ICQ schicken
Likes: 10
Standard

Wie ich bereits in einem anderen Thread zu dem Thema vor kurzem geschrieben habe, halte ich PHP-Templates nicht (mehr) für sinnvoll, da PHP selbst als Templatesprache konzipiert wurde und genügend Konstrukte hat, die das Einfügen von Content in HTML erleichtern.

Du solltest nur darauf achten, dass du Berechnungen, Datenbankzugriffe und andere Business-Logik in andere Klassen, FUnktionen oder PHP-Dateien auslagerst, und nicht in den HTML-Code einbettest.

Ansonsten hast du mit der Syntax <?=$variable?> schon eine einfache und übersichtliche Möglichkeit, Variablen auszugeben. Und mal im Ernst, Schleifen oder IF-Bedingungen sehen in purem PHP auch nicht schlechter aus als in irgendwelchen Templatesprachen:
PHP-Code:
<ul>
<? foreach ($array as $item) { ?>
<li><?=$item?></li>
<? ?>
</ul>
mfg, metax.
__________________
Wenn keiner zuschaut, teile ich heimlich durch Null!
Meine Homepage: Planet Metax | meine Bilder: DeviantArt | Twitter
metax. ist offline   Mit Zitat antworten
Alt 01.10.10, 18:04   #6 (permalink)
Member of Honour
 
Benutzerbild von beavisbee
 
Registriert seit: 22.02.07
beavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium III
beavisbee eine Nachricht über ICQ schicken
Likes: 77
Standard

Zitat:
Zitat von metax. Beitrag anzeigen
Syntax <?=$variable?>
Genau DAS sollte man, wenn man zukunftssicheren Code schreiben will, tunlichst unterlassen.

PHP 5.3 unterstützt <?, <?= und Konsorten nicht mehr - nur noch <?php !
Also doch lieber
PHP-Code:
<?php echo $this->foo?>
beavisbee ist gerade online   Mit Zitat antworten
Alt 01.10.10, 18:56   #7 (permalink)
 
Registriert seit: 12.08.10
mime Leistung: Pentium Imime Leistung: Pentium I
Likes: 30
Standard

Zitat:
Zitat von beavisbee Beitrag anzeigen
Genau DAS sollte man, wenn man zukunftssicheren Code schreiben will, tunlichst unterlassen.
ACK. Dieses "Feature" wollte man schon immer ignorieren. Abgesehen davon das "short open tags" nicht wirklich portable sind (Du kannst einfach nicht davon ausgehen, dass der Server auf dem dein Script eventuell laufen soll auch "short open tags" aktiviert hat) durch solche Konstrukte wie <?=$foo?> ist fremder Code oder Code den du lange nicht mehr angefasst hast, unglaublich blöd zu lesen.

Zitat:
PHP 5.3 unterstützt <?, <?= und Konsorten nicht mehr - nur noch <?php !
Wie kommst du darauf? Du kannst ab der 5.3 "short open tags" nicht mehr mit "ini_set()" setzen, sehr wohl aber immer noch in der php.ini bzw. in jedem Verzeichniss per .htaccess. Der default der php.ini hat sich aber wohl geändert. Per default ist "short open tags" nun deaktiviert. Es wurde überlegt "short open tags" in der Version 6 nicht mehr zu unterstützen. Das haben die sich aber auch nochmal überlegt.

http://www.php.net/~derick/meeting-n...nd-add-php-var

Micha
__________________
http://www.openvas.org

Geändert von mime (01.10.10 um 19:16 Uhr) Grund: Falsche URL...
mime ist offline   Mit Zitat antworten
Alt 01.10.10, 22:33   #8 (permalink)
Member of Honour
 
Benutzerbild von beavisbee
 
Registriert seit: 22.02.07
beavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium III
beavisbee eine Nachricht über ICQ schicken
Likes: 77
Standard

Okay, dann war's so, dass es in 5.3 nur deaktiviert war und in 6 rausfliegen sollte...
beavisbee ist gerade online   Mit Zitat antworten
Alt 05.10.10, 06:48   #9 (permalink)
 
Benutzerbild von b4ck
 
Registriert seit: 13.02.06
b4ck Leistung: Z3
Likes: 1
Standard

Zitat:
Zitat von beavisbee Beitrag anzeigen
Okay, dann war's so, dass es in 5.3 nur deaktiviert war und in 6 rausfliegen sollte...
nein. php 6 wird weiterhin

<?=

unterstützen.

wobei ich persönlich nicht verstehe was leute an <?php echo $foo ?>

so schlimm finden.
b4ck ist offline   Mit Zitat antworten
Alt 05.10.10, 07:38   #10 (permalink)
Member of Honour
 
Benutzerbild von beavisbee
 
Registriert seit: 22.02.07
beavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium III
beavisbee eine Nachricht über ICQ schicken
Likes: 77
Standard

Zitat:
Zitat von b4ck Beitrag anzeigen
nein. php 6 wird weiterhin[...]
deshalb schrieb ich ja "sollte" - es war ja geplant und wurde, wie aus dem von mime verlinkten Meeting-Protokoll zu entnehmen ist, wieder verworfen. Aber da es dennoch ab php 5.3 per default deaktiviert ist und man bei einem Großteil der Hosting-Angebote nicht die Möglichkeit hat, 'ne eigene php.ini zu setzen, kann man den Short-Tag wohl als "praktisch abgeschafft" betrachten.


Zitat:
Zitat von b4ck Beitrag anzeigen
wobei ich persönlich nicht verstehe was leute an <?php echo $foo ?>

so schlimm finden.
tja... diese Schreib-Faulheit eben... schlimme Krankheit...
beavisbee ist gerade online   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Web, Network & Multimedia Palace » (Web-) Design und webbasierte Sprachen » PHP eigenes PHP Template System
Themen-Optionen
Ansicht

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

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



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61