php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 10.02.2007, 12:16  
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 Was ist Aufgabe des Templates (Smarty), was nicht?

Hallo,

ich versuche mich grade in die Verwendung von Templates bzw. die Trennung von Logik und Design in PHP reinzufuchsen.
Ich habe dazu erstmal Smarty als Templatesystem gewählt.

Mir sind nur einige Dinge nicht ganz klar.
Beispiele:

Ein aufbereiten eines Textes einer Variable (also htmlentities() und nl2br()) mache ich idealerweise wo? Direkt im Code - also bevor ich die Variable Smarty übergebe oder erledige ich das in Smarty über {$var|escape|nl2br}?
Oder überlegt man sich das von Fall zu Fall?

Oder wenn ihr ein Datum habt - formatiere ich das erst in Smarty? {$datum|date_format:"%d.%m.%Y %H:%M"}
Oder erledige ich das zuvor und übergebe Smarty ein formatiertes Datum?
Ich möchte eigentlich auch die Möglichkeit das Datumsformat zentral an einer Stelle zu ändern - wie geht das mit Smarty am idealsten?

Nächstes Beispiel:
Wenn ich in einer Liste einen Eintrag hervorheben möchte - "darf" ich das in Smarty machen oder "muss" ich es sogar?


Bin für alle Hinweise dankbar.

Agrajag
__________________
Today you...Tomorrow me.
agrajag ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 10.02.2007, 14:10  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Meine persönliche Meinung ist, dass das Template alles schon im richtigen Format geliefert bekommen sollte.

Sonst hab ich irgendwann die halbe Logik im Template und wenn ich dann die Sprache umschalten will, muss ich auch alle Templates kopieren, weil die Datums-Darstellung darin schon fest verankert ist.

Schau dir aber auch jeden Fall auch MVC an!
Zergling-new ist offline  
Alt 10.02.2007, 16:48  
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 Agrajag,

du solltest hier noch einen Schritt weiter gehen und dich - wie Zergling schon sagte - mit weiterführender Literatur zu MVC und 3-Schicht-Architektur. Hier gilt grundsätzlich folgendes:

- Für die Inhalte der Applikation werden eigene Objekte (Domain-Objekte deklariert, die die Daten der Applikation enthalten)
- Geschäftslogik wird in einer eigenen Software-Schicht gekapselt (macht sowas wie Formatierung von Datums, oder Bearbeitung von Inhalten in den Domain-Objekten)
- Daten-Acquise fällt in den Aufgaben-Bereich der Datenschicht. Diese läd die Daten irgendwoher und stellt diese in Domain-Objekten der Business-Schicht zur Verfügung
- Die Darstellung der GUI (hier in HTML) übernimmt die Präsentations-Schicht. Ein Teil dieser kann eine Template-Engine wie Smarty sein.

Mach mir ein Beispiel und ich kann dir das detaillierter erklären.
__________________
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 10.02.2007, 17:54  
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

Zitat:
Zitat von Zergling
Meine persönliche Meinung ist, dass das Template alles schon im richtigen Format geliefert bekommen sollte.
So hab ich es bisher auch. Wobei es mir da irgendwie so vorkommt als geht mir die Flexibilität verloren. Beispielsweise könnte ich im Template einen Text in einer Textarea platzieren wollen, dann wäre es schlecht wenn er schon davor nl2br() drüberlief...

[quote="dr.e"]
Zitat:
Zitat von dr.e.
du solltest hier noch einen Schritt weiter gehen und dich - wie Zergling schon sagte - mit weiterführender Literatur zu MVC und 3-Schicht-Architektur. [...]
Ich hab' schon erste Gehversuche mit dem MVC-Pattern gemacht. Allerdings in Java und da fiel mir das schon schwer - und das jetzt auf PHP bzw. Webanwendungen zu übertragen schaff ich irgendwie (noch) nicht.

Zitat:
Mach mir ein Beispiel und ich kann dir das detaillierter erklären.
Danke für das Angebot.

Ok, ich versuch mal ein kleines Beispiel zu konstruieren:

Ich habe 2 Klassen User und Verein. Die User und Vereine sind in der Datenbank abgelegt.
Ich habe eine index.php die je nach URL-Parameter verschiedene Dateien einbindet.
Eine solche Datei kann z.B. der Login sein (include login.php in der index.php) - dort benutze ich dann ein DAO um den passenden User aus der Datenbank zu holen.
Oder es kann eine Datei sein in der sich ein User in einen Verein einträgt etc. pp. (anmelden.php)

In diesen Dateien hol ich mir also die entsprechenden Objekte und mach weiß Gott was damit.
In jeder dieser Dateien nutze ich dann Smarty und ein Template um die Ausgabe zu erledigen.
z.B. für die anmelden.php, um eine Liste der Vereine anzuzeigen:
Ich hole mir wieder über ein DAO (VereinDAO) alle Vereine (also ein Array mit Verein-Objekten). Das durchlaufe ich und bastel mir dabei ein Array für Smarty / das Template zusammen.

Also Quasi (ich weiß, dass das nicht hinhaut - nur dem Verständnis halber):
Model: die beiden Klassen User und Verein
View: die Template-Dateien
Controller: die includierten PHP-Dateien (bspw. login.php).

Mir fällt gerade kein besseres Beispiel ein...
__________________
Today you...Tomorrow me.
agrajag ist offline  
Alt 10.02.2007, 18:21  
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

Hmm, das ist doch schon mal nicht so schlecht für den Anfang. Deine index.php ist in diesem Fall der (geskriptete) Pagecontroller, der Funktionen einbindet. Was du an deinem Design noch verbessern könntest wär folgendes:

- Erstelle eine Klasse, die du "Mapper" nennst und implementiere dort generisch, oder fallspezifisch alle Methoden, die du brauchst um Daten zu lesen.
- Implementiere eine "Manager", der den "Mapper" läd und sich von diesem die nötigen Daten geben lässt und entsprechend aufbereitet an deine "DocumentController" (z.B. anmelden.php) weitergibt.

Dann hast du bereits ein 3-Schicht-Modell und musst in den jeweiligen Funktions-Dateien nur noch auf diese zurückgreifen. Vorteil ist zudem, dass du die Funktionen an zentraler Stelle einbinden kannst und dich innerhalb der Funktions-Dateien nicht mehr um das Hnadling mit der DB o.ä. kümmern musst.

Solltest du Fragen haben, frag einfach!
__________________
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 10.02.2007, 19:36  
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

Zitat:
Zitat von dr.e.
Solltest du Fragen haben, frag einfach!
Ich hab leider nicht wirklich viel verstanden um ehrlich zu sein

Zitat:
- Erstelle eine Klasse, die du "Mapper" nennst und implementiere dort generisch, oder fallspezifisch alle Methoden, die du brauchst um Daten zu lesen.
Mit "Daten lesen" meinst du z.B. Objekte aus der Datenbank holen?
Also statt für jedes Objekt ein DAO zu erstellen, erstell ich eine Mapper-Klasse? Oder habe ich immernoch für jede Klasse ein DAO nur benutze ich die nicht mehr direkt sondern über die Mapper-Klasse?
(oder ist die Mapperklasse sowas wie Hibernate bei Java?)


Zitat:
- Implementiere eine "Manager", der den "Mapper" läd und sich von diesem die nötigen Daten geben lässt und entsprechend aufbereitet an deine "DocumentController" (z.B. anmelden.php) weitergibt.
Hier steig ich jetzt total aus.
Was macht der Manager genau? Ich weiß ja immer erst in der anmelden.php selbst welche Daten ich dort brauche? Was meinst du mit "aufbereitet"?

Zitat:
[...] an zentraler Stelle einbinden kannst und dich innerhalb der Funktions-Dateien nicht mehr um das Hnadling mit der DB o.ä. kümmern musst.
Das muss ich doch jetzt auch nicht - glaub ich Ich lade die Objekte über ein DAO und ich speichere sie wieder über ein DAO. Mit der DB hab ich in den Funktions-Dateien (also z.b. anmelden.php) eigentlich nichts zu tun.

Du siehst mir fehlt noch ein bißchen das grundlegende Verständnis...
Ich glaub ich muss das noch ein paarmal lesen und sacken lassen
__________________
Today you...Tomorrow me.
agrajag ist offline  
Alt 10.02.2007, 22:13  
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 Agrajag,

Zitat:
Ich hab leider nicht wirklich viel verstanden um ehrlich zu sein
Dann ist es umso besser, dass du nachfragst.

Zitat:
Mit "Daten lesen" meinst du z.B. Objekte aus der Datenbank holen?
Also statt für jedes Objekt ein DAO zu erstellen, erstell ich eine Mapper-Klasse? Oder habe ich immernoch für jede Klasse ein DAO nur benutze ich die nicht mehr direkt sondern über die Mapper-Klasse?
(oder ist die Mapperklasse sowas wie Hibernate bei Java?)
Das ist ja fast in's Schwarze. Es bedeutet folgendes:

- Du hast in deiner Applikation einige Domain-Objekte (z.B. Gästebuch, Gästebucheintrag, Kommentar, Liste, Listeneintrag).
- Es existiert ein zentraler Mapper, der alle diese Objekte kennt und Methoden besitzt um diese mit Daten aus der DB füllen kann.

Beispiel: In einem Gästebuch hast du i.d.R. 2 Domain-(=Daten)-Objekte, Gästebuch und Eintrag. Du kannst nun dem Mapper eine Methode "verpassen", die loadGuestbookByPageRange() heißt und die dir je nach Übergabeparametern ein Guestbook-Objekt mit einigen Entries zurückgibt.

Zitat:
Hier steig ich jetzt total aus.
Was macht der Manager genau? Ich weiß ja immer erst in der anmelden.php selbst welche Daten ich dort brauche? Was meinst du mit "aufbereitet"?
OK. ich erklär dir das mal mit Pseudocode. Zuerst möchte ich noch auf den "Manager" eingehen. Der Manager ist eine weitere Schicht innerhalb deiner Anwendung, der den Prozess kapselt. Hier kannst du beispielsweise dein Gästebuch-Objekt mit den Einträgen noch aufbereiten, sprich beispielsweise die Einträge durchiterieren und das Datumsformat korrigieren oder zum Gästebuch weitere Konfigurationen (aktivierte Smilies, et. al.) hinzufügen. Codemäßig sieht das wie folgt aus:

anmeldung.php

PHP-Code:

$Manager 
= new GuestbookManager();
$Guestbook $Manager->loadGuestbookByPageRange([..]);

$Entries $Guestbook->getEntries();

foreach(
$Entries as $Item){
   
// Hier wird die Ausgabe erledigt
}
?> 

Manager.php

PHP-Code:

class Manager
{

function 
loadGuestbookByPageRange([..]){

   
$Mapper = new Mapper();
   
$Guestbook $Mapper->loadGuestbook([..]);
   
$Entries $Guestbook->getEntries();

   foreach([..]){
      
$Entries->setDate(date_format([..],$Entries->getDate());
   }

   return 
$Guestbook;
}

}
?> 

Zitat:
Das muss ich doch jetzt auch nicht - glaub ich Ich lade die Objekte über ein DAO und ich speichere sie wieder über ein DAO. Mit der DB hab ich in den Funktions-Dateien (also z.b. anmelden.php) eigentlich nichts zu tun.
Das ist auch ok so. In der anmelden.php instanziierst du dir einfach den Manager und lädst Daten, oder übergibst ihm Daten zum Speichern (saveGuestbookItem()). Letzteres würde in der anmelden.php so aussehen:

PHP-Code:

$Entry 
= new Entry();
$Entry->setName($_GET['name']);
$Entry->setContent($_GET['content']);

$Manager = new Manager();
$Manager->saveGuestbookItem($Entry);
?> 

Zitat:
Du siehst mir fehlt noch ein bißchen das grundlegende Verständnis...
Ich glaub ich muss das noch ein paarmal lesen und sacken lassen
Klar war das viel auf einmal, aber du wirst sehen, in ein paar Wochen ist das im Blut.
__________________
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 11.02.2007, 13:58  
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

Vielen Dank erstmal für deine Mühe.
Ich werd' mir das mal anschauen und ein bißchen rumprobieren und dann kommt die nächste Welle an Fragen
__________________
Today you...Tomorrow me.
agrajag ist offline  
Alt 24.02.2007, 13:19  
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 Agrajag,

ich habe heute meine alte Page-Controller-Beispielseite wieder aufpoliert und die Doku upgedatet nachgezogen. Wenn du Lust hast das Beispiel anzusehen, kannst du dir unter

http://media.adventure-php-framework...l_webseite.zip

das Package runterladen. Einfach im DocumentRoot - oder einem Unterordner - entpacken und die index.php aufrufen.

Es vermittelt dir das oben erklärte an einem praktischen Beispiel. Solltest du Fragen haben, dann lass es mich wissen.
__________________
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!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Geändert von dr.e. (13.06.2009 um 17:06 Uhr).
dr.e. 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
Smarty + MySQL = immer falsche Ausgabe m0use` PHP Tipps 2006 44 21.11.2008 20:30
if abfragen in Templates rob1011 PHP Tipps 2006 13 03.08.2006 15:55
Smarty + Oop Problem Komandar PHP Tipps 2006 5 25.07.2006 14:36
Vererbung bei Templates Pain-maker PHP-Fortgeschrittene 9 28.03.2006 10:05
Smarty verschachtelt snatch-ic PHP Tipps 2006 16 28.02.2006 20:54
[Erledigt] Navigation auf Smarty umstellen?! PHP-Fortgeschrittene 3 10.01.2006 09:19
Smarty installiert und nun? Cyrus PHP Tipps 2005-2 5 28.10.2005 16:14
Smarty Error Simon9990 PHP Tipps 2005-2 8 07.07.2005 09:34
Smarty und X-Cart Profis gesucht Beitragsarchiv 1 21.05.2005 13:38
[Erledigt] includepathproblem pear blockiert smarty und umgekehrt PHP Tipps 2005 1 08.05.2005 18:46
Smarty? Die wesentlichen Vorteile? Off-Topic Diskussionen 7 20.09.2004 13:04
[Erledigt] Wieder mal Templates! PHP-Fortgeschrittene 1 10.09.2004 11:42
[Erledigt] Smarty - Schleifenmanagment in Templates PHP-Fortgeschrittene 5 27.08.2004 17:29
If Anweisung mit Smarty Templates! Wo ist der Fehler? PHP Tipps 2004 3 18.07.2004 22:10
Smarty Templates + Radio Buttons + Auswertung Transmitter PHP-Fortgeschrittene 0 05.07.2004 18:29

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
smarty gästebuch, php aufgabe, gästebuch mit smarty, smarty htmlentities, smarty templates aufgaben, smarty escape, templates aufgabe, smarty getdate, smarty user anmelde template, smarty ausgabe grundsätzlich escape, templates smarty objekte, smarty controler aufrufen, smarty beispiel, array in template deklarieren smarty, smarty central einbinden, array mit smarty füllen, smarty templates datenbank, gästebuch steig, smarty setcontent, smarty space füllen

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