Pourquoi utiliser le système templating en PHP?

Pourquoi devrais-je utiliser le système de templating en PHP?

le raisonnement derrière ma question Est: PHP lui-même est un système de templating riche en fonctionnalités, Pourquoi devrais-je installer un autre moteur de template?

les deux seuls pros que j'ai trouvés jusqu'à présent sont:

  1. Un peu plus propre syntaxe (parfois)
  2. moteur de modèle n'est généralement pas assez puissant pour mettre en œuvre la logique d'affaires, de sorte qu'il vous oblige à séparer les préoccupations. Templating avec PHP peut vous inciter à marcher autour des principes de templating et de commencer à écrire de nouveau la soupe de code.

... et les deux sont tout à fait négligeable par rapport aux inconvénients.

petit exemple:

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>

Je ne vois vraiment aucune différence.

56
demandé sur Josef Sábl 2009-01-12 19:37:12

24 réponses

Oui, comme vous l'avez dit, si vous ne vous forcez pas à utiliser un moteur de templating à L'intérieur de PHP ( le moteur de templating), il devient facile de glisser et d'arrêter de séparer les préoccupations.

cependant , les mêmes personnes qui ont des problèmes pour séparer les soucis finissent par générer du HTML et l'alimenter à smarty, ou exécuter du code PHP dans Smarty, donc Smarty ne résout pas votre problème de séparation des soucis.

voir aussi:

24
répondu Kent Fredric 2017-05-23 12:09:48

la principale raison pour laquelle les gens utilisent les systèmes de gabarits est de séparer la logique de la présentation. Il y a plusieurs avantages qui en découlent.

tout d'abord, vous pouvez remettre un modèle à un concepteur web qui peut déplacer les choses comme ils le souhaitent, sans avoir à se soucier de garder le flux du code. Ils n'ont pas besoin de comprendre PHP, juste pour savoir laisser les étiquettes spéciales tranquilles. Ils peuvent avoir à apprendre un peu de la simple sémantique pour quelques balises, mais c'est beaucoup plus simple que d'apprendre toute la langue.

de plus, en divisant la page en fichiers séparés, le programmeur et le concepteur peuvent travailler sur la même "page" à la fois, en vérifiant le contrôle source comme ils ont besoin, sans conflits. Les concepteurs peuvent tester leurs visuels de gabarit par rapport à une version stable du code tandis que le programmeur fait d'autres changements potentiellement cassants, par rapport à leur propre copie. Mais si ces deux personnes éditaient le même fichier et devaient fusionner en différents changements, vous pouvez rencontrer des problèmes.

Il applique également bien pratique, en gardant la logique des affaires loin de la logique de présentation. Si vous mélangez votre logique d'affaires avec la présentation, alors vous avez plus de difficulté à l'extraire si vous avez besoin de la présenter différemment plus tard. Différents modes de présentation dans les applications web sont de plus en plus populaires de nos jours: flux RSS/ATOM, réponses JSON ou AJAX, WML pour les appareils portables, etc. Avec un modèle système ces changements peuvent souvent être faits entièrement à l'aide d'un modèle et sans ou peu de changement à quoi que ce soit d'autre.

cependant, tout le monde n'aura pas besoin de ces avantages et ne les appréciera pas. L'avantage de PHP par rapport à Java/Python/Ruby/etc est que vous pouvez rapidement Hacker des pages web avec un peu de logique en elles, et c'est bien ainsi.

17
répondu Kylotan 2009-01-12 16:54:26

utiliser des gabarits Non-PHP avec l'excuse de séparer la logique est absurde. Si le développeur ne comprend pas ce qu'est la séparation logique d'entreprise et comment cela doit être fait, alors le problème doit être abordé de manière appropriée. Sinon, vous finissez avec HTML dans Business logic ou business logic dans templates -- aucun moteur de templating ne va vous sauver. Vous devez enseigner les bases au développeur.

et si le développeur fait comprenez que le système des Templiers n'est qu'une limitation. Il n'ajoute pas , aucune valeur au processus de développement, seulement l'apprentissage d'une nouvelle syntaxe, le maintien d'une autre bibliothèque à jour, et l'exécution plus lente. Alors que ce dernier peut être résolu avec la mise en cache et autres, cela ne fait que remédier à un problème qui, autrement, n'existerait pas. Ainsi, les systèmes de modélisation n'offrent aucune valeur, aucun avantage du tout.

il y a une exception, cependant, où je pense utiliser un non PHP système de modèles est raisonnable: lors de l'affichage logique que les programmeurs doivent avoir un accès limité à des modèles. Par exemple, si vous êtes un fournisseur pour un système d'hébergement de blog et que vous voulez permettre à vos utilisateurs de personnaliser et de coder leurs modèles, sans leur permettre d'exécuter du code arbitraire. Cet argument, cependant, ne pas s'applique aux cas où un concepteur est prêt à apprendre un peu de code pour aider à la programmation de L'UI. S'il peut apprendre Smarty, il peut sûrement apprendre le PHP.

12
répondu gasper_k 2009-01-13 13:32:00

il y a encore une bonne raison pour un système de gabarit à utiliser, cependant pas Smarty, mais PHPTAL . Les modèles PHPTAL sont des fichiers XML valides (et donc XHTML). Vous pouvez utiliser plus loin le contenu factice dans PHPTAL et ainsi obtenir le fichier XHTML valide avec l'apparence finale, qui peut être traité et testé avec des outils standard. Voici un petit exemple:

<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>

PHPTAL moteur de template pour insérer automatiquement toutes les valeurs des utilisateurs de tableau et de le remplacer nos valeurs factices. Néanmoins, la table est déjà valide XHTML qui peut être affiché dans un navigateur de votre choix.

9
répondu Vadim Ferderer 2012-02-18 10:36:01

pour moi, l'une des grandes caractéristiques des moteurs de gabarits est que la couche de cache est transparente pour vous. J'ai utilisé smarty il y a longtemps, et les trucs de cache rendent la vie plus facile. de plus, le design smarty vous permet d'utiliser votre propre fonction de cache. Dans mon cas je choisis si pour une certaine page devrait utiliser memcache ou le disque pour stocker la sortie de modèle.

dans l'autre main, si votre site a un gros trafic et vous ne savez pas comment gérer smarty et tuning bien ce n'importe quel modèle de moteur pourrait être un tueur de site. mais même sans utiliser smarty votre site peut mourir aussi.

flickr utilise actuellement smarty. ça ne devrait pas être si mal, n'est-ce pas?

6
répondu Gabriel Sosa 2009-01-19 23:32:12

PHP est à peu près un système de template. La clé est de vous forcer à séparer la logique de présentation sur votre propre. Utiliser Smarty ou quelque chose comme ça ne fait que rendre un peu plus difficile de mélanger la logique et la présentation. Si vous ne pouvez pas les séparer vous-même, l'utilisation d'un système de templating ne vous aidera pas. Tous qu'il va faire est de manger puissance de traitement supplémentaire.

La clé est de ne pas modifier les valeurs votre code de présentation. Pour ce faire, je pense que PHP lui-même est aussi efficace que Smarty si vous utilisez la syntaxe if/ endif:

<?php if($some_test): ?>
   <em>Some text!</em>
<?php endif; ?>
5
répondu Wickethewok 2009-01-12 17:53:02

la plupart du temps, je pense à éviter toute logique d'arrière-plan "dangereux" à appliquer dans les modèles. Puisque la plupart du temps les gabarits sont remis aux designers, nous voulons seulement leur donner un ensemble fermé de choses qu'ils peuvent faire.

4
répondu Luca Matteis 2009-01-12 16:44:53

j'aime la possibilité d'afficher trivialement n'importe quel modèle à partir de n'importe quel fichier PHP (et inclure des fragments de modèles à l'intérieur de l'autre, pour les éléments communs comme les barres nav). Par exemple, supposons que vous ayez une page qui affiche normalement des informations si vous êtes connecté ou une erreur si vous ne l'êtes pas. Avec PHP, vous écririez quelque chose comme:

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

dans Smarty, il pourrait être quelque chose comme ceci (pardonnez ma probablement mauvaise syntaxe, il a été un moment):

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

si vous étiez vraiment intelligent, vous pourriez même afficher le modèle de page de connexion au lieu du modèle d'erreur, éventuellement avec un message expliquant pourquoi l'Utilisateur a fini là. Et si vous avez suivi la technique telle que je l'ai écrite et que vous avez décidé de passer à l'affichage de la boîte de connexion, ce n'est qu'un simple changement de ligne! Pour moi, il ne s'agit pas seulement de maintenir la séparation de la vue et de la logique, mais de la capacité à réutiliser les éléments communs de la vue à de nombreux endroits.

3
répondu rmeador 2009-01-12 16:56:16

je suis content d'utiliser un framework MVC comme un déclencheur de code. Je trouve que dans les' vues ' j'ai tendance à coller au code php qui se rapporte uniquement à la façon dont les valeurs sont affichées. J'ai une bibliothèque de fonctions de formatage que je peux utiliser dans les vues à cet effet. Une des prémisses de code igniter est d'éviter un langage de templating en raison de la façon dont il peut vous restreindre et le ralentissement encouru.

je trouve que c'est mieux pour les designers d'apprendre un peu de PHP, afin qu'ils puissent atteindre ce ils doivent le faire par exemple. alternant les noms de classe. Cela les rendra également plus utiles à long terme et ce n'est pas un saut énorme d'une syntaxe à l'autre.

2
répondu roborourke 2009-01-12 17:06:45

tu as oublié htmlspecialchars() deux fois. C'est pour ça qu'il faut un système de temples.

Smarty est pauvre. Ne jugez pas les systèmes de templage sur cette base.

2
répondu Kornel 2009-01-18 19:27:15

Votre analyse est raisonnable. Je suppose:

  • les concepteurs de gabarits et les programmeurs d'arrière-plan ne sont pas nécessairement les mêmes, ce qui favorise la séparation.
  • il vous protège de vous-même un peu en ce que vous ne pouvez pas vraiment faire" trop " PHP dans vos gabarits.
  • il peut être plus facile d'optimiser/précompiler des modèles dans certains scénarios? (C'est de la spéculation)

personnellement, je pense ils sont plus embêtants qu'ils n'en valent la peine. En particulier, ils ne fonctionnent pas si vous voulez la main les modèles aux "concepteurs" depuis les outils WYSIWYG ne savent pas quoi faire avec eux.

1
répondu Draemon 2009-01-12 16:48:26

un avantage moteur de modèle que je n'ai pas vu était la possibilité d'éléments html dynamiques - quelque chose comme asp.net contrôles. Par exemple, avec le modèle Flexy HTML de PEAR, vous pouvez avoir des éléments de forme dynamiques qui maintiennent automatiquement l'état. Un élément html select régulier peut être rempli et avoir l'élément sélectionné dans le code derrière sans boucles ou conditionnels dans le modèle.

1
répondu rick 2009-01-12 17:39:52

je pense que la syntaxe plus claire est une grande victoire. Bien qu'il puisse ressembler à seulement quelques caractères, mais quand vous le faites tous les jours, puis chaque personnage commence à compter.

et {$myvar|escape} est un peu plus court que <?php echo htmlspecialchars($myvar); ?> . (En gardant à l'esprit que la syntaxe <?=$foo?> n'est disponible que lorsqu'elle est spécialement activée dans PHP conf.)

1
répondu Rene Saarsoo 2009-01-12 17:51:55

Je ne pense pas que vous devriez utiliser un moteur de modèle. Au lieu de cela, vous devriez utiliser quelque chose comme Zend_View qui vous encourage à faire la logique séparée de la présentation, mais vous permet de construire votre couche de présentation en PHP.

1
répondu Zoredache 2009-01-12 18:29:31
  • vous voulez utiliser un fichier avec du code PHP comme modèle? Fin.
  • vous voulez utiliser vos variables dans ce modèle? Fin.

n'oubliez pas de séparer la logique et le résultat final (présentation). C'est mieux accompli avec un template de cadre. Mais tu n'as pas à apprendre quelque chose comme Smarty.

  • si vous utilisez Zend_View ou similaire, vous pouvez utiliser du code PHP.

beaucoup de gens ici ont la réponse correcte. Smarty n'est pas templating en PHP. Loin d'elle. Smarty est là surtout pour ceux qui doivent utiliser des designers (c'est-à-dire non programmeurs) pour éditer et configurer l'affichage des pages. Si tous ceux qui vont changer la disposition de vos pages peuvent programmer, vous pouvez aller avec un système de templating plus orienté vers le code PHP. Mais vous devriez vraiment avoir toutes vos données de sortie prêtes et les envoyer au modèle. Si vous laissez chaque page chercher, traiter et afficher le contenu, vous aurez à refactoriser plus tôt, plus tard.

1
répondu OIS 2009-01-12 20:30:06

quand vous écrivez un code pour quelqu'un d'autre. Par exemple, j'ai été impliqué dans la création d'un cadre d'application web rigide qui devrait être personnalisable pour nos clients. Une demande importante était que le client pouvait engager un concepteur pour modifier les gabarits sans avoir à programmer. Plus important encore, il pourrait ne pas être autorisé pour changer le code.

Smarty permet par exemple de mettre en œuvre des restrictions assez rigides sur ce que le modèle peut faire. Fondamentalement, notre application a désactivé toutes les constructions de code sauf les plus basiques et un ensemble sélectionné de fonctions modificatrices. Nous avions donc deux objectifs qui ont été bien servis par un moteur de modèle: simplicité et sécurité .

1
répondu Konrad Rudolph 2009-01-12 20:34:44

Et n'oublions pas l'avenir. Les sites Web sont vieux presque à la minute où ils sont publiés. Vous aurez besoin de mettre à jour le regard et la sensation à un certain point. Si vous maintenez la séparation souvent fois un concepteur seul peut compléter un tout nouveau site Web avec la même programmation À l'arrière. Cela permet une refonte plus rapide et moins coûteuse, vous permettant d'impliquer le programmeur seulement si de nouvelles fonctionnalités sont nécessaires.

1
répondu UberDragon 2009-01-19 23:44:22

certains pourraient soutenir que Smarty fait ce que PHP peut déjà faire: séparer la présentation de la logique d'affaires. Le langage de programmation PHP est idéal pour le développement de code, mais lorsqu'il est mélangé avec HTML, la syntaxe des instructions PHP peut être un gâchis à gérer. Smarty compense cela en isolant PHP de la présentation avec une syntaxe basée sur des balises beaucoup plus simple. Les étiquettes révèlent le contenu de l'application, ce qui permet une séparation nette du code PHP (application). Aucune connaissance de PHP n'est nécessaire pour gérer Smarty templates.

l'importance de cet espacement est situationnelle. Il est généralement plus important pour les concepteurs de sites web que pour les développeurs PHP. Par conséquent, Smarty est généralement un bon ajustement lorsque les rôles des développeurs et des concepteurs sont séparés. Il n'y a pas de bonne ou de mauvaise réponse: chaque équipe de développement a ses propres préférences pour gérer le code et les modèles. En plus d'une syntaxe propre basée sur les étiquettes, Smarty offre également une grande variété d'outils pour gérer la présentation: la mise en cache de données granulaires, l'héritage de gabarits et le sandboxing fonctionnel pour n'en nommer que quelques-uns. Les exigences opérationnelles et le code PHP avec lequel Smarty est utilisé joueront un grand rôle pour déterminer si Smarty convient bien.

1
répondu Mystery 2013-11-27 09:10:26

je parierais que si un langage de template PHP était assez coercitif pour vous forcer à l'utiliser, vous ne l'utiliseriez pas du tout. La capacité de "sauter" et de faire les choses à votre façon lorsque vous avez des problèmes est l'un des attraits de PHP.

Je ne dis pas que c'est une bonne chose, ni que le code sera maintenable, juste que dans les considérations initiales, Je ne choisirais pas un langage de modèle qui m'a complètement bloqué.

sinon, je suis d'accord que les Templiers les systèmes vous aident à diviser le travail entre le codage et le design, et peut-être laisser les designers concevoir et le codage pour nous.

0
répondu Adriano Varoli Piazza 2009-01-12 17:12:53

personnellement, j'utilise toujours des moteurs de Templiers en php, python ou autre.

la première raison évidente déjà mentionnée par d'autres:

cela vous oblige à ne pas utiliser de logique d'affaires dans vos modèles.

bien sûr, la discipline ferait l'affaire, quand on l'a.

mais c'est juste un petit aspect de la raison pour laquelle vous utiliseriez un moteur de templage . La plupart d'entre eux sont plus qu'un simple moteur et peuvent être considérés comme des cadres de référence, que cela vous plaise ou non.

par exemple, Smarty a aussi des fonctionnalités avancées de mise en cache comme la mise en cache partielle. Des choses vraiment utiles, des choses que vous auriez à faire tout seul lorsque vous utilisez juste php comme langage de templage.

et s'il vous plaît ne pas oublier toutes ces fonctions d'aide vraiment utiles juste une recherche rapide dans les docs. La plupart d'entre eux aussi fournir un moyen facile d'ajouter vos propres fonctions et/ou boîte à outils.

Donc oui, c'est une question de choix. Lorsque vous avez besoin de modèles vraiment simples, pensez à montrer une certaine discipline pour garder votre logique hors de vos modèles. Mais lorsque vous vous attendez à ce que votre application se développe, vous aurez éventuellement besoin des fonctionnalités de template framework. Et d'ici là, j'espère que vous ne réinventerez pas la roue en la codant entièrement.

et le dernier mais non le moindre, pour moi il est une fonctionnalité disponible dans certains templates cadres.

L'Héritage De Template

Je l'ai connu de Django et je l'utilise maintenant dans le dernier Smarty 3 . Les gars de la Symphony framework ont aussi Twig , que vous pouvez considérer comme un port avec la syntaxe Django.

c'est un peu étrange au début, mais extrêmement puissant. Vous construisez votre squelette et définissez divers blocs. Vous pouvez étendre ce squelette et remplir (remplacer) les blocs avec votre contenu.

Pour moi, c'est un gardien!

0
répondu Sander Versluys 2010-07-15 22:38:04

système de gestion de modèle, nous pouvons gérer les fichiers de modèle séparément. le temps d'exécution du système sera plus rapide que le projet PHP normal. donc ici, les fichiers PHP et les fichiers template sont maintenus séparément.

une fois les fichiers lancés, le code sera sauvegardé template_c. donc ce n'est pas compiler plusieurs fois.

0
répondu RaJeSh 2013-01-04 05:36:32

j'ai plusieurs fois utilisé tinybutstrong , qui a une très soigné et d'une syntaxe simple. Pas de boucles ou de pseudo-code dans le modèle html.

de leur page d'accueil:

Tinybutteng est une bibliothèque qui vous permet de créer dynamiquement Les pages XML/HTML et tout autre fichier basé sur la source de texte. C'est un Moteur de Template pour le langage PHP. Il vous permet d'afficher facilement les informations de votre base de données, mais aussi à harmoniser sérieusement et simplifiez votre programmation PHP.

Tinybutongent est orienté vers HTML mais pas spécialisé pour Html. Ce signifie qu'il peut fonctionner aussi bien avec des fichiers texte, XML, RSS, RTF, WML, Excel (XML. ,).. Le plug-in OpenTBS vous permet de fusionner OpenOffice et Ms Les documents Office.

0
répondu kle_py 2013-04-06 20:01:15

développeurs qui vont faire usage de concepts OOPs lourdement,comme JAVA/ printemps /Oracle PL-SQL les gens, ils disent que le langage PHP lui-même est utilisé pour la présentation/vue/logique d'affichage dans les projets au niveau de l'entreprise. Dans ces grands projets le backend est Oracle, La base de données est récupérée en utilisant pl-slq/java et la présentation est php.Le meilleur exemple est facebook. http://en.wikipedia.org/wiki/Facebook facebook utilise php pour la présentation, java / C++ comme interface d'administration.

la seule raison pour laquelle php est utilisé comme présentation parce qu'il fonctionne étroitement avec HTML,mais java/c++ est plus basé sur OOPs et ne peut pas être adapté directement avec HTML. Dites-moi un CMS (joomla / drupal / wordpress) ou un framework(zend/symfony/Yii) qui utilise Smarty? Alors pourquoi smarty est nécessaire?

0
répondu Srikanth Ganta 2014-03-17 16:47:17

j'aime utiliser des gabarits pour quelques raisons:

1) Il nettoie la lisibilité du code PHP. Mes fichiers PHP deviennent gonflés et ingrats quand il y a des instructions d'impression("") avec des morceaux de HTML partout. Aussi, les problèmes surgissent comme Comment passer des variables dans le texte HTML? Vous utilisez des étiquettes partout? Utilisez-vous print("") et échappez-vous à vos guillemets HTML et concaténez-vous vos variables? Utilisez-vous print("") et utilisez-vous des guillemets simples en HTML, allant à l'encontre le standard, et insérez vos variables directement?

2) Il nettoie la présentation du code HTML. Il peut devenir difficile de garder votre HTML généré regarder bon si elle est coupée et découpée en morceaux à travers plusieurs fichiers. Par exemple, votre indentation pouvez obtenir.

3) il vous permet de créer plusieurs modèles, puis un utilisateur connecté peut sélectionner le modèle / peau qu'il veut afficher lors de la navigation sur votre site web, et vous pouvez également rapidement et changez sans effort le modèle par défaut en quelque chose d'autre si vous êtes si incliné.

dans l'Ensemble, c'est juste une meilleure façon de tout organiser. Il y a un petit compromis dans le fait de devoir apprendre et taper des commandes de la classe template, ouvrir plusieurs fichiers, etc. Mais à mon avis, je pense que cela vaut la peine car le code de lisibilité et d'organisation.

-1
répondu AdmiralAdama 2015-08-12 00:48:34