Domanda

ho scoperto che l'uso di Smarty con PHP, a volte avrà bisogno di tempo per essere utilizzato per la

1) utilizzando la sintassi molto diverso da sé PHP
2) bisogno di controllare i piccoli casi, perché la documentazione non fornisce dettagli più fini, come ad esempio per "escape"

http://www.smarty.net/manual/en/ language.modifier.escape.php

non dice di fuga: "virgolette" è per i doppi apici o solo per i singoli apici così, quindi è necessario scrivere codice per testarlo. Anche per il caso di fuga: "javascript" - non può dire esattamente che cosa e come è sfuggito

.

3) per qualcosa di complicato, necessario scrivere funzioni di supporto o modificatori, quindi ha bisogno di una creazione di nuovi file e finire di farlo in PHP di nuovo.

A proposito, non usando Smarty fornire una buona velocità fino oltre l'uso da solo PHP? grazie.

È stato utile?

Soluzione

In primo luogo, PHP è un linguaggio di templating. Tenetelo a mente quando si parla di utilizzare un modello di sistema per le applicazioni web basate su PHP.

L'unico argomento 'reale' che io abbia mai sentito per utilizzando qualsiasi motore di template è che essi forniscono un linguaggio più semplice per la manipolazione del modello che può essere utile se si dispone di progettisti di modelli che non conoscono PHP e che si don' t fiducia per imparare ad usare PHP con giudizio.

Per quanto riguarda questi argomenti, direi che se i progettisti di modelli non sono competenti ad imparare abbastanza PHP per la progettazione del modello, probabilmente si dovrebbe prendere in considerazione la ricerca di nuovi designer del modello. Inoltre, lo stesso PHP offre una sintassi diversa per le istruzioni di controllo che si potrebbe utilizzare in un modello rispetto nel codice. Ad esempio:

<? foreach($array as $key => $val): ?>
    <?= $val ?>
<? endforeach; ?>

VS:

<?php
    foreach($array as $key => $val) {
        echo $val;
    }

?>

Personalmente, credo che i motori di template sono sorte in PHP perché:

  1. Ecco così che le altre lingue fanno
  2. programmatori PHP Meglio resi conto che avevano bisogno di un modo per far rispettare la separazione tra la presentazione e la logica applicativa e modelli erano un modo semplice per farlo.

La prima ragione è solo un pò sciocco. La seconda ragione può essere superata con un poco autocontrollo e persino un rudimentale comprensione della necessità di separare strati in un'applicazione. Il design pattern MVC è un modo di affrontare questo problema. Per quanto riguarda l'esercizio un po 'di autocontrollo, la mia regola è che solo i cicli necessari e se le dichiarazioni si abituano così come le funzioni che filtrano, la fuga, formattare l'output per lo schermo.

Dopo aver usato Smarty ampiamente, posso onestamente dire che sempre mi ha presentato con più ostacoli da superare di quanto abbia fatto soluzioni. Se non altro, il passaggio a modelli di PHP-based è quello che è in realtà diminuito i tempi di sviluppo per entrambi i modelli e codice.

Altri suggerimenti

Non mi piace templating motori. Io li trovo molto lossy e ad alta intensità di risorse per PHP.

Con MediaWiki, attorno alla versione 1.6.x abbiamo fatto marcia indietro usando Smarty per impostazione predefinita e basta usare template built-in di PHP, con un grande miglioramento in termini di prestazioni.

Ho trovato che la maggior parte di ciò che la gente vuole fare con un sistema di template (aggiungere link, cambiare i colori, rimuovere il testo o sezioni della pagina) sono migliori fatto con un semplice sistema di ganci di eventi.

StatusNet, la piattaforma di microblogging aperta, non fa alcun template di default. Abbiamo un plug-in per le persone che sono pazzi per i template.

Smarty è certamente uno dei migliori motori di modello là fuori. Nella mia esperienza se la gente farebbe bene a pensare i loro casi d'uso attraverso più a fondo prima di utilizzare qualsiasi motore di template sulla parte superiore del PHP a tutti.

In primo luogo, lo stesso PHP è perfetto per i modelli. Praticamente l'unica giustificazione per l'utilizzo di un altro motore di template è se si sta consentendo agli utenti non attendibili per creare o modificare i modelli, in quanto potrebbero eseguire tutti i tipi di cattiveria. Quindi, se il progetto dispone di modelli modificabili dall'utente, utilizzare Smarty. In caso contrario, bastone con PHP.

Se il problema è la separazione di codice e il layout, vi consiglio di guardare in attuazione di un modello di esecuzione in stile MVC leggero. O, per dirla più con condiscendenza, se si dispone di codice logica più profondo nel tuo modello, è probabilmente il momento di fare un po 'di refactoring.

Performance è un'altra considerazione. Sì, il rendering di un modello di Smarty viene fornito con un costo. Ma dopo il gioco è fatto, l'uscita dovrebbe essere memorizzato nella cache, che conduce a migliori tempi di esecuzione. Lo stesso vale per i modelli di PHP. PHP consente di implementare tutti i tipi di modelli di cache granulari attraverso l'uso dei suoi buffer di uscita. Ma attenzione di ottimizzazione prematura: fate che solo dopo sei codice completo e avere identificato quali sono i colli di bottiglia reali sono

Il costo maggiore quando si usa Smarty o qualsiasi altro motore si presenta sotto forma di tempo per gli sviluppatori. E 'un altro strato di complessità e, inevitabilmente, vi troverete in situazioni in cui è necessario trucco il motore a fare quello che si potrebbe avere compiuta nel puro PHP per tutto il tempo.

Mi piace motori di modello e penso che dovrebbero essere usati, ma nel caso particolare di Smarty, penso che sia perdita di tempo, perché non è un miglioramento significativo rispetto PHP come linguaggio di template:

  • La nuova sintassi si basa ancora intorno vecchio concetto di tag speciali inseriti in luoghi casuali nel documento.
  • Perché Smarty non capisce di HTML sintassi / struttura, non può non aiutare a creare validi / HTML ben formato. tag di Smarty violano la sintassi di HTML, quindi una volta che li aggiungere, altri strumenti standard non possono aiutare sia.
  • uscita di Smarty, proprio come in PHP, è insicuro (escape) per impostazione predefinita e deve ricordate di aggiungere |escape ovunque dove dati di output in HTML.

C'è un motore di template PHP particolare che mi sono innamorato con, che risolve tutti questi problemi: PHPTAL .

E 'ancora qualcosa di nuovo devi imparare, ed è un depenency per la vostra applicazione, ma penso che avere XSS e problemi di mal formedness risolto rende vale la pena.

PHPTAL proprio come Smarty viene compilata una volta per PHP e memorizzato nella cache, quindi le prestazioni è paragonabile a PHP crudo.

Pro

  • Nessun PHP nei file HTML (permette sia PHP e HTML identing)
  • Tubi {$ var | default: "Nessuno selezionato"} {$ var | urlencode}
  • foreachelse: {oggetto foreach = Linea = $ risultati} {$ row.name} {
    foreachelse} Nessun risultato {/ foreach}
  • siti web Themable / pagine (usando solo CSS ha limita)

Contro

  • Altra sintassi del linguaggio
  • Non sempre il codice ovvio { "Y-m-d" | strftime: $ timestamp} {$ array | @var_dump}
  • piccolo sovraccarico

Consiglio vivamente l'approccio "modello" (MVC), ma entrambi Smarty e PHP pianura sono all'altezza del compito.

Per quanto ne so Smarty è uno dei migliori motori di modello velocizzare saggio. Forse ci vuole un po 'per abituarsi ad esso. Ma se non si sta lavorando sul sistema da solo e la quantità di file html e lo stile è enorme che accelera lo sviluppo in modo significativo.

Mentre si lavora sul mio ultimo progetto il disegno era cambia un paio di volte, ma logiche era lo stesso. Direi che è il miglior esempio quando Smarty o qualsiasi altro motore di template aiuta molto.

Personalmente io uso Blitz per template. Sul sito l'autore afferma che è il motore di template più veloce e fornisce un grafico (orientato?) Sulle prestazioni tra i diversi sistemi di template per PHP. Non ho usato smarty me stesso, ma questo potrebbe darvi alcuni suggerimenti sulle sue prestazioni.

http://alexeyrybak.com/blitz/blitz_en.html

Utilizzo Smarty come motore di template, non sarà probabilmente come performante come non lo si utilizza, in quanto è un ulteriore livello di software, vale a dire, un linguaggio di template in cima a una, ehm, un altro linguaggio di templating. D'altra parte, se si utilizza la funzione di caching correttamente si potrebbe realizzare guadagni complessivi di prestazioni.

modelli Smarty sono pre-compilati prima di essere uscita al browser, che coinvolge la scrittura di file temporanei sul disco. Questo passaggio penalizza sicuramente le prestazioni, almeno un po '.

Se sono fiduciosi nella vostra capacità di continuare attuazione e presentazione separata, e non hanno alcun interesse reale per il caching lato server, si dovrebbe probabilmente solo puro uso di template php. Alcuni framework MVC, come Zend Framework hanno i loro sistemi di template PHP-like.

D'altra parte, Smarty è un modo decente per imporre una netta separazione della presentazione dalla realizzazione, in particolare quando non è chiaro da ciò che appartiene dove. Potrebbe aiutare la disciplina di imporre la separazione necessaria.

Detto questo, io uso Smarty nella maggior parte dei miei progetti di PHP, come mi ricorda Librerie di tag Java Server (JSTL), che sto molto, molto abituato, e affezionato.

Utilizzo di uno Smarty o non è più o meno una posizione filosofica.

Io lo uso, anche se io non uso molto la funzionalità. Utilizzando in questo modo, i modelli tendono ad essere essere molto semplice. Passare un array associativo con parametri, scorrere suoi componenti e inserire elementi richiesti nella pagina risultato. Ciò mantiene modelli pulito e (si spera) privo di logica di business.

Inoltre, estendendo Smarty è abbastanza semplice.

Per fare un esempio, ho aggiunto un parametro stili per il fetch () per avere una fetchUsingStyle (). Questo mi permette di passare da un layout di un sito abbastanza facilmente.

Inoltre, il mio fetchUsingStyle () cerca varie posizioni per un modello: prima cerca di trovare lo stile corrente. Se non viene trovato, si cerca di caricare il modello usando uno stile predefinito. Ultimo, si tenta di individuare un file fittizio statica pura, un segnaposto per qualcosa da attuare in seguito.

Prova ad utilizzare Smarty con pattern MVC come Codeigniter, è meglio di core di PHP

Perché usare un motore di template quando si può semplicemente utilizzare i file HTML e iniettare codice php dove serve? si può fare questo con Psttt! motore di template per PHP

il codice sorgente completo qui http://github.com/givanz/psttt

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top