Pourquoi devrais-je utiliser le système de template en PHP?
Pourquoi devrais-je utiliser le système de template en PHP?
Le raisonnement derrière ma question est: PHP lui-même est riche en fonctionnalités, système de template, pourquoi devrais-je installer un autre moteur de template?
Les deux seuls pros que j'ai trouvé pour l'instant:
- Un peu plus propre syntaxe (parfois)
- Moteur de Template n'est généralement pas assez puissant pour mettre en œuvre une logique d'entreprise de sorte qu'il vous oblige à séparer les préoccupations. De template en PHP peut vous attirer de marcher autour de la création de modèles de principes et de commencer à écrire le code de la soupe de nouveau.
... 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 pas de différence du tout.
- Merci pour tous les commentaires que vous avez faits. Il m'a aidé à le tri dans mes pensées. Maintenant, je suis avec Zend Framework et le recommande même pour tout le monde. Maintenant, je vois Smarty et l'aime comme l'étape de la beaucoup plus sophistiqué, productif, stimulant et amusant mondiale de l'élaboration d'un cadre. Pas plus mysql_queries et include_onces 🙂
- Pour une chose, vous utilisez php balises courtes, qui, je suis d'accord fait de belles choses, mais vous aurez mis au ban de la communauté PHP pour elle. Comparer
<?php echo $foo ?>
à{$foo}
pour une comparaison équitable, et puis smarty clairement victoires pour des raisons de lisibilité. - Pourquoi les balises courtes mauvais?
- vous obtiendrez mis au ban de la communauté PHP pour elle - tout d'Abord, je doute fortement sur ce compte (beaucoup de célèbres développeurs de défendre les balises courtes). Deuxièmement, [ ... ] par le [effrayant académique] communauté PHP? N'est-ce pas nous avons un tas de plaisir-la facilité de terre-aimant les pieds nus des enfants jouant dans un bac à sable?:) Avertissement: j'ai passé de 6 à 8 ans creuser dans PHP ignore les véritables belle et puissante langages de programmation et maintenant je suis en 32 et le regrette vraiment! Violer PEP8 - c'est là que vous aurez mis à l'écart et il serait vraiment d'importance. PS. J'ose supposer PHP réels de but au début était le système de template. Non?
- Comme @Kornel a noté ici, il pourrait y avoir d'autres raisons d'utiliser moteur de template que plus propre syntaxe. Latte par exemple, a très robuste automatique s'échapper, ce qui serait presque impossible de les mettre correctement en main.
Vous devez vous connecter pour publier un commentaire.
Oui, comme vous l'avez dit, si vous ne vous forcez pas à utiliser un moteur de template à l'intérieur de PHP ( le moteur de template ), il devient facile de glisser et de cesser de séparer les préoccupations.
Cependant, les mêmes personnes qui ont des problèmes de séparer les préoccupations fin de la génération de code HTML et de le nourrir à smarty, ou l'exécution de code PHP Smarty, de sorte que Smarty est pas la résolution de votre souci de séparation problème.
Voir aussi:
La principale raison les gens utilisent des systèmes de modèle est de séparer la logique de présentation. Il y a plusieurs avantages qui en découlent.
Tout d'abord, vous pouvez remettre un modèle à un web designer qui peut déplacer les choses comme ils l'entendent, sans avoir à vous soucier de garder le déroulement du code. Ils n'ont pas besoin de comprendre le PHP, juste pour savoir laisser les balises spéciales seul. Ils peuvent avoir à apprendre un peu de la simple sémantique pour quelques balises, mais c'est beaucoup plus simple que de l'apprentissage de toute langue.
Aussi, en divisant la page dans des fichiers séparés, programmeur et designer peut travailler sur la même "page" à la fois, en vérifiant au contrôle de code source comme ils en ont besoin, sans conflits. Les concepteurs peuvent tester leur modèle visuels à l'encontre d'une version stable du code, tandis que le programmeur est de faire d'autres, potentiellement dernières modifications, à l'encontre de leur propre copie. Mais si ces gens étaient à la fois l'édition le même fichier, et devait fusionner dans 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 mettez votre logique métier mélangé avec la présentation, puis vous avez un moment difficile de l'extraire si vous avez besoin de le présenter différemment plus tard. Les différents modes de présentation dans les applications web sont de plus en plus populaires ces jours-ci: les fils RSS/ATOM, JSON ou les réponses AJAX, WML pour les appareils de poche, etc. Avec un système de template ceux-ci peuvent souvent être entièrement effectuée avec un modèle et pas ou peu de changement à tout autre chose.
Pas tout le monde à besoin ou apprécier toutefois, ces avantages. PHP avantage sur Java/Python/Ruby/etc, c'est que vous pouvez rapidement pirater des pages web avec un peu de logique, et c'est bien bon.
À l'aide de non-templates PHP avec l'excuse de séparer la logique est absurde. Si le développeur ne pas comprendre ce que l'entreprise-vue de la logique de séparation et comment cela doit être fait, alors le problème doit être réglé de façon appropriée. Sinon vous vous retrouvez avec HTML dans une logique d'entreprise ou de la logique métier dans les modèles-pas de moteur de template va vous sauver. Vous devez enseigner le développeur de la base.
Et si le développeur ne à comprendre que, dans le système de template est uniquement une limitation. Il n'ajoute pas toute valeur pour le processus de développement, seulement les frais généraux de l'apprentissage d'une nouvelle syntaxe, en gardant une autre bibliothèque jusqu'à ce jour, et plus lent à l'exécution. Alors que ce dernier peut être résolu avec la mise en cache et autres joyeusetés, ce recours à un problème qui n'existe pas. Ainsi, la création de modèles de systèmes n'offrent aucune valeur, aucun avantage.
Il y a une exception, cependant, lorsque je pense à l'aide d'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 blog-système d'hébergement et vous souhaitez permettre à vos utilisateurs de personnaliser et le code de leurs modèles, sans leur permettre d'exécuter du code arbitraire. Cet argument, toutefois, ne pas s'appliquent aux cas où un designer est prêt à apprendre un peu de code pour aider à la programmation de l'INTERFACE utilisateur. Si il peut apprendre Smarty, il peut sûrement apprendre le PHP.
Il y a toujours une bonne raison pour un système de template à utiliser, toutefois pas Smarty, mais PHPTAL. PHPTAL sont des modèles XML valide (et donc XHTML) des fichiers. Vous pouvez plus utiliser mannequin contenu dans PHPTAL et ainsi d'obtenir valide XHTML fichier avec l'apparition finale, qui peut être traité et testé avec des outils standard. Voici un petit exemple:
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à XHTML valide qui peut être affichée dans un navigateur de votre choix.
pour moi, l'une des grandes caractéristiques des modèles de moteurs, c'est que le cache de la couche de transparent pour vous. J'ai été en utilisant smarty longtemps, et le cache des trucs rendre la vie plus facile. aussi le smarty design vous permettent d'utiliser votre propre fonctionnement de la mémoire cache.
Dans mon cas, je choisis si pour certains, la page doit utiliser memcache ou disque pour stocker le modèle de sortie.
dans l'autre main, si votre site a un gros trafic et vous ne savez pas comment gérer smarty et tuning bien ce modèle de moteur pourrait être un site de tueur. mais même pas en utilisant smarty votre site peut mourir aussi.
flickr est actuellement à l'aide de smarty. sa ne devrait pas être mauvais de soo, n'est-ce pas?
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. En utilisant Smarty ou quelque chose comme ça fait qu'il est un peu plus gênant mélange de logique et de présentation. Si vous ne pouvez pas faire vous-même de les séparer sur votre propre, en utilisant un système de template ne va pas aider. Tous qu'il va faire est de manger puissance de traitement supplémentaire.
La clé est de ne pas modifier les valeurs de votre code de présentation. Pour ce faire, je pense que PHP lui-même est tout aussi efficace que Smarty si vous utilisez le if/endif syntaxe:
Je pense que pour éviter tout "dangereux" backend de la logique appliquée dans les modèles.
Car la plupart du temps, les modèles sont remis à des designers, nous ne voulons leur donner un ensemble fermé de choses qu'ils peuvent faire.
J'aime la capacité à trivialement afficher n'importe quel modèle à partir de tout fichier PHP (et inclure des fragments de modèles à l'intérieur les uns des autres, pour les éléments communs, comme des barres de navigation). Par exemple, supposez que vous avez une page qui normalement imprime certaines informations si vous êtes connecté ou une erreur si vous ne l'êtes pas. Avec PHP, vous devez écrire quelque chose comme:
Dans Smarty, il pourrait être quelque chose comme ceci (pardonnez mon probablement tort de syntaxe, ça fait un moment):
Si vous étiez vraiment intelligent, vous pouvez même afficher la page de connexion modèle, à la place de l'erreur de modèle, éventuellement avec un message expliquant pourquoi l'utilisateur finit là. Et si vous êtes allé avec la technique, comme je l'ai écrit et puis avez décidé de passer à l'affichage de la boîte de connexion, c'est une seule ligne de changement de! Pour moi, ce n'est pas seulement au sujet de garder la séparation de vue et la logique, mais sur la possibilité de réutiliser des éléments communs de la vue à partir de nombreux endroits.
Je suis heureux à l'aide d'un framework MVC comme le code de l'allumeur. Je trouve que dans les "vues", j'ai tendance à coller de code php qui se rapporte uniquement à la façon dont les valeurs sont affichées. J'ai une bibliothèque de fonctions de mise en forme que je peux utiliser dans les vues à cet effet. L'une des prémisses de code d'allumage est à éviter un langage de templating en raison de la façon dont il peut vous limiter et ralentir engagés.
Je trouve que le mieux pour les créateurs d'apprendre le PHP, afin qu'ils peuvent obtenir ce qu'ils doivent faire, par exemple. alternant les noms de classe. Il permettra également de les rendre plus utile dans le long terme et ce n'est pas un saut énorme à partir d'une syntaxe à l'autre.
Vous avez oublié
htmlspecialchars()
deux fois. C'est pourquoi vous avez besoin de système de template.Smarty est pauvre. Ne juge pas les gabarits des systèmes basés sur que.
Votre analyse est raisonnable. Je suppose que:
Personnellement, je pense qu'ils sont plus de tracas que ce qu'ils valent. En particulier, ils ne fonctionnent pas si vous voulez à la main
les modèles de "designers" depuis le WYSIWYG outils ne sais pas quoi faire avec eux.
Un moteur de template avantage que je n'ai pas vu la possibilité de la dynamique des éléments html - quelque chose comme asp.net les contrôles. Par exemple, avec de la POIRE du Modèle HTML Flexy vous pouvez avoir de formulaire dynamique des éléments qui maintiennent automatiquement de l'état. Un html standard pour sélectionner l'élément peut être renseigné et avoir l'élément sélectionné définie dans le code-behind, sans boucles ou des instructions conditionnelles dans le modèle.
Je pense que plus propre syntaxe est tout à fait 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 à mon humble avis un peu plus courte que<?php echo htmlspecialchars($myvar); ?>
. (En gardant à l'esprit que<?=$foo?>
syntaxe est disponible uniquement lorsqu'il est spécialement activé dans PHP conf.)Je ne pense pas que vous devriez utiliser un moteur de template. Au lieu de cela, vous devriez utiliser quelque chose comme Zend_View qui vous encourage à faire de séparer la logique de la présentation, mais vous permet de construire votre couche de présentation en PHP.
Rappelez-vous juste de séparer la logique et la sortie finale (présentation). C'est mieux accompli avec un template de cadre. Mais vous n'avez pas apprendre quelque chose comme Smarty.
Beaucoup de gens ici ont la bonne réponse. Smarty n'est pas de template en PHP. Loin d'elle. Smarty est là surtout pour ceux qui ont à utiliser des concepteurs (c'est à dire les non-programmeurs) à modifier et configurer l'affichage des pages. Si tout le monde qui va changer la mise en page de vos pages peut programme, vous pouvez aller avec un plus code PHP orienté système de template. Mais vous devriez vraiment avoir toutes vos données de sortie de prêt et de l'envoyer au modèle. Si vous laissez chaque page d'extraire, de traiter et d'afficher le contenu, vous aurez à refactoriser plus tôt, plus tard.
Lorsque vous écrivez du code pour quelqu'un d'autre. Par exemple, une fois j'ai été impliqué dans la création d'un rigide cadre d'application de web qui devrait être personnalisables pour nos clients. Une importante demande a été que le client puisse embaucher un concepteur de modifier les templates sans avoir à être capable de programme. Plus important encore, il pourrait ne pas être autorisé de modifier le code.
Smarty par exemple permet de mettre en œuvre assez rigide des restrictions sur ce que le modèle peut faire. Fondamentalement, notre application désactivé tous, mais la plupart des constructions de code de base et un ensemble de fonctions de modificateur. Ainsi, nous avions deux objectifs qui ont été bien servi par un moteur de template: simplicité et de sécurité.
Et n'oublions pas l'avenir. Les sites web sont vieux de près de la minute où ils sont publiés. Vous AUREZ besoin de mettre à jour l'apparence et la sensation à un certain point. Si vous maintenez la séparation souvent un designer seul peut compléter un nouveau site web avec la même programmation sur l'extrémité arrière. Cela permet une plus rapide et moins cher de refontes, vous permettant de faire participer le programmeur si de nouvelles fonctionnalités sont requises.
Certains pourraient faire valoir que Smarty n'est que PHP peut le faire déjà: séparer la présentation de la logique métier. Le PHP langage de programmation est idéal pour le développement du code, mais lorsque mélangé avec de l'HTML, la syntaxe des instructions PHP peut être un bordel à gérer. Smarty fait, l'isolation de PHP à partir de la présentation avec un beaucoup plus simple à base de balises la syntaxe. Les balises de révéler le contenu de l'application, l'application d'une séparation nette à partir de PHP (application) de code. Pas de PHP connaissance est nécessaire pour gérer les templates Smarty.
L'importance de cette séparation est de la situation. Il est généralement plus important pour les concepteurs web que c'est pour les développeurs PHP. Par conséquent, Smarty est généralement un bon ajustement lorsque les rôles de développeurs et de designers 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 la gestion du code et des modèles. Mis à part un nettoyage à base de balises la syntaxe, Smarty offre également une grande variété d'outils pour gérer la présentation: granulés mise en cache des données, de l'héritage de modèle et fonctionnelle "bac à sable" pour n'en nommer que quelques-unes. Les exigences d'affaires et le code PHP Smarty est utilisé avec la volonté de jouer un grand rôle dans la détermination de si Smarty est un bon ajustement.
J'avais parier que si un template PHP langage était si coercitives pour vous forcer à l'utiliser, vous ne pouvez pas l'utiliser du tout. La possibilité de "sauter" et de faire les choses à votre façon, lorsque dans l'ennui est l'un des attractifs de PHP.
Je ne dis pas que c'est une bonne chose, ni que le code sera facile à gérer, c'est juste que dans les considérations initiales, je ne voudrais pas choisir un modèle de langage qui m'a bloqué complètement.
Sinon, je suis d'accord que la création de modèles de systèmes vous aider à diviser le travail entre le codage et le design, et éventuellement laisser concepteurs de conception et le codage pour nous.
Personnellement, j'ai toujours utiliser des moteurs de template en php, python ou autre.
La première raison, évidente, déjà mentionné par d'autres:
Ouais, bien sûr, de la discipline ferait l'affaire, quand vous l'avez.
Mais c'est juste un tout petit aspect de pourquoi vous devez utiliser un moteur de template. La plupart d'entre eux sont plus que juste un moteur et qui pourrait être considéré création de modèles de cadres, si vous l'aimez ou pas.
Par exemple, Smarty a également avancé la mise en cache des fonctionnalités comme la mise en cache partielle. Vraiment utile, des choses que vous auriez todo tous par vous-même lors de l'utilisation juste de php comme langage de templating.
Et merci de ne pas oublier tous ceux qui sont vraiment utiles fonctions d'assistance juste une recherche rapide à l'écart dans les docs. La plupart d'entre eux fournissent également un moyen facile de plugin vos propres fonctions et/ou boîte à outils.
Donc oui, c'est une question de choix. En cas de besoin pour vraiment simple création de modèles, pensez à montrer une certaine discipline garder votre logique de vos modèles. Mais quand vous vous attendez à ce que votre demande de grandir, vous allez finir par avoir besoin de modèle de cadre de ses caractéristiques. Et d'ici là, vous nous l'espérons ne pas réinventer la roue par le codage de tout yourslef.
Et dernier mais pas moins, pour moi, il est une fonctionnalité disponible dans certains templates cadres.
Je suis venu pour savoir à partir de Django et je suis maintenant à l'aide de la dernière Smarty 3. Les gars de la Symphonie cadre ont également Twig, que vous pouvez envisager un port avec le Django de syntaxe.
C'est un peu étrange au premier abord, mais il est extrêmement puissant. Vous construisez votre squelette et de définir des blocs différents. Vous pouvez étendre ce squelette et remplir (remplacer) les blocs avec votre contenu.
Pour moi, c'est un gardien!
modèle de système de gestion, nous pouvons gérer les fichiers de modèle séparément. système temps d'exécution sera plus rapide que la normale projet PHP. voici donc les fichiers PHP et les fichiers de modèle sont maintenus séparément.
une fois d'exécuter les fichiers, le code sera enregistré template_c. donc ce n'est pas de la compilation de nombreuses fois.
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.
À partir de leur page d'accueil:
Développeurs qui utiliseront Oups concepts fortement,comme JAVA/Printemps/Oracle PL-SQL gens,ils disent que PHP le langage lui-même est utilisé pour la présentation/affichage/affichage de la logique de l'Entreprise au niveau des projets.
Dans ces GRANDS projets, le backend est Oracle,la base de données est récupérée à l'aide de 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 php est utilisé comme présentation, car il travaille en étroite collaboration avec le HTML,mais java/c++ est plus Oups base et ne rentrent pas directement avec du code HTML.
Dites-moi un CMS(joomla/drupal/wordpress) ou framework(zend/symfony/Yii) ce qui rend l'utilisation de Smarty? Alors POURQUOI smarty est-elle nécessaire?
J'aime utiliser des modèles pour un couple de raisons:
1) Il nettoie la lisibilité du code PHP. Mes fichiers PHP devenir lourd et maladroit quand il y a print (""), des relevés avec des morceaux de HTML partout. En outre, des questions surgissent comme comment passer des variables dans le code HTML du texte? Utilisez-vous des tags partout? Pensez-vous utiliser print("") et d'échapper à votre HTML devis et concaténer tes variables? Pensez-vous utiliser print("") et utilisez des guillemets simples en HTML, allant à l'encontre de la norme, et insérer vos variables directement?
2) Il nettoie la présentation du code HTML. Il peut devenir difficile de garder votre code HTML généré en regardant bien si elle est coupée et le piratage de morceaux dans plusieurs fichiers. Par exemple, votre indentation peut obtenir de façon off.
3) Il vous permet de créer plusieurs modèles, et ensuite, un utilisateur peut sélectionner le modèle de la peau, il veut d'affichage lors de la navigation sur votre site web, et vous pouvez rapidement et facilement modifier le modèle par défaut d'autre chose, si vous êtes si incliné.
Dans l'ensemble, c'est juste une meilleure façon de tout organiser. Il y a un peu de compromis dans le fait d'avoir à apprendre et le type de classe de modèle de commandes, d'ouvrir plusieurs fichiers, etc. Mais à mon avis, je pense que cela vaut la peine car le code de lisibilité et d'organisation en place.