Créer son jeu en PHP

Tout pour créer soit-même son jeu en PHP
 
AccueilAccueil  ­CalendrierCalendrier  ­FAQFAQ  ­RechercherRechercher  ­S'enregistrerS'enregistrer  ­MembresMembres  ­GroupesGroupes  ­ConnexionConnexion  
Poster un nouveau sujet   Répondre au sujetPartager | 
 

 Mon moteur de template ? PHP

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
naholyr
Langue pendue


Nombre de messages: 97
Date d'inscription: 08/06/2006

MessageSujet: Mon moteur de template ? PHP   Ven 30 Juin - 18:01

N'oubliez pas que PHP est au départ un moteur de templates pour Perl. Aujourd'hui on a réalisé des surcouches ce qui d'un point de vue historique est une hérésie (et ce n'est pas Rasmus qui me contredira, je vous assure...).

Que ce soit clair, l'usage d'un moteur de template en tant que surcouche PHP (tel que Smarty, PHPLib, etc...) a deux avantages :
- séparation du code et de la présentation.
- possibilité de passer d'un langage à un autre pour peu que le moteur soit implémenté dans les deux langages (par exemple s'il existe une version de Smarty pour Perl, on peut donc utiliser un template Smarty dans un script Perl).
Le premier point est indéniable, le second a un intérêt très discutable : franchement vos templates vous les utilisez pour plusieurs sites réalisés dans plusieurs langages ? De plus je n'ai pas connaissance d'un moteur de template implémenté dans plusieurs langages, et tombe donc à l'eau de fait.

Par contre, l'ajout d'une surcouche implique forcément une perte notable de performances.

Alors pourquoi ne pas utiliser PHP en tant que tel ?

Je vous présente donc le plus petit moteur de template en PHP implémentant :
- appels de fonctions
- affichage de variables
- blocs conditionnels
- boucles




Le code

Code:
class Template
{
    var $file;
    var $vars = array();
    function Template($tpl) {
        $this->file = $tpl;
    }
    function start() {
        ob_start();
    }
    function set($var, $val) {
        $this->vars[$var] = $val;
    }
    function display($contents = null) {
        foreach ($this->vars as $var => $val)
            $$var = $val;
        if ($contents === null) {
            $contents = ob_get_contents();
            ob_end_clean();
        }
        include $this->file;
    }
}





La syntaxe des templates

Variable :
Code:
<?=$variable?>


Boucle :
Code:
<?foreach($tableau as $element):?> ... <?endforeach?>


Condition :
Code:
<?if($condition):?> ... <?endif?>


Appel de fonction :
Code:
<?fonction(paramètres)?>





Utilisation du moteur

Instanciation :
Code:
$template =& new Template("Fichier Template");


Ajout d'une variable :
Code:
$template->set("nom", valeur);


Utilisation en mode output_buffering :
Code:
$template->start();
...
$template->display();
Dans ce mode, la variable "contents" sera automatiquement définie par la valeur du buffer au moment de l'appel à display().

Utilisation en mode normal :
Code:
$template->display("Contenu");
Dans ce mode la variable "contents" sera automatiquement définie à la valeur du paramètre.




Exemple

Fichier template :
Code:
<html>
<head>
  <title><?=$title?></title>
</head>
<body>
  <p><?=$contents?></p>
  <ul>
    <?foreach($animaux as $animal):?>
    <li><?=$animal?>
    <?endforeach?>
  </ul>
</body>


Utilisation en mode output_buffering :
Code:
$template =& new Template("MonTemplate.tpl");
$template->set('title', 'Mon Titre');
$template->set('animaux', array('chien', 'chat', 'souris'));
$template->start();
echo "Contenu de ma page";
$template->display();


Utilisation équivalente en mode direct :
Code:
$template =& new Template("MonTemplate.tpl");
$template->set('title', 'Mon Titre');
$template->set('animaux', array('chien', 'chat', 'souris'));
$template->display("Contenu de ma page");


Résultat :
Code:
<html>
<head>
  <title>Mon titre</title>
</head>
<body>
  <p>Contenu de ma page</p>
  <ul>
    <li>chien
    <li>chat
    <li>souris
  </ul>
</body>





Conclusion

Vous allez me dire : "mais c'est que du php ton truc ?". Ben oui... PHP offre tous les outils nécessaires pour séparer la présentation du code de façon efficace, et lisible. Pour cela il suffit d'utiliser les syntaxes abrégées (attention aux prologues XML avec les short_tags), et d'avoir de bonnes habitudes. La définition d'une classe simple pour "cadrer" un peu cette utilisation est une bonne habitude car elle restreint les variables accessibles à celle que l'on a définies (pas de vilaines globales). On ne souffre aucune perte de performance, et il suffit de créer une classe fille pour ajouter des fonctionnalités (typiquement : mise en cache, compression gzip).


Dernière édition par le Sam 1 Juil - 9:59, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Maxime
Habitué


Nombre de messages: 175
Age: 23
Date d'inscription: 13/09/2004

MessageSujet: Re: Mon moteur de template ? PHP   Ven 30 Juin - 23:47

Moi je dis super Tutos, les explications sont assez compréhensibles je trouve.

Un seul petit mauvais point, t'as pas fermé les <li> ^^

_________________
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://www.project-wh40k.info/
naholyr
Langue pendue


Nombre de messages: 97
Date d'inscription: 08/06/2006

MessageSujet: Re: Mon moteur de template ? PHP   Ven 30 Juin - 23:59

C'est du HTML, pas du XHTML :p le mauvais point c'est de ne pas avoir spécifié de doctype (mais quoi qu'il en soit c'est du vite-fait prend-pas-trop-de-place pour l'exemple j'ai pas fermé <html> non plus )
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Loetheri
Grand habitué


Nombre de messages: 287
Date d'inscription: 17/12/2005

MessageSujet: Re: Mon moteur de template ? PHP   Sam 1 Juil - 17:17

deux avantages ?
Mouais ... le premier est indéniable. Surement pas. On peut faire aussi du "template" avec PHP donc séparation de code et de présentation. D'ailleurs tu cites meme Rasmus. Donc un argument qui tombe un peu à l'eau.

Le second, je ne saurais en parler n'ayant les connaissances suffisantes.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
 

Mon moteur de template ? PHP

Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Créer son jeu en PHP :: PROGRAMMATION :: Tutoriaux - scripts-
Poster un nouveau sujet   Répondre au sujet