php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 06.01.2007, 13:10  
Erfahrener Benutzer
 
Registriert seit: 14.10.2005
Beiträge: 153
Fatal Error
Standard PHP und HTML sinnvoll verbinden

Hallo,
wie verbinde ich PHP und HTML sinnvoll mit einander? Damit meine ich dass ich in HTML nicht sonderlich viel php Quelltext reinschreiben möchte.

Bis jetzt habe ich das ganze so gelöst:
PHP-Code:
<table>
  <tr>
    <td>
      <?php require_once('left_frame.php'); ?>
    </td>
    <td>
      <?php require_once('right_frame.php'); ?>
    </td>
  </tr>
</table>
Diese 2 php Dateien 'left_, right_frame' enthalten nur switch case block wo dann entschieden wird welche seite als weiteres includet wird.
Hier muss ich jedoch trotzdem in anderen Tabellen die etwas anzeigen oder formularen viel php einbringen.

Bei z.B.: phpBB konnte ich keinen HTML quelltext in php finden, und umgekehrt.
Ist es möglich sowas komplett zu trennen?
Und / Oder wie mache ich das am effektivsten?
Fatal Error ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 06.01.2007, 13:43  
Erfahrener Benutzer
 
Registriert seit: 18.09.2003
Beiträge: 13.598
PHP-Kenntnisse:
Fortgeschritten
imported_Ben ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo,
was du suchst ist ein "Templatesystem".

Schau eventuell mal in eines der beiden Tutorials hier:
http://forum.developers-guide.net/showthread.php?t=684
http://forum.developers-guide.net/showthread.php?t=407

Grüße, Ben.
imported_Ben ist offline  
Alt 06.01.2007, 13:49  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Hallo,
da gibt es mehrere Möglichkeiten, entweder du setzt Template-Systeme wie zB Smarty [1,2] ein oder du drehst das ganze weiter und setzt auf das MVC Pattern [3].

Bei Template-Systemen hast du eine HTML-Seite, in der nurnoch Variablen stehen (höchstens noch Schleifen für die Ausgabe von Listen, aber keine Logik) und eine PHP-Datei, die die Programmlogik übernimmt, die Variablen mit Werten füllt und in die Template-Datei parsed.

Du hast also Inhalt und Logik physisch getrennt, in 2 Dateien.


Bei Smarty sieht das dann so aus:
example.tpl
Code:
<html>
<body>

<h1>{$title}</h1>
<table>
{foreach from=$numbers item=number}
<tr><td>{$number}</td></tr>
{foreachelse}
<tr><td>keine Zahlen</td></tr>
{/foreach}

</body>
</html>
example.php
PHP-Code:
<?php
// wiederkehrende Template-Definition, kann ausgelagert werden
$oTemplate = new Smarty();

// Programmlogik
$aTitles = array('ein Titel''noch ein Titel''ein anderer Titel');
$oTemplate->assign('title'$aTitles[rand(0count($aTitles))]);

$aNumbers range(125);
$oTemplate->assign('numbers'$aNumbers);

// Ausgabe
$oTemplate->display('example.tpl');
?>
Du kannst jetzt wie du siehst auch ganz einfach die Template-Datei wechseln und schon sieht deine Ausgabe auch anders aus, ohne am PHP herumzugefrickelt zu haben.

Es heißt auch immer, nun könnten die Designer im Dreamweaver alle Templates erstellen, das bißchen Template-Sprache erlernen, Variablen einsetzen und der Programmierer muss nurnoch die Logik machen.

Letztlich wird es ja so eh nicht gemacht, aber die Grundidee steht.

Nachteil ist, du musst die Template-Sprache lernen und sehr vorsichtig sein, dass du nicht irgendwann auch in deinen Templates "programmierst". Das passiert ganz schnell mal, denn if-else, foreach-foreachelse, include gibt es alles auch in Smarty. Und wenn du soweit bist, hättest du dir die Trennung auch sparen können.

Aber probiere es aus, es ist kein Hexenwerk und jeder Programmierer sollte es mal eingesetzt haben. Danach kann man immernoch sagen, nein, das ist ein Mehraufwand der sich für mich nicht lohnt.


Das MVC-Pattern ist das Model-View-Controller-Pattern. Ich habe es nur kurz im Zend-Framework eingesetzt, deshalb kann ich hier nicht so klugscheißen.
Es wird gesagt, DAS sei das richtige Pattern um Inhalt von Logik zu trennen.
Siehe [3]


[1] http://smarty.php.net
[2] http://de.wikipedia.org/wiki/Smarty
[3] http://de.wikipedia.org/wiki/Model_View_Controller
Zergling-new ist offline  
Alt 06.01.2007, 15:08  
Moderator
 
Benutzerbild von agrajag
 
Registriert seit: 02.10.2006
Beiträge: 3.820
PHP-Kenntnisse:
Fortgeschritten
agrajag wird schon bald berühmt werdenagrajag wird schon bald berühmt werden
Standard

Ich hoffe 'Fatal Error' macht das nix aus, dass ich mich jetzt einfach so einklinke...

Gibt es irgendwo ein kleines schnuckeliges Beispielprojekt das mit einer Template-Enginge und OO-Programmierung durchgezogen ist? Eben was überschaubares.

Hintergrund ist der: Ich weiß, dass Template-Systeme und OO-Programmierung wohl vieles erleichtern. Ich weiß was ein Objekt ist etc.pp. und ich kann ein Template-System benutzen, die Grundlagen sind also irgendwie da.

Ich würde das nur gerne mal an einem Stück sehen - weil da hapert's bei mir. Für mich ist das dann einfach x-facher Aufwand und keine Erleichterung. Mir fehlt sozusagen der AHA-Effekt.
__________________
Today you...Tomorrow me.
agrajag ist offline  
Alt 06.01.2007, 15:23  
Erfahrener Benutzer
 
Registriert seit: 02.04.2008
Beiträge: 2.603
Corvin befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Agrajag
Gibt es irgendwo ein kleines schnuckeliges Beispielprojekt das mit einer Template-Enginge und OO-Programmierung durchgezogen ist? Eben was überschaubares.
Schau dir mal die beiden Links von Ben an.
Corvin ist offline  
Alt 06.01.2007, 19:15  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Zitat:
Zitat von Zergling
Es wird gesagt, DAS sei das richtige Pattern um Inhalt von Logik zu trennen.
Jo, das wär dann auch gleich die Zusammenfassung. Während Template-System nur Logik/Daten von der Darstellung trennen, wird beim MVC eben auch Logik- und Datenebene nochmals voneinander gelöst. Das View kann man mit wohlwollen auch als Template-System betrachten

Beim MVC-Pattern (Model - View - Controller) besteht (von der Struktur) aus 3 Teilen. Der Controller bildet die eigentliche Programmlogik, das (der? ) Model hält Methoden zur Datenabfrage bereit und der (das? ..) View ist dann letztendlich für die Ausgabe zuständig. Bei konsequenter Umsetzung befindet sich in der View keine einzige Programmlogik und keine Daten (und bei den anderen entsprechend).

Der Sinn dahinter ist, dass bei einer Änderung in einer der 3 Teilen die anderen beiden vollkommen unberührt und weiterhin funktionsfähig bleiben sollten. Wechselt man zB das Datenbanksystem, so tauscht man einfach das entsprechende Model, dem Controller und View ist das dann egal.

Wenn nun eine Seite aufgerufen wird, landet Aufruf erstmal am Controller. Der wiederum holt sich Daten aus dem Model, macht damit irgendwas tolles und gibt irgendwas den View weiter, der sich dann um die Ausgabe kümmert. View und Model kommunizieren nicht miteinander, ebenso rufen View oder Model Funktionalitäten des Controllers auf. Model und/oder View können auch wegfallen, wenn sie nicht benötigt werden (zum Beispiel braucht eine Uhr keine Datenbank )

Für die Umsetzung des MVC-Patterns im Zend-Frame empfiehlt sich das das Tutorial umd ma reinzuschauen, ansonsten gibts Umsetzungen wie Sand am Mehr Und ist auch nicht immer sinvoll, weils doch um einiges umfangreicher werden kann.
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline  
Alt 07.01.2007, 00:06  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
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

Ist das Model nicht im Endeffekt sowas wie ne Datenbank Klasse? Also ich hab z.B. eine DB Klasse die ich je nach verwendetem DB System austauschen kann. Also die Klassen MySQL, Oracl, Textdateien haben die selben Methoden etc. nur greifen eben auf andere Systeme zu.

Wäre das jetzt dann ein Model oder muss man da noch stärker trennen? Also das z.B. eine Schleife zum auslesen von mehreren Einträgen auch noch zum Model gehört und nur ein Array mit dem Inhalt übergeben wird und dies dann vom Controller direkt an das View weitergegeben werden kann oder gehört die Schleife dann zum Controller?

Weil ansonsten ist ja Templatesystem mit MVC irgendwo ja das selbe, also das Templatesystem wäre dann der View, das Skript der Controller und die DB Klasse das Model.
Flor1an ist offline  
Alt 07.01.2007, 14:06  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.792
PHP-Kenntnisse:
Fortgeschritten
robo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz sein
Standard

Zitat:
Zitat von RaZoR
Ist das Model nicht im Endeffekt sowas wie ne Datenbank Klasse? Also ich hab z.B. eine DB Klasse die ich je nach verwendetem DB System austauschen kann. Also die Klassen MySQL, Oracl, Textdateien haben die selben Methoden etc. nur greifen eben auf andere Systeme zu.

Wäre das jetzt dann ein Model oder muss man da noch stärker trennen? Also das z.B. eine Schleife zum auslesen von mehreren Einträgen auch noch zum Model gehört und nur ein Array mit dem Inhalt übergeben wird und dies dann vom Controller direkt an das View weitergegeben werden kann oder gehört die Schleife dann zum Controller?

Weil ansonsten ist ja Templatesystem mit MVC irgendwo ja das selbe, also das Templatesystem wäre dann der View, das Skript der Controller und die DB Klasse das Model.
Soweit ich das bis jetzt verstanden habe ist das Model etwas mehr als nur eine Datenbankklasse, beispielsweise im Zendframework wird durch die Klasse Zend_DB_Table ein DAO (http://en.wikipedia.org/wiki/Data_Access_Object) geschaffen, was komplett alle Zugriffe wie erstellen, auslesen, verändern und löschen schon beinhaltet und bei Bedarf erweitert werden kann.
robo47 ist offline  
Alt 07.01.2007, 14:15  
Erfahrener Benutzer
 
Registriert seit: 18.09.2003
Beiträge: 13.598
PHP-Kenntnisse:
Fortgeschritten
imported_Ben ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Wir driften leicht von der eigentlichen Fragestellung ab ...
Nur so am Rande.

Zum Thema MVC gibt es ja dutzende Diskussionen und Ansichten.
Beispiele:
http://www.zfforum.de/showthread.php?t=33
http://forum.developers-guide.net/showthread.php?t=4685

Und natürlich weitere. Zu finden mit den Suchdiensten der eigenen Wahl.
imported_Ben ist offline  
Alt 07.01.2007, 15:00  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Im Endeffekt kommt es aber hin, dass das Model eine erweiterte DB-Klasse is, aber um zum eigentlich Thema zurück zu kommen: HTML und PHP zu trennen is recht einfach und auch recht verbreitet. Mit einer Template-Engine garkein Problem.
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch 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
Bestimmten Befehl der HTML verarbeitet Gokel PHP Tipps 2008 19 16.07.2008 00:13
[Erledigt] HTML Mail mit Lücken mitten in den Worten, wie kommt das? DeeFour PHP-Fortgeschrittene 2 29.05.2008 15:47
Html Code maskieren mit php Mania PHP Tipps 2008 5 12.10.2007 08:34
Variable und komplette HTML Datei chrisonline PHP Tipps 2007 3 24.05.2007 15:30
&amp;amp;amp;lt;if&amp;amp;amp;gt; &amp;amp;amp;lt;/if&amp;amp;amp;gt; in einer HTML Datei fuer Templ PHP-Fortgeschrittene 6 03.11.2005 12:05
[Erledigt] ne harte nuss ... php scripte in html needed ... ABER PHP Tipps 2005-2 10 01.09.2005 00:03
Kontaktformular, welches auf neue html Seite führt PHP Tipps 2005-2 4 20.07.2005 11:21
Daten aus einer HTML Quelltext herraus lesen. PHP Tipps 2005 1 30.05.2005 15:23
HTML Tabellenzeile in Tabelle einfügen? Datenbanken 2 28.01.2005 00:28
IMAP: Bild(er) in HTML Part richtig darstellen PHP-Fortgeschrittene 1 07.10.2004 12:21
{$varname.optelement} mit preg_match aus HTML extrahieren PHP Tipps 2004 0 11.09.2004 04:13
Unterschied HTML und PHP PHP Tipps 2004 4 28.08.2004 19:02
Validitor (HTML 4.01) = Schwachsinn? Filewalker Off-Topic Diskussionen 19 03.08.2004 15:27
ausgefuehrtes php file als html speichern PHP Tipps 2004 8 28.07.2004 17:59
[Erledigt] PDF aus HTML erzeugen ? PHP-Fortgeschrittene 2 05.06.2004 02:10

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
html mit php verbinden, php mit html verbinden, http://www.php.de/php-tipps-2007/43202-php-und-html-sinnvoll-verbinden.html, muss man html und php kombinieren, template sinnvoll php, html und php design sinnvoll nutzen, html mit php verknüpfen wiki, html mit php verknüpfen, sinnvoll php und html kombinieren, dreamweaver html mit php verknüpfen, html und php kombinieren, smarty beispielprojekt, beispielprojekt mvc php, zend beispielprojekt mvc, php oop mvc beispielprojekt, templatesystem sinnvoll, html und php kombinieren sinnvoll, template system sinnvoll

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:39 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.