wie kann man Smarty besser mit PHP verwenden?

7

Ich habe festgestellt, dass mit Smarty mit PHP manchmal zusätzliche Zeit für

verwendet werden muss

1) mit ganz anderer Syntax als PHP selbst
2) müssen kleine Fälle überprüfen, weil die Dokumentation keine feineren Details gibt, wie für "escape"

Ссылка

es heißt nicht escape: "quotes" ist nur für doppelte Anführungszeichen oder auch für einfache Anführungszeichen, also müssen Sie Code schreiben, um es zu testen. Auch für den Fall der Flucht: "Javascript" - kann nicht genau sagen, was und wie es entkommen ist.

3) für etwas kompliziertes, müssen Hilfsfunktionen oder Modifikatoren schreiben, so dass es eine Erstellung neuer Dateien benötigt und am Ende wieder in PHP getan wird.

Übrigens, bietet die Verwendung von Smarty eine gute Beschleunigung gegenüber PHP allein? Danke.

    
太極者無極而生 17.05.2009, 16:17
quelle

11 Antworten

21

Erstens ist PHP eine Vorlagensprache. Denken Sie daran, wenn Sie über ein Vorlagensystem für Ihre PHP-basierten Webanwendungen sprechen.

Das einzige "echte" Argument, das ich jemals für die Verwendung von Templating-Engines gehört habe, ist, dass sie eine einfachere Sprache für die Template-Manipulation bieten, was sehr praktisch ist, wenn Sie Template-Designer haben, die PHP nicht kennen. t vertrauen, um PHP sinnvoll zu lernen.

In Bezug auf diese Argumente würde ich argumentieren, dass, wenn Ihre Template-Designer nicht in der Lage sind, genug PHP für das Template-Design zu lernen, Sie wahrscheinlich neue Template-Designer finden sollten. Darüber hinaus bietet PHP selbst eine andere Syntax für Steueranweisungen, die Sie in einer Vorlage oder im Code verwenden können. Zum Beispiel:

%Vor%

VS:

%Vor%

Ich persönlich glaube, dass Templating-Engines in PHP entstanden sind, weil:

  1. So machen es andere Sprachen
  2. Bessere PHP-Programmierer haben erkannt, dass sie einen Weg brauchen, um Trennung zwischen Präsentations- und Anwendungslogik zu erzwingen, und Vorlagen waren eine einfache Möglichkeit, dies zu tun.

Der erste Grund ist nur ein bisschen albern. Der zweite Grund kann mit ein wenig Selbstkontrolle und sogar einem rudimentären Verständnis der Notwendigkeit der Trennung von Schichten in einer Anwendung überwunden werden. Das MVC-Entwurfsmuster ist eine Möglichkeit, dieses Problem anzugehen. Was die Selbstkontrolle anbelangt, ist meine Regel, dass nur notwendige Schleifen und if-Anweisungen verwendet werden, sowie Funktionen, die die Ausgabe für den Bildschirm filtern, escape, formatieren.

Nachdem ich Smarty ausgiebig benutzt habe, kann ich ehrlich sagen, dass es mir immer mehr Hürden geboten hat, um darüber hinweg zu kommen als Lösungen. Der Wechsel zu PHP-basierten Vorlagen hat tatsächlich die Entwicklungszeit für Vorlagen und Code verringert.

    
Noah Goodrich 17.05.2009, 16:51
quelle
4

Ich mag keine Template-Engine. Ich finde sie sehr verlustbehaftet und ressourcenintensiv für PHP.

Mit MediaWiki, um Version 1.6.x, haben wir Smarty standardmäßig deaktiviert und verwenden einfach das PHP Template-Template mit einer großen Verbesserung der Performance.

Ich habe herausgefunden, dass das meiste, was Leute mit einem Vorlagensystem machen wollen (Links hinzufügen, Farben ändern, Text entfernen oder Abschnitte der Seite), besser mit einem einfachen System von Ereignis-Hooks erledigt wird.

Laconica, die offene Microblogging-Plattform, tut standardmäßig keine Vorlagen. Wir haben ein Plugin für Leute, die verrückt nach Templating sind.

    
Evan P. 17.05.2009 16:54
quelle
3

Smarty ist sicherlich eine der besten Template-Engines überhaupt. Meiner Erfahrung nach sind die Leute jedoch gut beraten, ihre Anwendungsfälle gründlicher zu untersuchen, bevor sie überhaupt eine Templating-Engine auf PHP verwenden.

Zunächst ist PHP selbst perfekt für Vorlagen. Die einzige Rechtfertigung für die Verwendung einer anderen Templating-Engine besteht darin, dass Sie nicht vertrauenswürdigen Benutzern das Erstellen oder Bearbeiten von Vorlagen erlauben, da sie alle Arten von Fehlern ausführen können. Wenn Ihr Projekt benutzerbearbeitbare Vorlagen enthält, verwenden Sie Smarty. Wenn nicht, bleibe bei PHP.

Wenn Ihr Problem die Trennung von Code und Layout ist, sollten Sie ein schlankes MVC-Ausführungsmodell implementieren. Oder, um es etwas herablassender zu sagen: Wenn Sie einen tieferen Logikcode in Ihrer Vorlage haben, ist es wahrscheinlich an der Zeit, etwas zu refaktorisieren.

Leistung ist eine andere Überlegung. Ja, das Rendern einer Smarty-Vorlage ist mit Kosten verbunden. Aber nachdem es fertig ist, sollte die Ausgabe zwischengespeichert werden, was zu verbesserten Ausführungszeiten führt. Gleiches gilt für PHP-Vorlagen. Mit PHP können Sie alle Arten von granularen Caching-Modellen durch Verwendung seiner Ausgabepuffer implementieren. Aber hüte dich vor verfrühter Optimierung: Mach das erst, nachdem du den Code fertiggestellt hast und identifiziere, was die eigentlichen Engpässe sind!

Die größten Kosten bei der Verwendung von Smarty oder einer anderen Engine entstehen in Form von Entwicklerzeit. Es ist eine weitere Ebene der Komplexität und Sie werden sich unweigerlich in Situationen finden, in denen Sie die Engine dazu bringen müssen, das zu tun, was Sie in reinem PHP die ganze Zeit erreicht haben könnten.

    
Udo 17.05.2009 16:45
quelle
2

Ich mag Template-Engines und denke, dass sie verwendet werden sollten, aber in dem speziellen Fall von Smarty denke ich, dass es Zeitverschwendung ist, weil es keine wesentliche Verbesserung gegenüber PHP als Templating-Sprache ist:

  • Die neue Syntax basiert immer noch auf dem alten Konzept spezieller Tags, die an zufälligen Stellen im Dokument eingefügt werden.
  • Da Smarty die Syntax / Struktur von HTML nicht versteht, kann es Ihnen nicht helfen, gültiges / wohlgeformtes HTML zu erstellen. Smartys Tags verletzen die HTML-Syntax. Sobald Sie sie hinzugefügt haben, können Ihnen andere Standard-Tools nicht helfen.
  • Smartys Ausgabe ist wie in PHP standardmäßig unsicher (unescaped) und Sie müssen daran erinnern, |escape überall dort hinzuzufügen, wo Sie Daten in HTML ausgeben.

Es gibt eine bestimmte PHP-Vorlagen-Engine, in die ich mich verliebt habe, die all diese Probleme behebt: PHPTAL .

Es ist immer noch etwas Neues, das Sie lernen müssen, und es ist eine Abhängigkeit für Ihre Anwendung, aber ich denke, XSS und schlecht geformte Probleme gelöst zu haben, macht es die Mühe wert.

PHPTAL genau wie Smarty einmal in PHP kompiliert und zwischengespeichert wird, so ist die Performance vergleichbar mit Roh-PHP.

    
Kornel 17.05.2009 16:41
quelle
2

Vorteile

  • Kein PHP in Ihren HTML-Dateien (erlaubt sowohl die PHP- als auch HTML-Identifizierung)
  • Pipes {$ var | default: "Keine ausgewählt"} {$ var | urlencode}
  • Foreachelse: {foreach item = Zeile von = $ results} {$ row.name} & lt; br & gt; {foreachelse} Keine Ergebnisse {/ foreach}
  • bearbeitbare Webseiten / Seiten (nur mit CSS begrenzt)

Nachteile

  • Andere Sprachsyntax
  • Nicht immer offensichtlicher Code {"Y-m-d" | strftime: $ timestamp} {$ array | @var_dump}
  • Leichter Aufwand

Ich kann den "template" -Ansatz (mVc) sehr empfehlen, aber sowohl Smarty als auch reines PHP sind für die Aufgabe bereit.

    
Bob Fanger 18.05.2009 18:48
quelle
1

Soweit ich weiß, ist Smarty eine der besten Template-Motoren in Sachen Geschwindigkeit. Vielleicht dauert es eine Weile, um sich daran zu gewöhnen. Aber wenn Sie nicht gerade an dem System arbeiten und die Menge an HTML- und Style-Dateien enorm ist, beschleunigt dies die Entwicklung erheblich.

Bei der Arbeit an meinem letzten Projekt wurde das Design ein paar Mal geändert, aber die Logik war die gleiche. Ich denke, das ist das beste Beispiel, wenn Smarty oder eine andere Template Engine viel hilft.

    
Dasha Salo 17.05.2009 16:26
quelle
1

Persönlich benutze ich Blitz für Templating. Auf der Website behauptet der Autor, es sei die schnellste Templating-Engine und biete ein (voreingenommenes?) Diagramm über die Leistung zwischen verschiedenen Templating-Systemen für PHP. Ich habe Smarty selbst nicht verwendet, aber das könnte Ihnen Hinweise auf seine Leistung geben.

Ссылка

    
runfalk 17.05.2009 16:37
quelle
1

Die Verwendung von Smarty als Templating-Engine wird wahrscheinlich nicht so performant sein, wie es nicht verwendet wird, da es sich um eine zusätzliche Softwareschicht handelt, d. h. eine Templating-Sprache über einer, Erm, einer anderen Templating-Sprache. Auf der anderen Seite, wenn Sie die Caching-Funktion richtig verwenden, können Sie insgesamt Leistungsgewinne realisieren.

Smarty-Vorlagen werden vor der Ausgabe an den Browser vorkompiliert. Dazu werden temporäre Dateien auf die Festplatte geschrieben. Dieser Schritt bestraft sicherlich die Leistung, zumindest ein wenig.

Wenn Sie sicher sind, dass Sie Implementierung und Präsentation getrennt halten können und kein echtes Interesse am serverseitigen Caching haben, sollten Sie wahrscheinlich nur reines PHP-Templating verwenden. Einige MVC-Frameworks wie das Zend Framework haben ihre eigenen PHP-ähnlichen Template-Systeme.

Auf der anderen Seite ist Smarty ein anständiger Weg, um eine saubere Trennung von Präsentation und Implementierung zu erzwingen, besonders wenn unklar ist, was wo hingehört. Es könnte helfen, Sie zu disziplinieren, um diese notwendige Trennung durchzusetzen.

Das heißt, ich benutze Smarty in den meisten meiner PHP-Projekte, da es mich an Java-Server-Tag-Bibliotheken (JSTL) erinnert, an die ich sehr, sehr gewöhnt bin.

    
karim79 17.05.2009 16:20
quelle
0

Die Verwendung eines Smarty oder nicht ist mehr oder weniger eine philosophische Position.

Ich benutze es, obwohl ich nicht viel Funktionalität verwende. Auf diese Weise neigen Vorlagen dazu, sehr einfach zu sein. Übergeben Sie ein assoziatives Array mit Parametern, durchlaufen Sie seine Komponenten und fügen Sie die erforderlichen Elemente in die Ergebnisseite ein. Dies hält Vorlagen sauber und (hoffentlich) frei von Geschäftslogik.

Darüber hinaus ist die Erweiterung von Smarty ziemlich einfach.

Als Beispiel habe ich fetch () einen styles-Parameter hinzugefügt, um einen fetchUsingStyle () zu erhalten. Dadurch kann ich sehr einfach zwischen verschiedenen Layouts einer Site wechseln.

Außerdem sucht mein fetchUsingStyle () nach verschiedenen Orten nach einer Vorlage: Zuerst wird versucht, den aktuellen Stil zu finden. Wenn nicht gefunden, wird versucht, die Vorlage mit einem Standardstil zu laden. Zuletzt versucht es eine reine statische Dummy-Datei zu finden, einen Platzhalter für etwas, das später implementiert werden soll.

    
SteAp 16.02.2011 00:36
quelle
0

Versuchen Sie, Smarty mit MVC-Muster wie Codeigniter zu verwenden, es ist besser als Kern-PHP

    
senthilbp 09.10.2012 12:27
quelle
-1

Warum sollten Sie eine Template-Engine verwenden, wenn Sie einfach Ihre HTML-Dateien verwenden und den PHP-Code dort einspeisen können, wo Sie ihn brauchen? das kannst du mit Psttt machen! Templating Engine für PHP

vollständiger Quellcode hier Ссылка

    
codeassembly 19.09.2010 19:11
quelle