2010-08-13 20 views
4

Je veux utiliser un système de modèle personnalisé dans mon application php,Comment créer un système de template personnalisé en PHP

Ce que je veux, je veux garder loin mes codes php de la conception, je voudrais utiliser un fichier tpl pour les conceptions et un fichier php pour les codes php

Je ne veux pas utiliser de scripts de maid prêts. Peut-on indiquer un lien de liens ou informations utiles comment construire un système php templating pour y parvenir

Merci

+2

Si vous ne savez pas comment les écrire - regardez comment une maturité ('smarty' par exemple) d'entre eux est écrit ou ne soyez pas si optimiste et juste en prendre un (je vous propose de regarder 'moustache') – zerkms

+0

http://phptemplatinglanguage.com/ – alex

Répondre

5

La façon dont je le fais est de créer un fichier modèle (.tpl si vous le souhaitez) et insérer des marqueurs qui seront remplacés par str_replace en PHP. Le code ressemblera à quelque chose comme ceci:

Pour template.tpl fichier

<body> 
    <b>Something: </b> <!-- marker --> 
</body> 

Pour le PHP

$template = file_get_contents('template.tpl'); 
$some_data = 'Some Text'; //could be anything as long as the data is in a variable 
$template = str_replace('<!-- marker -->', $some_data, $template); 
echo $template; 

Qu'il est en un mot, mais il peut obtenir beaucoup plus complexe. Le marqueur peut être n'importe quoi tant que c'est unique.

+0

Vous aurez besoin de citer ce nom de fichier, bien sûr. :) – alex

+0

Merci, citations ajoutées. – Thilo

+4

qui est absolument inutilisable dans le monde réel. –

2

Je veux garder loin mes codes php de la conception, je voudrais utiliser un fichier tpl pour les conceptions

... et mélanger vos codes tpl avec "design"!
quelle est la différence alors? :)

PHP lui-même est un système de template efficace.
Et de nos jours, la plupart des développeurs ont convenu que la division de votre code PHP à la logique métier partie et la logique d'affichage partie est de la manière la plus préférable.
Il peut s'agir d'un sous-ensemble très limité de PHP bien sûr. Vous aurez besoin d'un opérateur de sortie (<?=$var?>) un, une condition <? if(): ?>...<? endif ?>, une boucle <? foreach(): ?>...<? endforeach ?> et inclure.

Un exemple d'un tel modèle:

<table> 
<? foreach ($data as $row): ?> 
    <tr> 
    <td><b><?=$row['name'] ?></td> 
    <td><?=$row['date'] ?></td> 
    </tr> 
    <tr> 
    <td colspan=2><?=$row['body'] ?></td> 
    </tr> 
    <? if ($row['answer']): ?> 
    <tr> 
    <td colspan=2 valign="top"> 
     <table> 
     <tr> 
      <td valign="top"><b>Answer: </b></td> 
      <td><?=$row['answer'] ?></td> 
     </tr> 
     </table> 
    </td> 
    </tr> 
    <? endif ?> 
    <? if($admin): ?> 
    <tr> 
    <td colspan=2> 
    <? if($row['del']): ?> 
     <a href="/gb/?action=undelete&id=<?=$row['id']?>">show</a> 
    <? else: ?> 
     <a href="/gb/?action=delete&id=<?=$row['id']?>">hide</a> 
    <? endif ?> 
     <a href="/gb/?action=edit&id=<?=$row['id']?>">edit</a> 
    </td> 
    </tr> 
    <? endif ?> 
<? endforeach ?> 
</table> 
+1

+1 Oui, c'est une bonne réponse. La seule chose que j'ajouterais est de mentionner 'short_tags' et que cela ne fonctionnera pas quand il sera éteint. – alex

+1

@alex Il y a beaucoup de choses qui ne fonctionneront pas si elles sont désactivées. display_errors, support PDO, mod_rewrite - n'importe quoi. Ce n'est pas une raison pour le mentionner. C'est l'objectif d'une telle option de configuration - à allumer et à éteindre. Rien de mauvais ou même digne de mention je dirais. –