En regardant à l'aide d'un système de modèle pour un nouveau projet, ce n'est qu'un petit site et je ne veux pas utiliser les frais généraux et la «complexité» de Smarty. Je n'aime pas vraiment les systèmes de modèles qui vous obligent à utiliser une autre langue pour faciliter la tâche des concepteurs (apparemment). P>
quelque chose comme ça http://www.namepros.com/code/517342-php5-Template -Class.html est ce que je regarde, mais quelque chose qui est un peu plus robuste et prouvé. p>
7 Réponses :
Je recommanderais d'utiliser Lisez également Blog de Fabien Potencier , où il explique ses besoins pour un moteur de modèle puissant et personnalisable. P> aussi si vous Besoin de composants supplémentaires pour le développement Web, mais vous avez déjà une base de code définie, consultez composants symfony qui Comprend un composant de modèles supplémentaire (mentionné dans Xue peut répondre) p> h2>
Code de modèle de brindille h2>
composants symfony h2>
Je ne vois pas comment cela se qualifie pour l'exigence de l'OP de ne pas avoir à utiliser une autre langue / syntaxe
Le plus simple ... Il suffit de créer des blocs de classe comme: et utiliser $ ceci-> quel que soit le modèle sur le modèle.
Ou utilisez: p> et sur le modèle, vous pouvez y accéder avec $ myvar p> p>
Je suggérerais d'utiliser renvoyer fichier_get_contents ('path_to_file'); code>
Bien sûr, mais vous devez traiter les variables après. Pour moi, cela n'a tout simplement pas de sens, PHP Moteur remplacera les variables plus rapidement que d'utiliser des fonctions telles que STRTR, STR_REPLACE, PREG_REPHIPPHIP, ...
inutile que vous avez raison :) Je suggérerais d'utiliser $ vars = Array (); code> dans l'extrait de CLASSDEF et ($ ceci-> vars); code> avant y compris le Modèle cependant. rend un peu plus flexible
Oui, j'ai écrit cela il y a beaucoup de temps, je viens de l'éditer et ajouté une méthode pour ajouter Vars et l'extraire avant.
php par lui-même est déjà un moteur de modèle. Alors, pourquoi ne pas découper la surcharge Un moteur de modèle écrit dans un moteur de modèle apporte avec elle et utilisez simplement PHP alors? Si vous avez besoin de fonctionnalités ajoutées, envisagez d'utiliser ViewHelper, par exemple. Petites fonctions qui encapsulent des trucs comme Ajout de noms de liens ou de la traduction, par exemple p> si c'est trop verbeux, consultez Syntaxe Heredoc et Nowdoc et si ce n'est toujours pas ce que vous recherchez , voici une liste de certains moteurs de modèle: p> ou strong>, si vous vous sentez expérimental, consultez XHP, approche d'extension de Facebook dans un moteur de modèle: p>
En effet, cette facilité est de savoir ce que je suis après si le PHP est dans un seul fichier et que le modèle (vos exemples ci-dessus) sont dans l'autre fichier. Comment puis-je obtenir $ de pagetitle et les autres vars que vous avez montré ci-dessus dans cette portée? juste comporte? Se sent un peu rugueux ...
@Wizzard dépend de votre architecture d'application. Si tout votre code de contrôle est dans un seul fichier, vous pouvez simplement inclure le modèle à la fin de ce fichier, puis les VARS seront disponibles. Si vous recherchez une approche de style plus MVC, utilisez simplement une classe comme suggérée par @ inutile et assignez tout ce que vous souhaitez être disponible pour l'instance de vue. Varse doivent commencer par $ ceci alors bien sûr.
+1 pour fournir la solution la plus simple et la plus directe. Il n'y a vraiment pas besoin de moteurs Smarty ou Modèles qui utilisent Str_replace
+1 ayant un moteur de modèles sur le dessus de PHP (qui est un moteur de modèle lui-même) n'a jamais beaucoup de sens pour moi
Je crois que le PHP lui-même est un moteur de gabarit très puissant.
Si vous avez juste besoin d'un moteur de modèle très simple, vous pouvez envelopper un Str_replace (), par exemple: P>
function template($source, array $vars, $return=false) {
foreach ($vars as $key=>$value) {
$source = str_replace('{'.$key.'}', $value, $source);
}
if ($return) {
return $source;
} else {
echo $source;
}
}
Je viens de publier un projet open source qui le rend vraiment facile. Il s'agit de "héritage de modèle", inspiré par Django et vous permettra d'hériter et de remplacer des parties d'un modèle parent d'un modèle d'enfant. Situé ici: P>
J'ai écrit nid. C'est une langue de modèles basée sur les meilleures parties de JSP et compile le code PHP. Vous écrivez votre code dans HTML bien formé et peut facilement créer de nouvelles balises pour vous donner de nouvelles fonctionnalités. Il existe des étiquettes standard intégrées.
http://nest.sourceforge.net/ p>
ressemble à ceci: p>
Regardez le paquet Absint chez phpclasses.org. Il est très petit et fournit un trait, une classe et une fonction à choisir. Gratuit. Ou utilisez simplement la fonction globale comme remplacement de VSPRINTF ():
function absintf($string, array $vars) {
$callback = function ($matches) use ($vars) {
$match = $matches[1];
return $vars[$match];
};
return preg_replace_callback("/\{([\w\d]+)\}/", $callback, $string);
};