Perché dovrei usare il sistema di template in PHP?

Perché dovrei usare il sistema di template in PHP?

Il ragionamento alla base della mia domanda è: PHP stesso è un sistema di template ricco di funzionalità, perché dovrei installare un altro motore di template?

Gli unici due pro che ho trovato finora sono:

  1. Sintassi un po 'più pulita (a volte)
  2. Il motore di template non è in genere abbastanza potente da implementare la logica di business, quindi ti costringe a separare le preoccupazioni. I templates con PHP possono attirare l'attenzione sui principi dei templates e iniziare nuovamente a scrivere il codice zuppa.

… ed entrambi sono abbastanza trascurabili rispetto ai contro.

Piccolo esempio:

PHP

<h1><?=$title?></h1> <ul> <? foreach ($items as $item) {?> <li><?=$item?></li> <? } ?> </ul> 

Smarty

 <h1>{$title}</h1> <ul> {foreach item=item from=$items} <li>{$item}</li> {/foreach} </ul> 

Davvero non vedo alcuna differenza.

Sì, come hai detto, se non ti imponi di usare un motore di template all'interno di PHP (il motore dei template) diventa facile scivolare e smettere di separare le preoccupazioni.

Tuttavia , le stesse persone che hanno problemi a separare i problemi finiscono per generare HTML e alimentarlo a smarty, o eseguire codice PHP in Smarty, così Smarty sta difficilmente risolvendo il problema della separazione delle preoccupazioni.

Guarda anche:

  • PHP come linguaggio template o qualche altro script di template
  • Qual è il modo migliore per inserire HTML tramite PHP

Il motivo principale per cui le persone usano i sisthemes di template è quello di separare la logica dalla presentazione. Ci sono molti benefici che ne derivano.

In primo luogo, puoi consegnare un model a un web designer che può spostare le cose come meglio crede, senza che debbano preoccuparsi di mantenere il stream del codice. Non hanno bisogno di capire PHP, solo per sapere di lasciare i tag speciali da soli. Potrebbero wherer imparare alcune semantiche semplici per alcuni tag, ma è molto più semplice che imparare l'intera lingua.

Inoltre, suddividendo la pagina in file separati, sia il programmatore che il designer possono lavorare contemporaneamente sulla stessa "pagina", effettuando il check-in al controllo del codice sorgente quando necessario, senza conflitti. I progettisti possono testare i loro templates visivi rispetto a una versione stabile del codice mentre il programmatore sta eseguendo altre modifiche potenzialmente pericolose contro la propria copia. Ma se queste persone stavano entrambi modificando lo stesso file e wherevano fondersi in diverse modifiche, è ansible riscontrare dei problemi.

Inoltre, applica una buona pratica di programmazione nel tenere la logica aziendale lontana dalla logica della presentazione. Se metti la tua logica aziendale in combinazione con la presentazione, allora hai un momento più difficile per estrarlo se devi presentarlo in un secondo momento. Oggigiorno sono sempre più popolari le modalità di presentazione nelle app Web: feed RSS / ATOM, risposte JSON o AJAX, WML per dispositivi palmari, ecc. Con un sistema di template questi possono spesso essere fatti interamente con un model e con o senza modifiche a nulla altro.

Tuttavia, non tutti avranno bisogno o apprezzeranno questi benefici. Il vantaggio di PHP rispetto a Java / Python / Ruby / etc è che puoi rapidamente incidere le pagine web con qualche logica in esse, e va tutto bene.

Usare templates non-PHP con la scusa di separare la logica è una sciocchezza. Se lo sviluppatore non capisce cosa sia la separazione logica della business-view e come dovrebbe essere fatto, allora il problema deve essere affrontato in modo appropriato. Altrimenti finirai con l'HTML nella logica di business o nella logica di business nei template – nessun motore di template ti salverà. Devi insegnare allo sviluppatore le basi.

E se lo sviluppatore lo capisce, il sistema di template è solo una limitazione. Non aggiunge alcun valore al process di sviluppo, solo un sovraccarico di apprendimento di una nuova syntax, mantenendo aggiornata un'altra libreria e un'esecuzione più lenta. Mentre il secondo può essere risolto con la memorizzazione nella cache e quant'altro, questo risolve solo un problema che altrimenti non esisterebbe. Quindi, i sisthemes di template non offrono alcun valore, nessun vantaggio.

C'è un'exception, tuttavia, in cui ritengo che l'uso di un sistema di template non PHP sia ragionevole: quando i programmatori di view logic devono avere accesso limitato ai template. Ad esempio se sei un fornitore di un sistema di hosting di blog e vuoi consentire ai tuoi utenti di personalizzare e codificare i loro templates, senza consentire loro di eseguire codice arbitrario. Questo argomento, tuttavia, non si applica ai casi in cui un progettista è disposto ad apprendere un piccolo codice per facilitare la programmazione dell'interface utente. Se può imparare Smarty, può sicuramente imparare PHP.

C'è ancora un buon motivo per utilizzare un sistema di template, tuttavia non Smarty, ma PHPTAL . I templates PHPTAL sono file XML (e quindi XHTML) validi. È ansible utilizzare il contenuto fittizio più lontano in PHPTAL e get così il file XHTML valido con l'aspetto finale, che può essere elaborato e testato con strumenti standard. Ecco un piccolo esempio:

 <table> <thead> <tr> <th>First Name</th> <th>Last Name</th> <th>Age</th> </tr> </thead> <tbody> <tr tal:repeat="users user"> <td tal:content="user/first_name">Max</td> <td tal:content="user/last_name">Mustermann</td> <td tal:content="user/age">29</td> </tr> </tbody> </table> 

Il motore di model di PHPTAL inserirà automaticamente tutti i valori dalla matrix di utenti e sostituirà i nostri valori fittizi. Tuttavia, la tabella ha già un XHTML valido che può essere visualizzato in un browser di tua scelta.

per me, una delle grandi caratteristiche dei motori di template è che lo strato di cache è trasparente per te. Ho usato la smarty molto tempo fa, e la cache rende la vita più facile. anche il design smarty ti consente di utilizzare la tua function cache. Nel mio caso scelgo se per qualche pagina dovrei usare memcache o il disco per archiviare l'output del template.

d'altra parte se il tuo sito ha un grande traffico e non sai come gestire smarty e sintonizzarlo bene questo motore di template potrebbe essere un killer del sito. ma anche senza usare smarty il tuo sito può morire anche.

flickr sta attualmente utilizzando smarty. non dovrebbe essere così male, no?

PHP è praticamente un sistema di template. La chiave è forzare te stesso a separare la logica dalla presentazione per conto tuo. L'uso di Smarty o qualcosa del genere rende solo leggermente più scomodo combinare logica e presentazione. Se non riesci a separarti da solo, usare un sistema di template non ti aiuterà. Tutto ciò che dovrà fare è consumare ulteriore potenza di elaborazione.

La chiave è di non modificare alcun valore nel codice di presentazione. Per fare ciò, penso che PHP stesso sia efficace quanto Smarty se usi la syntax if / endif:

 <?php if($some_test): ?> <em>Some text!</em> <?php endif; ?> 

Principalmente penso di evitare che una logica backend "non sicura" venga applicata nei template. Poiché la maggior parte delle volte i templates vengono consegnati ai designer, vogliamo solo offrire loro un insieme di cose che possono fare.

Mi piace la possibilità di visualizzare banalmente qualsiasi model da qualsiasi file PHP (e includere frammenti di templates l'uno dentro l'altro, per elementi comuni come barre di navigazione). Ad esempio, supponiamo che tu abbia una pagina che normalmente printing alcune informazioni se hai effettuato l'accesso o un errore se non lo sei. Con PHP, dovresti scrivere qualcosa come:

 if (loggedIn) { // print lots of HTML here } else { // print error message } 

In Smarty, potrebbe essere qualcosa di simile (perdona la mia syntax probabilmente sbagliata, è passato un po 'di tempo):

 if (loggedIn) { $smarty->bind("info", someObject); $smarty->display("info.template"); } else $smarty->display("error.template"); 

Se sei stato davvero intelligente, potresti anche visualizzare il model di pagina di accesso anziché il model di errore, opzionalmente con un messaggio che spiega perché l'utente è finito lì. E se sei andato con la tecnica mentre lo scrivevo e poi hai deciso di voler passare alla visualizzazione della casella di login, è solo un cambio di row! Per me, non si tratta solo di mantenere la separazione tra vista e logica, ma della capacità di riutilizzare elementi comuni della vista da molti punti.

Sono felice di usare un framework MVC come l'accenditore del codice. Trovo che nelle "view" tendo ad attenermi al codice php che si riferisce solo a come vengono visualizzati i valori. Ho una libreria di funzioni di formattazione che posso usare nelle viste per quell'effetto. Una delle premesse del codice di accensione è quella di evitare un linguaggio di template a causa del modo in cui può limitare te e il rallentamento sostenuto.

Trovo che sia meglio per i progettisti imparare un po 'di PHP, in modo che possano get ciò di cui hanno bisogno, ad esempio. nomi di class alternati. Li renderà anche più utili a lungo termine e non è un enorme salto da una syntax all'altra.

Hai dimenticato htmlspecialchars() due volte. Ecco perché hai bisogno di un sistema di template.

Smarty è povero. Non giudicare i sisthemes di template basati su questo.

La tua analisi è ragionevole. Credo:

  • I progettisti di templates e i programmatori di back-end potrebbero non essere uno nella stessa, quindi promuove la separazione.
  • Ti protegge un po 'da te in quanto non puoi davvero fare "troppo" PHP nei tuoi templates.
  • Potrebbe essere più semplice ottimizzare / precompilare i templates in alcuni scenari? (Questa è una speculazione)

Personalmente, penso che siano più fastidi di quanto valgano. In particolare, non funzionano se si desidera consegnare i templates ai "progettisti" poiché gli strumenti WYSIWYG non sanno cosa fare con essi.

Un vantaggio del motore di template che non ho visto era la possibilità di elementi html dinamici, qualcosa come i controlli di asp.net. Ad esempio, con HTML Template Flexy di PEAR puoi avere elementi di forma dinamici che mantengono automaticamente lo stato. Un elemento di selezione html normale può essere popolato e avere l'elemento selezionato impostato nel codice dietro senza loop o condizionali nel model.

Penso che la syntax più pulita sia una grande vittoria. Sebbene possa sembrare solo pochi personaggi, ma quando lo fai each giorno, each personaggio inizia a contare.

E {$myvar|escape} è IMHO un po 'più corto di <?php echo htmlspecialchars($myvar); ?> <?php echo htmlspecialchars($myvar); ?> . (Tieni presente che la syntax <?=$foo?> È disponibile solo quando è abilitato specialmente in conf. PHP)

Non penso che dovresti usare un motore di template. Invece dovresti usare qualcosa come Zend_View che ti incoraggia a fare una logica separata dalla presentazione, ma ti permette di build il tuo livello di presentazione in PHP.

  • Vuoi usare un file con codice PHP come model? Belle.
  • Vuoi usare le tue variables in detto template? Belle.

Basta ricordare di separare la logica e l'output finale (presentazione). Questo è meglio realizzato con un framework di template. Ma non devi imparare qualcosa come Smarty.

  • Se usi Zend_View o simili puoi usare il codice PHP fino in fondo.

Molte persone qui hanno la risposta corretta. Smarty non è un model in PHP. Lontano da esso. Smarty è principalmente per coloro che devono utilizzare i designer (ad esempio i non programmatori) per modificare e impostare la visualizzazione delle pagine. Se tutti quelli che cambieranno il layout delle tue pagine possono essere programmati, puoi utilizzare un sistema di template più orientato al codice PHP. Ma dovresti davvero avere tutti i tuoi dati di output pronti e inviarli al model. Se lasci che each pagina recuperi, elabori e visualizzi il contenuto, dovrai rifattenerlo prima e dopo.

Quando scrivi codice per qualcun altro. Ad esempio, una volta sono stato coinvolto nella creazione di un framework di applicazioni web rigido che dovrebbe essere personalizzabile per i nostri clienti. Una richiesta importnte era che il cliente potesse assumere un designer per modificare i templates senza wherer essere in grado di programmare. Ancora più importnte, potrebbe non essere autorizzato a modificare il codice.

Smarty, ad esempio, consente di applicare restrizioni piuttosto rigide su ciò che il model può fare. Fondamentalmente, la nostra applicazione ha disabilitato tutti tranne i costrutti di codice di base e un set selezionato di funzioni modificatore. Quindi avevamo due obiettivi che erano ben serviti da un motore di template: semplicità e sicurezza .

E non dimentichiamo il futuro. I siti Web sono vecchi quasi il minuto in cui vengono pubblicati. È necessario aggiornare l'aspetto grafico a un certo punto. Se si mantiene spesso la separazione, un progettista da solo può completare un integer nuovo sito Web con la stessa programmazione sul back-end. Ciò consente una riprogettazione più rapida ed economica, consentendo di coinvolgere il programmatore solo se sono richieste nuove funzionalità.

Alcuni potrebbero sostenere che Smarty fa ciò che PHP può fare già: separare la presentazione dalla logica di business. Il linguaggio di programmazione PHP è ottimo per lo sviluppo del codice ma, se combinato con HTML, la syntax delle istruzioni PHP può essere un disastro da gestire. Smarty compensa ciò isolando PHP dalla presentazione con una syntax basata su tag molto più semplice. I tag rivelano il contenuto dell'applicazione, imponendo una netta separazione dal codice PHP (applicazione). Non è richiesta alcuna conoscenza di PHP per gestire i templates Smarty.

L'importnza di questa separazione è situazionale. Di solito è più importnte per i web designer che per gli sviluppatori PHP. Pertanto, Smarty è comunemente una buona idea quando i ruoli di sviluppatori e designer sono separati. Non c'è una risposta giusta o sbagliata: each team di sviluppo ha le proprie preferenze per la gestione di codice e templates. Oltre a una syntax pulita basata su tag, Smarty offre anche una vasta gamma di strumenti per la gestione della presentazione: granularizzazione della cache dei dati, ereditarietà dei templates e sandboxing funzionale per citarne alcuni. I requisiti aziendali e il codice PHP con cui Smarty viene utilizzato svolgeranno un ruolo importnte nel determinare se Smarty è una buona soluzione.

Scommetterei che se un linguaggio template PHP fosse così coercitivo da costringerti a usarlo, non lo userai affatto. La capacità di "saltare fuori" e fare le cose a modo tuo quando sei nei guai è uno degli aspetti positivi di PHP.

Non dico che sia una buona cosa, né che il codice sarà mantenibile, solo che nelle considerazioni iniziali, non sceglierei un linguaggio template che mi ha bloccato completamente.

Altrimenti, sono d'accordo sul fatto che i sisthemes di template ti aiutano a dividere il lavoro tra la codifica e il design, e forse a lasciar disegnare i designer e la codifica a noi.

Io personalmente uso sempre i motori di template in php, python o altro.

La prima ovvia ragione già menzionata da altri:

Ti costringe a non utilizzare alcuna logica di business nei tuoi templates.

Sì certo, la disciplina andrebbe bene, quando ce l'hai.

Ma questo è solo un piccolo aspetto del perché dovresti usare un motore di template . Molti di questi sono più di un semplice motore e potrebbero essere considerati come templates di strutture, che piaccia o less.

Ad esempio, Smarty ha anche funzioni avanzate di caching come il caching parziale. Cose davvero utili, cose che avresti da fare tutto da solo quando utilizzi solo PHP come linguaggio dei template.

E per favore non dimenticare tutte quelle funzioni di aiuto davvero utili, basta una rapida ricerca nei documenti. Molti di questi forniscono anche un modo semplice per colbind le proprie funzioni e / o toolkit.

Quindi sì, è una questione di scelta. Quando hai bisogno di un template davvero semplice, prova a mostrare un po 'di disciplina e tieni fuori la logica dai tuoi templates. Ma quando ti aspetti che la tua applicazione cresca, alla fine avrai bisogno delle funzionalità del template template. E a quel punto, si spera che non si reinventhi la ruota codificandola per integer.

E, ultimo ma non less importnte, per me c'è una caratteristica killer disponibile in alcuni framework di templating.

Ereditarietà dei templates

Sono venuto a saperlo da Django e ora lo sto usando nell'ultima Smarty 3 . I ragazzi del framework Symphony hanno anche Twig , che puoi considerare una port con la syntax di Django.

All'inizio sembra un po 'strano, ma è estremamente potente. Costruisci il tuo scheletro e definisci vari blocchi. È ansible estendere tale scheletro e inserire (escludere) i blocchi con il contenuto.

Per me è un custode!

sistema di gestione dei templates, possiamo gestire separatamente i file model. il tempo di esecuzione del sistema sarà più veloce del normale progetto PHP. quindi qui file PHP e file model vengono mantenuti separatamente.

una volta eseguito il file verrà salvato il codice template_c. quindi non è compilato molte volte.

Ho usato diverse volte tinybutstrong , che ha una syntax piuttosto semplice e ordinata. Nessun loop o pseudocodice nel template html.

Dalla loro homepage:

TinyButStrong è una libreria che ti consente di creare dynamicmente pagine XML / HTML e qualsiasi altro file basato sulla sorgente del text. È un motore di template per il linguaggio PHP. Ti permette di visualizzare facilmente le informazioni dal tuo database, ma anche di armonizzare seriamente e semplificare la tua programmazione PHP.

TinyButStrong è orientato all'HTML ma non è specializzato in Html. Ciò significa che può funzionare anche con file di text, XML, RSS, RTF, WML, Excel (xml), … Il plug-in OpenTBS consente di unire documenti OpenOffice e Ms Office.

Gli sviluppatori che utilizzeranno pesantemente i concetti di OOP, come le persone JAVA / Spring / Oracle PL-SQL, affermano che il linguaggio PHP è utilizzato per la presentazione / visualizzazione / visualizzazione logica nei progetti di livello Enterprise. In questi progetti BIG il back-end è Oracle, il database viene recuperato usando pl-slq / java e la presentazione è php. L'esempio migliore è Facebook. http://en.wikipedia.org/wiki/Facebook facebook utilizza php per la presentazione, java / c ++ come interface di backend.

L'unico motivo per cui PHP è usato come presentazione perché funziona a stretto contatto con HTML, ma java / c ++ è più basato su OOP e non può essere adattato direttamente con HTML. Dimmi un CMS (joomla / drupal / wordpress) o framework (zend / symfony / Yii) che fa uso di Smarty? Quindi PERCHE 'la smarty è necessaria?

Mi piace usare i templates per un paio di motivi:

1) Pulisce la leggibilità del codice PHP. I miei file PHP diventano gonfiati e ingrati quando ci sono dichiarazioni di printing ("") con blocchi di HTML ovunque. Inoltre, i problemi emergono come si fanno a passare le variables nel text HTML? Usi i tag ovunque? Usi print ("") e sfuggi alle tue citazioni HTML e concateni le tue variables? Usi print ("") e usi virgolette singole in HTML, andando contro lo standard, e inserisci le tue variables direttamente?

2) Pulisce la presentazione del codice HTML. Può diventare difficile mantenere un buon aspetto del codice HTML generato se viene tagliato e violato a pezzi su più file. Ad esempio, il tuo indenting può andare via.

3) Consente di creare più templates, quindi un utente che ha effettuato l'accesso può select quale model / skin desidera visualizzare durante la navigazione nel proprio sito Web e può anche cambiare rapidamente e facilmente il model predefinito in qualcos'altro se si è così inclinato.

Nel complesso, è solo un modo migliore di organizzare tutto. C'è un po 'di compromesso nel wherer imparare e digitare comandi di class template, aprire più file, ecc. Ma secondo me penso che ne valga la pena perché la leggibilità e l'organizzazione del codice aumentano.