php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 12.06.2007, 16:54  
Benutzer
 
Registriert seit: 05.04.2005
Beiträge: 45
PHP-Kenntnisse:
Fortgeschritten
aktionkuba
Standard Template Engine vs PHP-Includes

Hallo,

ich habe mir jetzt einige Forenbeiträge in den unterschiedlichsten Foren zum Thema Template-Engines durchgelesen. Wie es scheint, gibt es 2 Lager. Die einen sind dafür eine fertige Engine Ã* la Smarty zu verwenden, andere halten Template-Engines für überflüssig und arbeiten mit includes und Pseudo-Templates. Jetzt zu meiner Frage:

Was ist sinnvoller? Gibt es eine Grenze wieviele Includes ein Projekt verträgt? Ich meine, wenn in diesen PHP-Templates eine Schleife arbeitet die etwas komplizierter ist, kann es sein, daß include dann einen Fehler macht, weil es zu schnell oder zu langsam ist?

Bin gerade ratlos. Und gespannt auf interessante hilfreiche Antworten.
aktionkuba ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 12.06.2007, 18:30  
¯\_(ツ)_/¯
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.814
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Im Endeffekt ist ein Templatesystem nichts anderes als ein auf "include" basiertes System.

In Smarty wird z.B. das Template welches man gestalltet bei der ersten Benutzung in eine PHP Datei umgewandelt in der genau das steht was auch jemand schreiben würde der mit "includes" arbeitet. Smarty "included" dann bei den nächsten aufrufen dieses Templates die PHP Datei und führt diese aus. Im Endeffekt kommts also aufs selbe raus.

Die Performance von der "include-Methode" wirst du wohl mit keinem Templatesystem á la Smarty hinbekommen. Zu Fehlern kommt es nicht da erst included wird egal ob da eine Schleife in der Datei ist oder nicht.

Die Frage ist eher BRAUCHST du ein Templatesystem bzw. wäre es sinnvoll? Templatesysteme bieten oft einige Vorteil gegenüber nur die includes per Hand zu erstellen. Z.B. kann Smarty die Ausgabe cachen (zwischenspeichern). Bei meinem Projekt wird die Startseite mit allerlei Daten aus der Datenbank erstellt, da ist es sehr sinnvoll die Seite für 1 Stunde zu cachen ... so wird aus z.B. 10 000 DB Querys pro Stunde einfach nur einmig 5 um die Seite zu erstellen.

Wenn du natürlich die Vorteile die Smarty und Konsorten bieten nicht brauchst, reicht es auch einfach mit der "include" Methode zu arbeiten.

Ich verwende Smarty, zwar nur mit einem kleinen Teil der Features aber es bietet doch einige Möglichkeiten die mir die Arbeit erleichtern bzw. wichtig für die Performance sind.
__________________
▇█▓▒░◕‿‿◕░▒▓█▇
Flor1an ist offline  
Alt 12.06.2007, 22:20  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard Re: Template Engine vs PHP-Includes

Zitat:
Zitat von aktionkuba
andere halten Template-Engines für überflüssig und arbeiten mit includes und Pseudo-Templates.
Ziel deiner Anwendungen sollte es (aus Sicht des Programmierers) sein, dass du den Inhalt, die Daten von deinem Code trennst. Der Vorteil liegt auf der Hand: Ganz primär der Übersichtsgewinn, ich erfasse das HTML recht schnell und getrennt davon kann ich den Code betrachten, der jetzt frei von HTML ist. Das ist gut, denn nun kann ich den HTML-Code ändern, ohne erstens (das schwächere Argument) PHP beherrschen zu müssen und zweitens, das Template komplett austauschen oder ersetzen, ohne den Code zu beeinflußen. Das könnte entweder ein Skin-Switcher für den Webseiten-Besucher sein, oder eine Layout-/Corporate-Design Änderung seitens des Betreibers sein.
Hier können noch mehr Vorteile zum Tragen kommen, immer abhängig davon ob du Flexibilität als Vorteil siehst. Das musst du nicht, man kann ja auch anfangen zu argumentieren, dass ein Skript in einer einzigen Datei kompakter und schneller ist. Das ist auch richtig. Die Argumente musst du für dich persönlich gewichten.

Zitat:
Zitat von aktionkuba
Was ist sinnvoller? Gibt es eine Grenze wieviele Includes ein Projekt verträgt? Ich meine, wenn in diesen PHP-Templates eine Schleife arbeitet die etwas komplizierter ist, kann es sein, daß include dann einen Fehler macht, weil es zu schnell oder zu langsam ist?
Nein, ich sage mal, mit kleinen und mittleren Projekten kannst du diese Grenze nicht durchbrechen. Jeder include() verursacht jedoch einen langsamen Dateizugriff. Das Projekt wird insgesamt langsamer. Aber keine Sorge, bei kleinen bis mittleren Projekten ist dies kaum relevant.

Du solltest zunächst nur berücksichtigen, ob ein Auslagern von Code aus programmiertechnischer Sicht Sinn macht. Performance kannst du später durch Cachen oder andere Tricks erhöhen.

Zitat:
Zitat von aktionkuba
Bin gerade ratlos. Und gespannt auf interessante hilfreiche Antworten.
Smarty ist durch seine Komplexität etwas überladen. Ich empfehle dir eine ganz einfache Syntax für Templates:

Template:
Code:
<html>
<body>

<h1><?=$this->title?></h1>

<? foreach ($this->books as $book): ?>
<?=$book?>

<? endforeach; ?>

</body>
</html>
Klasse:
PHP-Code:
<?php
class XTemplate
{
    private 
$_variables = array();

    public function 
__set($key$value)
    {
        
$this->_variables[$key] = $value;
    }

    public function 
__get($key)
    {
        if (!
array_key_exists($key$this->_variables)) {
            
trigger_error("xtemplate::__get(): property [i]$key[/i] does not exist"E_USER_NOTICE);
            return;
        }
        return 
$this->_variables[$key];
    }

    public function 
display($template)
    {
        if (!
is_readable($template)) {
            
trigger_error("xtemplate::display(): template file [i]$template[/i] is not readable"E_USER_NOTICE);
            return;
        }
        include 
$template;
    }
}
?>
Anwendung:
PHP-Code:
<?php
require_once 'XTemplate.php';
$tpl = new XTemplate();
$tpl->title 'Meine Bücherliste:';
$tpl->books = array('Die Bibel''Die rote Couch''Die dunkle Seite');
$tpl->display('template.tpl.php');
?>
(ungetestet)

In diesem Beispiel verwendest du im Template-File einfach PHP als Template-Sprache und greifst per $this auf die Properties des Objekts zu, dass du im letzten Codeabschnitt erstellt hast.

So einfach kannst du also schon PHP von HTML trennen, mit dabei sogar schon eine Mini-Fehlerprüfung.

Ich würde ersteinmal versuchen, ob dir das nicht schon reicht, oder ob es wirklich noch Smarty sein muss.
Zergling-new ist offline  
Alt 12.06.2007, 22:29  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.633
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo aktionkuba,

Zitat:
Was ist sinnvoller? Gibt es eine Grenze wieviele Includes ein Projekt verträgt? Ich meine, wenn in diesen PHP-Templates eine Schleife arbeitet die etwas komplizierter ist, kann es sein, daß include dann einen Fehler macht, weil es zu schnell oder zu langsam ist?
Wie Zergling schon sagte geht es darum, ob du das brauchst. In recht komplexen Systemen und Seiten ist das meiner Ansicht nach unentbehrlich, da man nur so Funktionen kapseln und wiederverwenden kann. Änderungen am Aussehen passiert dort rein über Templates, die Funktion an sich bleibt gleich. So kann man Module erzeugen, die in unterschiedlichen Seiten anders aussehen und im Kern die jedoch gleiche Funktion besitzen. Verschiedene objektorientierte Design-Pattern gehen auf dieses Thema ein. Hier ist allen voran MVC zu nennen.

Für eine einfache Seite kann ich dir nur empfehlen, das auf die herkömliche Art und Weise zu gestalten, hast du komplexere Strukturen, solltest du zwingen eine fertige Template-Engine oder gar ein Framework (z.B. http://www.adventure-php-framework.org) einsetzen, das dir diese Funktion bereits bietet.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
Alt 13.06.2007, 10:45  
Benutzer
 
Registriert seit: 05.04.2005
Beiträge: 45
PHP-Kenntnisse:
Fortgeschritten
aktionkuba
Standard

Hallo,

erstmal vielen Dank für die ausführlichen Antworten. Die kleine Template-Engine von Zergling erscheint mir mehr als ausreichend für die Sites, mit denen ich zu tun habe.


@RaToR
Danke für die Erklärung wie Smarty im grundegenommen funktioniert. Was bei unseren Kunden oft der Fall ist, daß sie einen Strato- oder 1&1-Webspace haben und wir sie nicht davon überzeugen können, das Paket zu einem guten Webspace zu wechseln. Meinst Du, daß Smarty auf so einem Webspace gut läuft? Ich habe da keine Erfahrung, könnte mir aber vorstellen, daß es Probleme gibt...


@ Zergling
Ich habe noch eine Frage wegen der Includes. Wie würdest Du folgende Situation angehen: Du hast bestimmte kleine Schnipsel an Html - ich nenne die mal Boxes. Jetzt will ich über einen Array unterschiedliche Boxes includen.

Bisher mache ich das so (vereinfacht dargestellt):

PHP-Code:

$boxes_show 
= array('calendar','latest_news','latest_gallery');

for(
$i=0;$i<count($boxes_show); $i++){
include(
"inc/boxes_".$boxes_show[$i].".inc.php");

Pro dargestellt Seite können das schon 8 Boxes werden. Macht das so Sinn?


@dr.e.
MVC habe ich mir durchgelesen (als auf Wikipedia) aber ich muss gestehen, daß ich es nicht ganz verstanden habe. Das Adventure-Framework klingt interessant. Ich schau mir das mal genauer an!
aktionkuba ist offline  
Alt 13.06.2007, 18:24  
¯\_(ツ)_/¯
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.814
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Ja im Endeffekt könntest du es so machen. Wenn allerdings der Inhalt der boxes_xxx.inc.php Dateien gleich ist ... dann solltest du vlt. in der Datei eine for-Schleife verwenden und den Inhalt in der .php Datei 8 mal ausgeben.
Die Frage ist ob du die Boxen überhaupt in seperaten Dateien brauchst oder sie nicht irgendwo zusammenfassen kannst. Ansonsten passt es schon allerdings würde ich
PHP-Code:
foreach ($boxes_show as $box) {
    include(
'inc/boxes_'.$box.'.inc.php');

verwenden.


Wenn du PHP unterstützung bei dem Webspace von 1&1 oder Strato hast wird Smarty bestimmt funktionieren. Smarty hat zwar ne Menge an Funktionen aber lädt diese nur bei Bedarf. Probleme sollte es mit Smarty eigentlich nicht geben. Die Ladezeiten wirst du sicher nicht bemerken ob du jetzt so ein simples Templatesystem wie das von Zergling verwendest oder Smarty. Das wirkt sich nur bei Seiten aus wo du wirklich mehrere 100 User gleichzeitig hast, dies schaffen aber nur wenige Seiten. Also zu Problemen wirds bestimmt nicht kommen.
__________________
▇█▓▒░◕‿‿◕░▒▓█▇
Flor1an ist offline  
Alt 13.06.2007, 21:06  
Benutzer
 
Registriert seit: 18.08.2006
Beiträge: 61
Jogibär
Standard

Lesenswert: http://www.bastian-frank.de/site/fro...t.php?idart=47
Jogibär ist offline  
Alt 14.06.2007, 07:03  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.633
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo aktionkuba,

Zitat:
@dr.e.
MVC habe ich mir durchgelesen (als auf Wikipedia) aber ich muss gestehen, daß ich es nicht ganz verstanden habe. Das Adventure-Framework klingt interessant. Ich schau mir das mal genauer an!
Solltest du zu diesen Themen Hilfe brauchen, melde dich.


@Jogibär: Der Artikel ist echt süß. Ist übrigens genau einer der Gründe, warum ich vor Jahren mit der Entwickung eines Frameworks begonnen habe: ordentlich programmieren zu wollen und für die Ausgabe in ein Bild die selben Business-Komponenten nutzen zu können. Ich halte nichts von der Abbildung sämtlicher Komplexität in Templates (man sieht das ja auch an meinem Framework).
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
Alt 14.06.2007, 12:03  
Benutzer
 
Registriert seit: 05.04.2005
Beiträge: 45
PHP-Kenntnisse:
Fortgeschritten
aktionkuba
Standard

@RaZoR
Klingt einleuchtend mit den Boxes in einer Datei. Ein bisschen Probleme hatte ich noch mit der freien Sortierung, aber mit einem bisschen array-Geschubse bekommt man es doch hin

Kannst Du noch erklären, warum Du die foreach-Schleife der for-Schleife vorziehst?

Wegen Smarty. Ist das Dein persönlicher Erfahrungswert oder ist das so ein genereller Tenor zum Thema Smarty und Strato-/1&1-Webspace.


@Jogibär
Hab ich auch schon zuvor gelesen. Eben dieser Artikel hatte mich letzte Woche zum nachdenken gebracht! Finde ich echt gut.


@dr.e.
Danke für das Angebot. Ich werde mich wohl am Wochenende hinsitzen und falls es Frage gibt werde ich mich melden!
aktionkuba ist offline  
Alt 14.06.2007, 22:23  
Erfahrener Benutzer
 
Registriert seit: 18.09.2003
Beiträge: 13.598
PHP-Kenntnisse:
Fortgeschritten
imported_Ben ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von Jogibär
Danke. Da kann man mal drauf verlinken!
imported_Ben ist offline  
 


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
XmlHTTPRequests statt Template Engine! Performance? xueluf PHP-Fortgeschrittene 3 09.04.2008 11:35
Eckige Klammern in Template nutshell PHP Tipps 2006 9 05.06.2006 19:12
template in template einfuegen tonne PHP Tipps 2005-2 8 10.11.2005 22:24
Templates mit includes bei vblib? PHP-Fortgeschrittene 3 07.09.2005 08:28
Template Engine die PHP5+E_STRICT überleben PHP-Fortgeschrittene 0 17.08.2005 10:33
Include Problem! Links inerhalb eines Includes ... PHP Tipps 2005-2 14 23.07.2005 20:20
Template verständniss problem; referenz PHP Tipps 2005 17 19.05.2005 06:06
Template: Verschachteln von foreach PHP Tipps 2005 2 12.05.2005 15:37
Php Code als Variable definieren und in Template darstellen PHP Tipps 2004-2 4 31.12.2004 16:22
suche ein bestimmtes template system PHP Tipps 2004-2 2 07.11.2004 19:49
Template Parser PHP-Fortgeschrittene 9 06.10.2004 23:04
PHP BB Template Engine :: Blöcke??? PHP Tipps 2004 7 02.09.2004 21:01
Suche Template Parser - Muss PHP Datein includen können Schaelle PHP Tipps 2004 0 01.07.2004 20:48
[Erledigt] Template Scripting PHP-Fortgeschrittene 2 04.06.2004 18:34

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php template system, include vs template enigme, http://www.php.de/php-tipps-2007/44181-template-engine-vs-php-includes.html, php template include, template engie sinnvoll, php template engine sinnvoll?, einfache template engine php, php include template, php template performance, sinnvolles template system, php include vs. template engine, wie sinnvoll ist ein template system, php sinnvoll template, php for schleife template system, template system schleifen, for schleife template system#, template system schleife, php as template system, smarty in gebrauch sinvoll, template schleife php

Alle Zeitangaben in WEZ +1. Es ist jetzt 12:05 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.