zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden PHP: Trennung von code und html

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 01.05.2008, 10:25
Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 30.04.2008
Beiträge: 45
asdfgqw befindet sich auf einem aufstrebenden Ast
Standard PHP: Trennung von code und html

Ich hatte diesen thread iniziiert http://xhtmlforum.de/51630-oder-geht.html

Dort wird beiläufig die Trennung von html und code bei php erwähnt. Bisher kenne ich nur Wordpress und dort ist code und html ein grosses gigantisches unübersichtliches Mischmasch.

Könnte mir bitte mal jemand ein Beispiel posten wie diese Trennung bei php aussehen könnte? Vielleicht gibt es irgendwo ein Beispiel im web oder sogar ein Blogsystem auf Basis von php wo dies getrennt wird.
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 01.05.2008, 10:39
Benutzerbild von paracelsus
be simple
XHTMLforum-Kenner
 
Registriert seit: 16.07.2007
Ort: Kapfenberg - Austria, einige meinen am "Anus Mundi"
Beiträge: 4.788
paracelsus ist einfach richtig nettparacelsus ist einfach richtig nettparacelsus ist einfach richtig nettparacelsus ist einfach richtig nett
Standard

Servus!

Ich teile das gerne in Blöcke auf - dies ist aber auch von Anwendungen abhängig.
PHP-Code:
<?php
//php Block

if (irgentwas){
?>
<html zum beispiel formular>
<!-- Html Block -->
</html zum beispiel formular>
<?
}
//falls if nicht zutrifft
else {
?>
<html zum beispiel formular>
<!-- Html Block -->
</html zum beispiel formular>
<?
}
// weiter mit php
Ob es CMS gibt oder Blogs, die das so auteilen weiß ich nicht, glaube es auch nicht, habs nicht mal in meinem geschafft, das konsequent durchzuziehen.

Gruß
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 01.05.2008, 13:06
Benutzerbild von hemfrie
Administrator
XHTMLforum-Kenner
 
Registriert seit: 18.12.2003
Ort: Düsseldorf
Beiträge: 2.777
hemfrie ist jedem bekannthemfrie ist jedem bekannthemfrie ist jedem bekannthemfrie ist jedem bekannthemfrie ist jedem bekannthemfrie ist jedem bekannt
Standard

Die meisten Template-Engines lagern das PHP komplett aus. Die Ausgaben werden dann mit Hilfe von Template-Variablen in das bestimmte HTML-Template eingefügt.

Die bekannteste PHP-Template-Engine ist wahrscheinlich Smarty.

Hab hier mal vom Smarty Wiki ein einfaches Beispiel herausgenommen, wie die Trennung vorgenommen wird. Das unterscheidet sich im übrigen auch nicht großartig von anderen Template-Engines.

Index.php
PHP-Code:
include('Smarty.class.php');

// create object
$smarty = new Smarty;

// assign some content. This would typically come from
// a database or other source, but we'll use static
// values for the purpose of this example.
$smarty->assign('name''george smith');
$smarty->assign('address''45th & Harris');

// display it
$smarty->display('index.tpl'); 
index.tpl

Code:
<html>
<head>
<title>User Info</title>
</head>
<body>

User Information:<p>

Name: {$name}<br>
Address: {$address}<br>

</body>
</html>
output
Code:
<html>
<head>
<title>User Info</title>
</head>
<body>

User Information:<p>

Name: george smith<br>
Address: 45th & Harris<br>

</body>
</html>
Dieses Beispiel stammt von Smarty.net

Man kann auf der HTML-Seite mit Smarty allerdings noch viel mehr machen als in diesem Beispiel zu sehen sehen ist. Es können z. B. Arrays mit Hilfe von Schleifen ausgegeben werden oder sogar if-Abfragen durchgeführt werden ...

Der eigentliche PHP-Code wird allerdings nie in einer .tpl Datei zu sehen sein.

Ich arbeite jetzt schon längere Zeit mit dieser Template-Engine und wenn man sich erstmal an die Syntax gewöhnt hat, ist es sogar eine Arbeitserleichterung. Gerade bei größeren Projekten schafft man damit eine Ordnung und weiß wo man bei auftretenden Fehlern zu suchen hat.

Vermischt man PHP und HTML und hat noch zusätzlich ausgelagerte PHP-Skripte, dann wird der Aufwand einen Fehler zu finden oder aber auch Änderungen vorzunehmen sehr hoch.
Mit Zitat antworten
  #4 (permalink)  
Alt 01.05.2008, 13:07
Benutzerbild von kampfgnom
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 22.11.2006
Ort: Radebeul
Beiträge: 1.808
kampfgnom befindet sich auf einem aufstrebenden Ast
Standard

Para, das ist absolut keine Trennung von HTML und PHP.

Schau dir Template Systeme wie Smarty an. Oder das CMS Typo3.
Letztlich funktioniert das meiste im sog. 3-Schichten-Modell:
eine schicht die sich um die Beschaffung der Daten kümmert,
eine schicht die sich um dsa Layout (den View) kümmert (auch xml, pdf etc)
und eine schicht die alles kontrolliert und steuert (controller)
--> MVC - Pattern
Damit kann man das sehr gut machen. (@para jetzt nicht wieder die Diskussion ob prozetual oder OO)
Sicher ist das nur ein weg von vielen.

Um es nocheinmal abstrakt zu sagen:
Es geht darum, das du ein HTML-Template hast in dem du, zb. Platzhalter definierst die von einem Parser ersetzt werden.

Wichtig ist dabei:
Bei komplexeren Views wirst du ohne PHP nicht mehr weiterkommen. Viel wichtiger als die Trennung von PHP und HTML ist die trennung von Buissnes logik und Ausgabe logik!

Also ne foreach-schleife in einem template ist durchaus sinnvoll, sonst kannst du nie ein array in einem template durchlaufen lassen.

Achja, dieses Thema was du hier anschneidest ist auch so ein Glaubenskrieg-thema!
Jedem das seine. Ich bevorzuge das oben angesprochene MVC pattern (zur zeit wird das ganze noch bissle komplexer gemacht, Ich werde mein komplettes CMS als ein Objektbaum aufbauen....aber das ist wieder offtopic)

Ich hoffe mein Beitrag hat dir geholfen!
Gabriel

Hemfrie war schneller....mist
__________________
Meine Spielwiese: http://blog.kanedo.net
Ich bei Flickr? Da: Flickr: Fotostream von kanedo-projekt
Für open Source Liebhaber: open Com

Auch ich Zwitschere als @kanedo
Mit Zitat antworten
  #5 (permalink)  
Alt 01.05.2008, 13:13
Benutzerbild von hemfrie
Administrator
XHTMLforum-Kenner
 
Registriert seit: 18.12.2003
Ort: Düsseldorf
Beiträge: 2.777
hemfrie ist jedem bekannthemfrie ist jedem bekannthemfrie ist jedem bekannthemfrie ist jedem bekannthemfrie ist jedem bekannthemfrie ist jedem bekannt
Standard

Zitat:
Zitat von kampfgnom Beitrag anzeigen
Hemfrie war schneller....mist
Hehe, eine Minute schneller
Mit Zitat antworten
  #6 (permalink)  
Alt 01.05.2008, 13:16
Benutzerbild von kampfgnom
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 22.11.2006
Ort: Radebeul
Beiträge: 1.808
kampfgnom befindet sich auf einem aufstrebenden Ast
Standard

Ich hab zu lange den MVC artikel bei wikipedia gesucht.
Sowas von verflixt aber auch...hatte gedacht ich habs diesmal als erster geschafft...aber du hast genau mein inhalt schon eher geposted....dammed

Aber egal, so lange es hilft
__________________
Meine Spielwiese: http://blog.kanedo.net
Ich bei Flickr? Da: Flickr: Fotostream von kanedo-projekt
Für open Source Liebhaber: open Com

Auch ich Zwitschere als @kanedo
Mit Zitat antworten
  #7 (permalink)  
Alt 01.05.2008, 13:19
Benutzerbild von hemfrie
Administrator
XHTMLforum-Kenner
 
Registriert seit: 18.12.2003
Ort: Düsseldorf
Beiträge: 2.777
hemfrie ist jedem bekannthemfrie ist jedem bekannthemfrie ist jedem bekannthemfrie ist jedem bekannthemfrie ist jedem bekannthemfrie ist jedem bekannt
Standard

Zitat:
Zitat von kampfgnom Beitrag anzeigen
geschafft...aber du hast genau mein inhalt schon eher geposted....dammed

Aber egal, so lange es hilft
Ich finde die Beiträge ergänzen sich gut.
Mit Zitat antworten
  #8 (permalink)  
Alt 01.05.2008, 13:29
Benutzerbild von mantiz
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 25.02.2007
Beiträge: 2.843
mantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz seinmantiz kann auf vieles stolz sein
Standard

Ich hab' mir ne eigene Template-Engine geschrieben, die ebenfalls in der Lage ist Schleifen und Bedingungen zu verarbeiten. Weiterhin habe ich die Möglichkeit Module aufzurufen.

Module sind bei mir Klassen, wie z.B. "Shop", da gibt es dann Methoden, um z.B. Kategorien oder Artiekl zu listen, etc.

Ein Aufruf im Template sieht das z.B. so aus:
Code:
<x_module module="Shop" action="listArticles" param="{|category|}, 10" returnvar="{|articles|}" />
<x_if condition="{#|articles|}">
   <x_foreach array="{|articles|}" item="{|article|}">
      {|article:name|}<br />
   </x_foreach>
<x_else />
   Keine Artikel vorhanden!
</x_if>
Dadurch, dass ich Bedingungen und Schleifen verwenden kann, kann ich die ganze Logik in die Templates verfrachten und schreibe mir die Klassen/Module so, dass diese lediglich die Daten liefern/verarbeiten können.

Ist imho ziemlich übersichtlich, besonders, weil ich meine Template-Tags in meinem Editor extra hervorheben kann.

Im Moment sind aber noch "dirty" Lösungen bei mir möglich, da ich fast überall in den Templates auch PHP-Code erlaube, was ich entfernen will, da man sonst schnell dazu neigt erstmal direkt PHP-Code ins Template zu schreiben, bevor man sich hinsetzt und die Template-Engine erweitert, wenn man etwas findet, was noch nicht unterstützt wird, so kann es dann ebenfalls schnell unschön werden.

Variablen kann ich direkt in den Templates setzen, wodurch ich keine PHP-Datei brauche, die sich um das Template kümmert, z.B. habe ich auch
Code:
<x_set_if condition="!{?|per_page|} || !{|per_page|}" var="{|per_page|}" value="10" />
was die Variable {|per_page|} auf 10 setzt, falls diese noch nicht gesetzt ist oder keinen Wert enthält.
So kann man oben in Templates erstmal alle Default-Variablen setzen und anschließend kann man davon ausgehen, dass diese entsprechend gesetzt sind.
Mit Zitat antworten
  #9 (permalink)  
Alt 01.05.2008, 14:12
Neuer Benutzer
neuer user
 
Registriert seit: 16.03.2007
Beiträge: 18
PHPhil befindet sich auf einem aufstrebenden Ast
Standard

Früher habe ich auch eigene Template-Engines oder Smarty verwendet. Aber mit zunehmender Komplexität der Applikationen macht dies keinen Sinn mehr und ich nutze nun direkt PHP.

Man gucke nur mal Mantizs Template Engine an ... da muss man sich zuerst derart reinfuchsen und Konventionen lernen, dass man gleich PHP nehmen könnte.
Mit Zitat antworten
Sponsored Links
  #10 (permalink)  
Alt 01.05.2008, 14:14
Benutzerbild von hemfrie
Administrator
XHTMLforum-Kenner
 
Registriert seit: 18.12.2003
Ort: Düsseldorf
Beiträge: 2.777
hemfrie ist jedem bekannthemfrie ist jedem bekannthemfrie ist jedem bekannthemfrie ist jedem bekannthemfrie ist jedem bekannthemfrie ist jedem bekannt
Standard

Hi mantiz,

gefällt mir gut Dein Templatesystem. Es veranschaulicht, dass es nicht immer Smarty oder sonst ein System sein muss.

Wichtig ist ja auch nur, die Logik die hinter solchen Templatesystemen steckt zu verstehen und zu nutzen.

Hab Deine Beispiele mal in Smarty nachgebildet. So unterschiedlich sind die beiden Systeme gar nicht

Code:
<x_module module="Shop" action="listArticles" param="{|category|}, 10" returnvar="{|articles|}" />
<x_if condition="{#|articles|}">
   <x_foreach array="{|articles|}" item="{|article|}">
      {|article:name|}<br />
   </x_foreach>
<x_else />
   Keine Artikel vorhanden!
</x_if>
Code:
{my_object->meth_x p1="articles" p2="10" assign="output"}
{if isset($output)}
  {foreach from=$output item=article}
     {$article}<br />
  {/foreach}
{else}
  Keine Artikel vorhanden!
{/if}
Code:
<x_set_if condition="!{?|per_page|} || !{|per_page|}" var="{|per_page|}" value="10" />
Code:
{if !isset($per_page)}{assign var=per_page value="10"}{/if}
Mit Zitat antworten
Sponsored Links
Antwort

Stichwörter
mvc, php, php template, smarty, template engine, templates

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 are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Redesign für Steiner Cycling Team pkipper Site- und Layoutcheck 11 09.02.2011 13:25
Mit PHP html teilweise ersetzen Nappi Serveradministration und serverseitige Scripte 6 15.06.2010 13:08
Safari "druckt" HTML code im browser diver (X)HTML 3 31.12.2009 00:45
JQuery anfänger fragen ? wie man den code in php einbaut? kjvision Javascript & Ajax 1 21.08.2008 18:02
Php Code und Html Code in Variable ausführen? The Sayan Serveradministration und serverseitige Scripte 17 23.01.2007 02:00


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:52 Uhr.