TUTORIAL: Fully Functional simple moteur de template (Suite)

  • Bogey
  • Bogey
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Juil 14, 2005
  • Messages: 8211
  • Loc: USA
  • Status: Offline

Message Mars 4th, 2009, 4:58 pm

Introduction


Ce tutoriel s'étend sur le didacticiel précédent de la Entièrement fonctionnelle moteur modèle simple . Il y aurait certaines fonctions édition et je voudrais enfin vous fournir les capacités de mise en cache ici.

Avant de commencer à ce sujet, permettez-moi de confesser...la classe de mise en cache sur le point de libérer Im n'est pas écrit par moi...Je l'ai trouvé quelque part sur OZZU et supposé que c'était ok pour moi d'utiliser...car il fonctionne exactement comme je l'ai besoin, je n'ai pas trouvé nécessaire de recoder moi-même un autre, même si je pouvais (je vous promets...Je ne peux vraiment gif "alt =": lol: "title =" Laughing "> )

Ce tutoriel n'est pas, par tout moyen, le dernier tutoriel sur la base de cette simple entièrement fonctionnel Template Engine...quand je fais assez de modifications à la classe pour remplir une grande page avec les modifications et si elle vous apprend quelque chose...puis après un autre mauvais ici...mais il pourrait être le dernier gif "alt =": lol: "title =" Laughing ">

Ajouté


Commençons par l'ajout de certaines fonctions plus ici: La fonction est appelée include_file .
PHP Code: [ Select ]
<?php
function include_file($file)
{
 
}
?>
  1. <?php
  2. function include_file($file)
  3. {
  4.  
  5. }
  6. ?>

La raison étant est que, parfois, vous voulez mettre un nom de fichier doit être réglé sur une variable, mais vous ne voulez pas en fait d'inclure le contenu de celui-ci dans le modèle...alors j'ai fait une solution simple ici...pour chaque fichier Vous ne voulez pas inclure dans le fichier, il suffit d'ajouter une * en face d'elle...le * est parfait parce qu'il n'est pas autorisé dans le nom du fichier à être activé lorsque vous créez un fichier et il nous permet de créer cette fonctionnalité :)
PHP Code: [ Select ]
<?php
function include_file($file)
{
    // Taking the first character from the filename
    $find = substr($file, 0, 1);
   
    // Checking if * exists in $filename
    if($find != '*')
    {
        return true;
    }
    return false;
}
?>
  1. <?php
  2. function include_file($file)
  3. {
  4.     // Taking the first character from the filename
  5.     $find = substr($file, 0, 1);
  6.    
  7.     // Checking if * exists in $filename
  8.     if($find != '*')
  9.     {
  10.         return true;
  11.     }
  12.     return false;
  13. }
  14. ?>
Que cette fonction fait est de vérifier le caractère premier du nom du fichier prévu *. Si vous n'aimez pas cette méthode, vous pouvez remplacer la fonction de ce qui suit. < Br>
PHP Code: [ Select ]
<?php
function include_file($file)
{
    // Checking if * exists in $filename
    if(strpos($file, '*') != false)
    {
        return true;
    }
    return false;
}
?>
  1. <?php
  2. function include_file($file)
  3. {
  4.     // Checking if * exists in $filename
  5.     if(strpos($file, '*') != false)
  6.     {
  7.         return true;
  8.     }
  9.     return false;
  10. }
  11. ?>
De cette façon, l'aide est une petite quantité de code, mais cette fois, vous pouvez mettre l'astérisque * n'importe où dans le nom du fichier...sa ne se limite pas à être à l'avant.

La fonction suivante est ce que j'ai nommé à unclude_file . Elle n'a en général ce que la fonction ci-dessus ne, mais il élimine aussi l'astérisque pour l'assainissement.
PHP Code: [ Select ]
<?php
function unclude_file($file, $perform = false)
{
    // Checking if the file was passed as an un-includeable
    if($this->include_file($file) === false)
    {
        // Checking if we should actually remove the first character (It being the '*')
        if($perform == true)
        {
            // Counting the number of letters $file consists of
            $ltrs = strlen($file);
           
            // Returning the trimmed $file
            return substr($file, 1, $ltrs);
        }
        return true;
    }
    return false;
}
?>
  1. <?php
  2. function unclude_file($file, $perform = false)
  3. {
  4.     // Checking if the file was passed as an un-includeable
  5.     if($this->include_file($file) === false)
  6.     {
  7.         // Checking if we should actually remove the first character (It being the '*')
  8.         if($perform == true)
  9.         {
  10.             // Counting the number of letters $file consists of
  11.             $ltrs = strlen($file);
  12.            
  13.             // Returning the trimmed $file
  14.             return substr($file, 1, $ltrs);
  15.         }
  16.         return true;
  17.     }
  18.     return false;
  19. }
  20. ?>
Je crois qu'on peut mettre tout cela en une seule fonction si je pense vraiment, mais mal la diviser en de...pourquoi? Parce que Im trop paresseux pour modifier ce tutoriel pour s'adapter au changement :roll: gif "alt =": lol: "title =" Laughing ">

Aussi, je ajouter une variable à l'ensemble de la classe appelée include_files . Il détient vrai si vous voulez que les fichiers qui sont passés dans la définition variable. être inclus dans le modèle (comme dans leur contenu) ou non inclus dans les modèles (Seuls les noms de fichiers seront inclus...pas la source).

PHP Code: [ Select ]
<?php
class tpl {
 
    // Various variables used throughout the class
    public $vari, $template, $page, [color=#0000FF]$vstart, $vend, $include_files;
 
}
?>
  1. <?php
  2. class tpl {
  3.  
  4.     // Various variables used throughout the class
  5.     public $vari, $template, $page, [color=#0000FF]$vstart, $vend, $include_files;
  6.  
  7. }
  8. ?>
Les variables en bleu est ce que je viens juste d'y rendre plus correcte (?). Je les ai mis dans la fonction commencer et les utiliser dans quelques fonctions...dans la classe

Édité


A droite, je l'ai dit, j'ai édité à certaines fonctions, permet ainsi obtenir à ce sujet gif "title =":)" alt =" Smile ">

La première fonction que j'ai édité a été le svariable pour tenir compte des include_file () fonction et la unclude_file () fonction. Ici, il est dans toute sa splendeur :D

PHP Code: [ Select ]
<?php
function svariable($return = false)
{
    // Converting set variables to the text defined in the parent PHP file
    foreach($this->vari as $key => $value)
    {
        // Checking if the value is a file and if it exists if it is a file
        if(is_file($value) && file_exists($value))
        {
            if($this->include_files === true  && ($this->include_file($value) === true))
            {
                // Getting the contents of the file
                $value = file_get_contents($value);
               
                // Replacing the KEY variable with the contents of the file
                $this->text = str_replace($this->vstart . $key . $this->vend, $value, $this->text);
            }
            else
            {
                // Replacing the KEY variable with the value
                $this->text = str_replace($this->vstart . $key . $this->vend, $value,$this->text);
            }
        }
        else
        {
            if($this->unclude_file($value) === true)
            {
                $value = $this->unclude_file($value, true);
            }
           
            // Replacing the KEY variable with the value
            $this->text = str_replace($this->vstart . $key . $this->vend, $value,$this->text);
        }
    }
   
    // Checking if we need to return the result
    if($return)
    {
        return $this->text;
    }
}
?>
  1. <?php
  2. function svariable($return = false)
  3. {
  4.     // Converting set variables to the text defined in the parent PHP file
  5.     foreach($this->vari as $key => $value)
  6.     {
  7.         // Checking if the value is a file and if it exists if it is a file
  8.         if(is_file($value) && file_exists($value))
  9.         {
  10.             if($this->include_files === true  && ($this->include_file($value) === true))
  11.             {
  12.                 // Getting the contents of the file
  13.                 $value = file_get_contents($value);
  14.                
  15.                 // Replacing the KEY variable with the contents of the file
  16.                 $this->text = str_replace($this->vstart . $key . $this->vend, $value, $this->text);
  17.             }
  18.             else
  19.             {
  20.                 // Replacing the KEY variable with the value
  21.                 $this->text = str_replace($this->vstart . $key . $this->vend, $value,$this->text);
  22.             }
  23.         }
  24.         else
  25.         {
  26.             if($this->unclude_file($value) === true)
  27.             {
  28.                 $value = $this->unclude_file($value, true);
  29.             }
  30.            
  31.             // Replacing the KEY variable with the value
  32.             $this->text = str_replace($this->vstart . $key . $this->vend, $value,$this->text);
  33.         }
  34.     }
  35.    
  36.     // Checking if we need to return the result
  37.     if($return)
  38.     {
  39.         return $this->text;
  40.     }
  41. }
  42. ?>
Que ce soit pour celui-ci gif "title =":)" alt =" Smile ">

Le cache


Bon, depuis que j'ai pris cette classe de quelqu'un sur ce forum, malade juste après toute la classe ensemble ici (sans coloration en rouge...J'ai de colorer chaque ligne séparément...).

Ce qu'il fait bien, est crée un fichier avec des variables non remplacé...il inclut tous les fichiers d'abord, puis le met en cache. L'identifiant (ou le nom qu'il serait enregistré sur) est le nom du fichier...si vous utilisez un modèle plus d'une fois sur les fichiers PHP différents...ne pas mettre en cache :D Sinon, il vous mess up.
PHP Code: [ Select ]
<?php
class fcache {
    var $name = NULL; // private members only >= PHP 5
    var $value = array();
    var $ttl;
 
    function __construct($name, $ttl = 3600) { // Default $ttl is 3600 (60 minutes until expiry)
        $this->name = $name;
        $this->ttl = $ttl;
    }
 
    function check() {
        $cached = false;
        $file_name = './cache/' . $this->name . ".cache";
        if(file_exists($file_name))
        {
            $modified = filemtime($file_name);
            if(time() - $this->ttl < $modified)
            {
                $fp = fopen($file_name, "rt");
                if($fp)
                {
                    $temp_value = fread($fp, filesize($file_name));
                    fclose($fp);
                    $this->value = unserialize($temp_value);
                    $cached = true;
                }
            }
            else
            {
                $this->del_value($this->name);
                $this->set_value($this->name, $this->value);
                $this->save();
            }
        }
        return $cached;
    }
 
    function save() {
        $file_name = './cache/' . $this->name . ".cache";
        $fp = fopen($file_name, "wt");
        if($fp)
        {
            fwrite($fp, serialize($this->value));
            fclose($fp);
        }
    }
 
    function set_value($key, $value) {
        $this->value[$key] = $value;
    }
 
    function get_value($key) {
        if(isset($this->value[$key]))
        {
            return $this->value[$key];
        }
        else
        {
            return null;
        }
    }
 
    function del_value($key)
    {
        $file_name = './cache/' . $this->name . ".cache";
        if(file_exists($file_name))
        {
            unset($this->value[$key]);
            return unlink($file_name);
        }
        return false;
    }
}
?>
  1. <?php
  2. class fcache {
  3.     var $name = NULL; // private members only >= PHP 5
  4.     var $value = array();
  5.     var $ttl;
  6.  
  7.     function __construct($name, $ttl = 3600) { // Default $ttl is 3600 (60 minutes until expiry)
  8.         $this->name = $name;
  9.         $this->ttl = $ttl;
  10.     }
  11.  
  12.     function check() {
  13.         $cached = false;
  14.         $file_name = './cache/' . $this->name . ".cache";
  15.         if(file_exists($file_name))
  16.         {
  17.             $modified = filemtime($file_name);
  18.             if(time() - $this->ttl < $modified)
  19.             {
  20.                 $fp = fopen($file_name, "rt");
  21.                 if($fp)
  22.                 {
  23.                     $temp_value = fread($fp, filesize($file_name));
  24.                     fclose($fp);
  25.                     $this->value = unserialize($temp_value);
  26.                     $cached = true;
  27.                 }
  28.             }
  29.             else
  30.             {
  31.                 $this->del_value($this->name);
  32.                 $this->set_value($this->name, $this->value);
  33.                 $this->save();
  34.             }
  35.         }
  36.         return $cached;
  37.     }
  38.  
  39.     function save() {
  40.         $file_name = './cache/' . $this->name . ".cache";
  41.         $fp = fopen($file_name, "wt");
  42.         if($fp)
  43.         {
  44.             fwrite($fp, serialize($this->value));
  45.             fclose($fp);
  46.         }
  47.     }
  48.  
  49.     function set_value($key, $value) {
  50.         $this->value[$key] = $value;
  51.     }
  52.  
  53.     function get_value($key) {
  54.         if(isset($this->value[$key]))
  55.         {
  56.             return $this->value[$key];
  57.         }
  58.         else
  59.         {
  60.             return null;
  61.         }
  62.     }
  63.  
  64.     function del_value($key)
  65.     {
  66.         $file_name = './cache/' . $this->name . ".cache";
  67.         if(file_exists($file_name))
  68.         {
  69.             unset($this->value[$key]);
  70.             return unlink($file_name);
  71.         }
  72.         return false;
  73.     }
  74. }
  75. ?>

Maintenant, nous devons mettre les choses en notre gentemp .
PHP Code: [ Select ]
<?php
function gentemp($cache = false, $return = false)
{
    // Converting simple function variables to function
    $this->sfvariable();
 
    // Checking if the page needs to be cached... if so, cache it.
    if($cache)
    {
        // Setting the cache class object
        $cache = new fcache($this->page);
       
        // Checking if the cache is available for the current page
        if($cache->check())
        {
            // Retrieving the cached contents of the page
            $this->text = $cache->get_value($this->page);
        }
        else
        {
            // Setting the cache with the contents of the current page
            $cache->set_value($cache->name, $this->text);
           
            // Saving the cache
            $cache->save();
           
            // Retrieving the cached contents of the page
            $this->text = $cache->get_value($this->page);
        }
    }
 
    // Converting simple variables to variables
    $this->svariable();
   
    // Checking if we need to echo or return the page
    if($return)
    {
        // Returning the page
        return $this->text;
    }
    else
    {
        // Echoing the page
        echo $this->text;
    }
}
?>
  1. <?php
  2. function gentemp($cache = false, $return = false)
  3. {
  4.     // Converting simple function variables to function
  5.     $this->sfvariable();
  6.  
  7.     // Checking if the page needs to be cached... if so, cache it.
  8.     if($cache)
  9.     {
  10.         // Setting the cache class object
  11.         $cache = new fcache($this->page);
  12.        
  13.         // Checking if the cache is available for the current page
  14.         if($cache->check())
  15.         {
  16.             // Retrieving the cached contents of the page
  17.             $this->text = $cache->get_value($this->page);
  18.         }
  19.         else
  20.         {
  21.             // Setting the cache with the contents of the current page
  22.             $cache->set_value($cache->name, $this->text);
  23.            
  24.             // Saving the cache
  25.             $cache->save();
  26.            
  27.             // Retrieving the cached contents of the page
  28.             $this->text = $cache->get_value($this->page);
  29.         }
  30.     }
  31.  
  32.     // Converting simple variables to variables
  33.     $this->svariable();
  34.    
  35.     // Checking if we need to echo or return the page
  36.     if($return)
  37.     {
  38.         // Returning the page
  39.         return $this->text;
  40.     }
  41.     else
  42.     {
  43.         // Echoing the page
  44.         echo $this->text;
  45.     }
  46. }
  47. ?>


Exemple d'utilisation


Maintenant, un exemple d'utilisation de toute cette affaire serait sur la première partie de ce tutoriel ( ??? ) Ou au-dessous :P

processus. php
PHP Code: [ Select ]
<?php
require('includes/globals.php');
 
$db->connect();
$db->last_sql = $db->build_query(array('*', 'forum_a'));
$result = $db->last_sql_data(false, 'SQL Results Data', true);
$db->close();
 
$tpl->template = 'default';
$tpl->page = 'index';
$tpl->start();
 
include('includes/global_vars.php');
 
$tpl->vari = array_merge($tpl->vari, array(
    'SQL_QUERY' => $result,
    'MEMBER_STUFF' => ((isset($_SESSION['uid'])) ? 'members.html' : 'non_members.html'),
    'USERNAME' => $username,
    'LAST_VISIT' => date(MM/DD/YYYY hh:mm:ss, $last_visit)
    'NOW_DATE' => date(MM/DD/YYYY hh:mm:ss)
));
 
$tpl->gentemp(true);
?>
  1. <?php
  2. require('includes/globals.php');
  3.  
  4. $db->connect();
  5. $db->last_sql = $db->build_query(array('*', 'forum_a'));
  6. $result = $db->last_sql_data(false, 'SQL Results Data', true);
  7. $db->close();
  8.  
  9. $tpl->template = 'default';
  10. $tpl->page = 'index';
  11. $tpl->start();
  12.  
  13. include('includes/global_vars.php');
  14.  
  15. $tpl->vari = array_merge($tpl->vari, array(
  16.     'SQL_QUERY' => $result,
  17.     'MEMBER_STUFF' => ((isset($_SESSION['uid'])) ? 'members.html' : 'non_members.html'),
  18.     'USERNAME' => $username,
  19.     'LAST_VISIT' => date(MM/DD/YYYY hh:mm:ss, $last_visit)
  20.     'NOW_DATE' => date(MM/DD/YYYY hh:mm:ss)
  21. ));
  22.  
  23. $tpl->gentemp(true);
  24. ?>

C'est vrai dans le gentemp ( dans le morceau de code ci-dessus indique le code pour le cache ainsi.

Et le fichier de modèle pourrait ressembler
HTML Code: [ Select ]
<!-- INCLUDE header.html -->
<div id="content">
     <h6 id="header">Welcome {USERNAME} your last visit was {LAST_VISIT} from today ({NOW)DATE})</h6>
     <p>{MEMBER_STUFF}</p>
     <p>{SQL_QUERY}</p>
</div>
<!-- INCLUDE footer.html -->
  1. <!-- INCLUDE header.html -->
  2. <div id="content">
  3.      <h6 id="header">Welcome {USERNAME} your last visit was {LAST_VISIT} from today ({NOW)DATE})</h6>
  4.      <p>{MEMBER_STUFF}</p>
  5.      <p>{SQL_QUERY}</p>
  6. </div>
  7. <!-- INCLUDE footer.html -->

Hope qui avait du sens :D

Conclusion


Eh bien, ce qu'il est pour l'instant. Espérons que vous apprécierez et trouverai un bon usage pour lui :D

Attachments:
template.zip

(2.89 Kio) Téléchargé 476 fois

The Template Engine Source Code

"Bring forth therefore fruits meet for repentance:" Matthew 3:8
  • Anonymous
  • Bot
  • No Avatar
  • Inscription: 25 Feb 2008
  • Messages: ?
  • Loc: Ozzuland
  • Status: Online

Message Mars 4th, 2009, 4:58 pm

  • Bogey
  • Bogey
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Juil 14, 2005
  • Messages: 8211
  • Loc: USA
  • Status: Offline

Message Mars 6th, 2009, 2:51 pm

Le tutoriel est en cours d'utilisation Création . Check it out pour découvrir la convivialité de la classe. J'espère qu'il était descriptif en...si je ne l'est pas, n'hésitez pas à répondre à l'utilisation tutorial avec toutes les questions que vous avez mai.
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
  • Bogey
  • Bogey
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Juil 14, 2005
  • Messages: 8211
  • Loc: USA
  • Status: Offline

Message Juillet 1st, 2009, 12:10 am

Une encore plus simple modèle de la classe a été créé par le chien enragé avec un peu moins de moyens, et même fonctionnalité est arrivé à une manière différente.
"Bring forth therefore fruits meet for repentance:" Matthew 3:8

Afficher de l'information

  • Total des messages de ce sujet: 3 messages
  • Modérateur: Tutorial Writers
  • Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 4 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