TUTORIAL: PHP de base Templating mécanisme

  • Rabid Dog
  • Web Master
  • Web Master
  • Avatar de l’utilisateur
  • Inscription: Mai 21, 2004
  • Messages: 3229
  • Loc: South Africa
  • Status: Offline

Message Juin 30th, 2009, 6:56 pm

Basic PHP Templating mécanisme



Ayant vu de nombreuses chaînes intégrées html dans les fonctions PHP j'ai pensé qu'il serait utile d'illustrer d'une manière très simple tout droit avant de mettre en place un moteur de templates. Ce tutoriel est divisé en 4 sections, à savoir
1) Exigences
2) System Design (UML)
3) Mise en oeuvre
4) Utilisation de l'application

Exigences


1) entièrement fonctionnelle serveur HTTP, y compris les binaires PHP pour ce serveur
2) L'Editeur de texte
3) un navigateur Web capable de rendre le contenu

System Design


Attachments:
TutorialClassModel.gif


Description:
css = notre fichier CSS pour le modèle
isValid = non utilisé dans ce tutoriel, mais peut être utile une fois que vous obtenez le coup de la présente pour vérifier si le modèle est valable fondée sur des critères ce que jamais vous décider (emplacement du fichier non valide, ce qui n'est pas de définir etc etc)
templateDir = le chemin et y compris le répertoire contenant ces notre modèle
TemplateDir () = notre constructeur
affichage (fichier) = le fichier à afficher dans notre modèle

Code: [ Select ]
 
 
function Template(){
  $this->templateDir = "default";
  $this->css = "default.css";
}
 
  1.  
  2.  
  3. function Template(){
  4.   $this->templateDir = "default";
  5.   $this->css = "default.css";
  6. }
  7.  


Ici, nous définissons le modèle dir comme "default" qui veut dire ceci, si vous travaillez sur les fichiers d'accueil / mypage.php et y compris le fichier de modèle à partir de là, le chemin vers le répertoire contenant les infos e sera à la maison / default /. Donc, en d'autres termes, le dossier est relatif au chemin du dossier d'appel. Ensuite, nous définir la feuille de style comme default.css qui signifie que le chemin est home / default / default.css. Comprenez-vous? Great permet de passer ensuite

Code: [ Select ]
 
function display($file){
  $template = $this;
  error_reporting(E_ALL);
  include_once("template/" . $this->templateDir ."/".$file);
}
 
  1.  
  2. function display($file){
  3.   $template = $this;
  4.   error_reporting(E_ALL);
  5.   include_once("template/" . $this->templateDir ."/".$file);
  6. }
  7.  


Ici, nous fixons le niveau d'erreur, vous pourriez à un stade ultérieur souhaitez définir une sorte de pavillon qui modifie le niveau des rapports en fonction de l'environnement, comme par exemple la production ou de développement. alors nous inclure le fichier suivant dans le répertoire que nous avons spécifié dans le constructeur. Cette trajectoire a template préfixant comme je préfère stocker mes modèles dans un répertoire appelé modèles (funny that). Ainsi le chemin serait home / templates / default.

La classe dans toute sa splendeur ci-dessous
Code: [ Select ]
 
<?php
 
class Template{
 
  var $templateDir;
  var $css;
  var $isValid;
 
  function Template(){
    $this->templateDir  = "default";
    $this->css = "default.css";
  }
  function display($file){
    $template = $this;
    error_reporting(E_ALL);
    include_once("template/" . $this->templateDir ."/".$file);
  }
}
 
?>
 
  1.  
  2. <?php
  3.  
  4. class Template{
  5.  
  6.   var $templateDir;
  7.   var $css;
  8.   var $isValid;
  9.  
  10.   function Template(){
  11.     $this->templateDir  = "default";
  12.     $this->css = "default.css";
  13.   }
  14.   function display($file){
  15.     $template = $this;
  16.     error_reporting(E_ALL);
  17.     include_once("template/" . $this->templateDir ."/".$file);
  18.   }
  19. }
  20.  
  21. ?>
  22.  


Tout le monde bien avec moi jusqu'à présent? Great permet de définir certains modèles

header.tpl (dans le dossier par défaut)
Code: [ Select ]
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>My Template :: <?php echo $template->title; ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="template/<?php echo $template->templateDir . "/default.css" ?>" rel="stylesheet" type="text/css" />
</head>
<body>
<div>
My Template header <?php echo $template->welcome; ?>
</div>
 
  1.  
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html>
  4. <head>
  5. <title>My Template :: <?php echo $template->title; ?></title>
  6. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  7. <link href="template/<?php echo $template->templateDir . "/default.css" ?>" rel="stylesheet" type="text/css" />
  8. </head>
  9. <body>
  10. <div>
  11. My Template header <?php echo $template->welcome; ?>
  12. </div>
  13.  


There we go, enregistrez le fichier et permet de procéder à home.tpl dans le même répertoire
Code: [ Select ]
 
<div>
Well hello there <?php echo $template->name; ?><br />
I am so glad you could join me on my <?php echo $template->content; ?><br />
Look here, I have put your name in a textbox <input type='text' id="txtMyName" value="<?php echo $template->name; ?>" /><br />
have a happy day!
</div>
</body>
 
  1.  
  2. <div>
  3. Well hello there <?php echo $template->name; ?><br />
  4. I am so glad you could join me on my <?php echo $template->content; ?><br />
  5. Look here, I have put your name in a textbox <input type='text' id="txtMyName" value="<?php echo $template->name; ?>" /><br />
  6. have a happy day!
  7. </div>
  8. </body>
  9.  


So Cool maintenant notre application est faite! J'ai inclus la zone de texte de sorte que vous pouvez voir que cela peut être utilisé dans les formulaires de saisie de données lorsque les données d'édition. < br>

Usage


Eh bien, je parie que vous avez hâte de visionner ce droit? bien, même si vous pas que je vais vous montrer quand même :P

Supposons notre page php est appelé mypage.php.

La première chose que nous faisons est inclure la classe template

Code: [ Select ]
 
include_once("lib/Template.class.php") // I have saved the template class we added into a dir called lib as file name Template.class.php
 
  1.  
  2. include_once("lib/Template.class.php") // I have saved the template class we added into a dir called lib as file name Template.class.php
  3.  


La prochaine chose que nous faisons est de créer une référence à l'objet modèle (pour ceux qui ont travaillé avec des classes le terme adéquat est instancier une instance de classe Modèle)

Code: [ Select ]
 
$oTemplate = new Template();
 
  1.  
  2. $oTemplate = new Template();
  3.  


Bon, maintenant nous avons besoin pour remplir les variables de la page
Code: [ Select ]
 
$oTemplate->title = "Check out my template page!";
$oTemplate->welcome = "Howdy doody!";
$oTemplate->name = "Captain Cheese Monkey";
$oTemplate->content = "Here I can put all my html content, whether it be a read from a file or dynamically created content from my super DB";
 
  1.  
  2. $oTemplate->title = "Check out my template page!";
  3. $oTemplate->welcome = "Howdy doody!";
  4. $oTemplate->name = "Captain Cheese Monkey";
  5. $oTemplate->content = "Here I can put all my html content, whether it be a read from a file or dynamically created content from my super DB";
  6.  


Et nous avons tous fait! Voici la page complète
mypage.php
Code: [ Select ]
 
<?php
include_once("lib/Template.class.php");
 
$oTemplate->title = "Check out my template page!";
$oTemplate->welcome = "Howdy doody!";
$oTemplate->name = "Captain Cheese Monkey";
$oTemplate->content = "Here I can put all my html content, whether it be a read from a file or dynamically created content from my super DB";
 
$oTemplate->display("header.tpl");
$oTemplate->display("home.tpl");
?>
 
  1.  
  2. <?php
  3. include_once("lib/Template.class.php");
  4.  
  5. $oTemplate->title = "Check out my template page!";
  6. $oTemplate->welcome = "Howdy doody!";
  7. $oTemplate->name = "Captain Cheese Monkey";
  8. $oTemplate->content = "Here I can put all my html content, whether it be a read from a file or dynamically created content from my super DB";
  9.  
  10. $oTemplate->display("header.tpl");
  11. $oTemplate->display("home.tpl");
  12. ?>
  13.  


Et que comme on dit dans les classiques, c'est que. Nice clean and simple. Vous pouvez étendre ce d'ici aux quatre coins de la planète (il est bon plat?) Et profitez de temps à faire les choses amusantes comme le codage par opposition à la logique des chaînes de codage HTML!

Conclusion


Ceci est un exemple très simple conçu pour vous permettre de démarrer rapidement. Il ne s'agit en aucun cas une solution globale, mais est destiné à vous aider à comprendre la façon de séparer la logique de ton et la manière de créer de jolis modèles propres, qui permettent un entretien facile et reusage contenu.

Rabid chien.
Watch me grow
  • Anonymous
  • Bot
  • No Avatar
  • Inscription: 25 Feb 2008
  • Messages: ?
  • Loc: Ozzuland
  • Status: Online

Message Juin 30th, 2009, 6:56 pm

  • spork
  • Brewmaster
  • Silver Member
  • Avatar de l’utilisateur
  • Inscription: Sep 22, 2003
  • Messages: 6128
  • Loc: Seattle, WA
  • Status: Offline

Message Juillet 1st, 2009, 8:46 am

Payant AFT foh FUM...Je vois dans la notation hongroise là!
The Beer Monocle. Classy.
  • Rabid Dog
  • Web Master
  • Web Master
  • Avatar de l’utilisateur
  • Inscription: Mai 21, 2004
  • Messages: 3229
  • Loc: South Africa
  • Status: Offline

Message Juillet 1st, 2009, 9:07 am

lol ouais je peux seule façon de différencier les objets en PHP ;)
Watch me grow
  • Rabid Dog
  • Web Master
  • Web Master
  • Avatar de l’utilisateur
  • Inscription: Mai 21, 2004
  • Messages: 3229
  • Loc: South Africa
  • Status: Offline

Message Juillet 1st, 2009, 9:16 am

spork a écrit:
Payant AFT foh FUM...Je vois dans la notation hongroise là!


Outre le canard dans un langage typé, il est le seul moyen de voir clairement ce que l'objet est LOL. Je ne suis toutefois apprécier le fait que vous avez choisi celle-ci, a eu un bon rire quand je lis votre commentaire. Made tutoriel intéressant.
Watch me grow
  • SpooF
  • ٩๏̯͡๏۶
  • Bronze Member
  • Avatar de l’utilisateur
  • Inscription: Mai 22, 2004
  • Messages: 3415
  • Loc: Richland, WA
  • Status: Offline

Message Juillet 1st, 2009, 9:59 am

Chien enragé, whats your prendre sur des systèmes comme smarty? Quand doivent-ils être utilisés? Ive été dans beaucoup de discussion sur des systèmes comme smarty comme quelque chose de simple et de ce que vous avez ici.
#define NULL (::rand() % 2)
  • UPSGuy
  • Lurker ಠ_ಠ
  • Web Master
  • Avatar de l’utilisateur
  • Inscription: Juil 25, 2005
  • Messages: 2735
  • Loc: Nashville, TN
  • Status: Offline

Message Juillet 1st, 2009, 10:52 am

Spoof - Je sais que vous ne me demandez pas, mais mauvais donner de mes deux cents anyways. :D Ive a construit une demi-douzaine de projets à l'aide de Smarty et Ive a passé la dernière année, ou si la personnalisation de ma carrière de trois installations de SugarCRM, qui met également en œuvre Smarty.

IMHO, le moteur de Smarty est idéale pour les applications où une grande cache de venir en mai à portée de main. Nos systèmes CRM touchés plusieurs centaines de fois par heure, au service d'une grande tête et le menu à chaque hit, de sorte que la mise en cache est un avantage pour nous. J'aime aussi l'extérieur des fichiers de configuration que vous pouvez mettre en œuvre. Si vous avez besoin de migrer entre dev / QA / prod environnements des systèmes ou entre eux, puis d'avoir tous vos configuration en un seul endroit est un excellent moyen de transitions en douceur. Ces stand dans mon esprit que les caractéristiques je utiliser plus de Smarty, mais aussi quelques theres que Ive utilisés ici et là en cas de besoin tels que les fonctions de filtrage et de modèle. Bien sûr, les modèles sont toujours compilé un avantage, aussi.

Tout cela étant dit, un lieu de theres doux et simple, aussi. Un système de gabarits comme ce chien enragé a fourni serait certainement mon choix de Smarty pour les petits projets. Smarty exécute étonnamment bien compte tenu de toutes ses capacités, mais il peut aussi écraser un projet.
I'd love to change the world, but they won't give me the source code.
  • Rabid Dog
  • Web Master
  • Web Master
  • Avatar de l’utilisateur
  • Inscription: Mai 21, 2004
  • Messages: 3229
  • Loc: South Africa
  • Status: Offline

Message Juillet 2nd, 2009, 3:47 am

SpooF a écrit:
Chien enragé, whats your prendre sur des systèmes comme smarty? Quand doivent-ils être utilisés? Ive été dans beaucoup de discussion sur des systèmes comme smarty comme quelque chose de simple et de ce que vous avez ici.

Mon avis sur cette smarty est.

Il s'agit d'un cadre créé, il contient probablement beaucoup de choses utiles. La seule chose que j'ai contre elle n'est que cela, c'est un cadre avec un tas de choses dans ce :)

Cette solution simple de gabarits m'a permis de créer un certain nombre de sites et travaille bien tranquille. L'autre chose est la courbe d'apprentissage. Ce que vous écrivez pour vous permettre de l'étendre au besoin. Alors que si vous avez besoin de la mettre dans les extensions, pas avant :)

Encore une fois, je dois souligner, je n'ai rien contre smarty mais préfèrent le contrôle absolu je sors de la rédaction de mon propre :)

Make sense?
Watch me grow
  • spork
  • Brewmaster
  • Silver Member
  • Avatar de l’utilisateur
  • Inscription: Sep 22, 2003
  • Messages: 6128
  • Loc: Seattle, WA
  • Status: Offline

Message Juillet 2nd, 2009, 8:30 am

Code: [ Select ]
function display($file){
  $template = $this;
  error_reporting(E_ALL);
  include_once("template/" . $this->TemplateDir ."/".$file);
}
  1. function display($file){
  2.   $template = $this;
  3.   error_reporting(E_ALL);
  4.   include_once("template/" . $this->TemplateDir ."/".$file);
  5. }


A quoi sert la ligne bleue au-dessus servir? Il ressemble à tout ce que vous faites est de créer une copie de votre auto-référence, mais ne l'utilisez pas.
The Beer Monocle. Classy.
  • Rabid Dog
  • Web Master
  • Web Master
  • Avatar de l’utilisateur
  • Inscription: Mai 21, 2004
  • Messages: 3229
  • Loc: South Africa
  • Status: Offline

Message Juillet 2nd, 2009, 8:49 am

Il s'agit d'une bizarrerie dans PHP.

Je vais faire quelques tests pour vous afin que je puisse clarifier complètement
Watch me grow
  • Bogey
  • Bogey
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Juil 14, 2005
  • Messages: 8211
  • Loc: USA
  • Status: Offline

Message Juillet 3rd, 2009, 10:10 am

spork a écrit:
Code: [ Select ]
function display($file){
  $template = $this;
  error_reporting(E_ALL);
  include_once("template/" . $this->TemplateDir ."/".$file);
}
  1. function display($file){
  2.   $template = $this;
  3.   error_reporting(E_ALL);
  4.   include_once("template/" . $this->TemplateDir ."/".$file);
  5. }


A quoi sert la ligne bleue au-dessus servir? Il ressemble à tout ce que vous faites est de créer une copie de votre auto-référence, mais ne l'utilisez pas.

Il s'en sert...regarder la partie HTML du template exemple...Je comprends effectivement la moitié de cette...(Le quoi pour une partie...pas le pourquoi :lol: )
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
  • Rabid Dog
  • Web Master
  • Web Master
  • Avatar de l’utilisateur
  • Inscription: Mai 21, 2004
  • Messages: 3229
  • Loc: South Africa
  • Status: Offline

Message Juillet 3rd, 2009, 1:33 pm

Oui sur place :) la variable $ template est disponible en cas d'appel à l'intérieur du modèle (. tpl) page. Quant à savoir pourquoi? Eh bien lorsque le fichier est inclus, il est compris dans le contexte de la fonction donc la variable $ template est disponible à l'intérieur de la page incluse :) Qui vous permet d'assigner des valeurs à elle par l'intermédiaire de la variable $ oTemplate.

Make sense?
Watch me grow
  • spork
  • Brewmaster
  • Silver Member
  • Avatar de l’utilisateur
  • Inscription: Sep 22, 2003
  • Messages: 6128
  • Loc: Seattle, WA
  • Status: Offline

Message Juillet 4th, 2009, 10:33 am

Ah je vois maintenant. Sneaky.
The Beer Monocle. Classy.
  • Bogey
  • Bogey
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Juil 14, 2005
  • Messages: 8211
  • Loc: USA
  • Status: Offline

Message Juillet 4th, 2009, 11:14 am

Rabid Dog a écrit:
Oui sur place :) la variable $ template est disponible en cas d'appel à l'intérieur du modèle (. tpl) page. Quant à savoir pourquoi? Eh bien lorsque le fichier est inclus, il est compris dans le contexte de la fonction donc la variable $ template est disponible à l'intérieur de la page incluse :) Qui vous permet d'assigner des valeurs à elle par l'intermédiaire de la variable $ oTemplate.

Make sense?

Je pensais que plus il y avait une raison technique :shock:
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
  • Rabid Dog
  • Web Master
  • Web Master
  • Avatar de l’utilisateur
  • Inscription: Mai 21, 2004
  • Messages: 3229
  • Loc: South Africa
  • Status: Offline

Message Juillet 4th, 2009, 12:05 pm

Eh bien, il est technique. Suppression de l'affectation de $ ce à la variable $ template et voir ce qui se passe ;)
Watch me grow

Afficher de l'information

  • Total des messages de ce sujet: 14 messages
  • Modérateur: Tutorial Writers
  • Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités
  • Vous ne pouvez pas poster de nouveaux sujets
  • Vous ne pouvez pas répondre aux sujets
  • Vous ne pouvez pas éditer vos messages
  • Vous ne pouvez pas supprimer vos messages
  • Vous ne pouvez pas joindre des fichiers
 
 

© 2011 Unmelted, LLC. Ozzu® est une marque déposée de Unmelted, LLC