Annonces
Livre d'or

Par cOcO

Vous faites du super job !! merci

Livre d'or

Mini sondage
Disposez-vous de PHP 5 chez votre hébergeur ?








Résultats

 
Classe Cache - exemple d'utilisation
 



Voici un exemple illustrant les différents aspects de l'utilisation du cache.
Prenons l'exemple du module FAQ dont l'identifiant est faq.

Informations en cache


Le FAQ utilise une base de données pour gérer les données et en particulier les catégories. Compte-tenu de leur nombre (même sur un très gros site il n'y en aura jamais des milliers), il est judicieux de mettre en cache les informations les concernant afin d'accélérer l'affichage en évidant des requêtes dans la base de données. De plus, quasiment comme dans tout module, les données de configuration sont aussi à mettre en cache. Pour cela le noyau intègre une table dans la base de données permettant de stocker les autorisations des modules.
On vérifiera au passage que la configuration du module indique l'utilisation du cache : dans module/lang/french/config.ini la ligne suivante doit figurer Code TEXT :
cache=1


Fichier de génération


Voici le contenu du fichier faq_cache.php (vous noterez l'importance du nom).
Code PHP :
  1. /*##################################################
  2.  * faq_cache.php
  3.  * -------------------
  4.  * begin : November 11, 2007
  5.  * copyright : (C) 2007 Sautel Benoit
  6.  * email : ben.popeye-at-phpboost.com
  7.  *
  8.  *
  9.  ###################################################
  10.  *
  11.  * This program is free software; you can redistribute it and/or modify
  12.  * it under the terms of the GNU General Public License as published by
  13.  * the Free Software Foundation; either version 2 of the License, or
  14.  * (at your option) any later version.
  15.  *
  16.  * This program is distributed in the hope that it will be useful,
  17.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  18.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  19.  * GNU General Public License for more details.
  20.  *
  21.  * You should have received a copy of the GNU General Public License
  22.  * along with this program; if not, write to the Free Software
  23.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  24.  *
  25. ###################################################*/
  26.  
  27. if( defined('PHP_BOOST') !== true) exit;
  28.  
  29. function generate_module_file_faq()
  30. {
  31. global $Sql;
  32. //Configuration
  33. $config = unserialize($Sql->Query("SELECT value FROM ".PREFIX."configs WHERE name = 'faq'", __LINE__, __FILE__));
  34. $root_config = $config['root'];
  35. $root_config['auth'] = $config['global_auth'];
  36. unset($config['root']);
  37. $string = 'global $FAQ_CONFIG, $FAQ_CATS;' . "\n\n";
  38. $string .= '$FAQ_CONFIG = ' . var_export($config, true) . ';' . "\n\n";
  39.  
  40. //List of categories and their own properties
  41. $string .= '$FAQ_CATS = array();' . "\n\n";
  42. $string .= '$FAQ_CATS[0] = ' . var_export($root_config, true) . ';' . "\n";
  43. $result = $Sql->Query_while("SELECT id, id_parent, c_order, auth, name, visible, display_mode, image, num_questions, description
  44. FROM ".PREFIX."faq_cats
  45. ORDER BY id_parent, c_order", __LINE__, __FILE__);
  46.  
  47. while ($row = $Sql->Sql_fetch_assoc($result))
  48. {
  49. $string .= '$FAQ_CATS[' . $row['id'] . '] = ' .
  50. var_export(array(
  51. 'id_parent' => $row['id_parent'],
  52. 'order' => $row['c_order'],
  53. 'name' => $row['name'],
  54. 'desc' => $row['description'],
  55. 'visible' => (bool)$row['visible'],
  56. 'display_mode' => $row['display_mode'],
  57. 'image' => $row['image'],
  58. 'num_questions' => $row['num_questions'],
  59. 'description' => $row['description'],
  60. 'auth' => unserialize($row['auth'])
  61. ),
  62. true)
  63. . ';' . "\n";
  64. }
  65. return $string;
  66. }
  67.  


Plusieurs lignes sont propres à ce module et à son fonctionnement mais on portera une attention particulières au lignes suivantes :
  • 28 : petite vérification permettant de s'assurer que l'environnement de PHPBoost a été chargé
  • 30 : on déclare la fonction en respectant scrupuleusement les règles sur son nom.
  • 32 : l'objet $Sql est utilisé dans la classe, on l'importe dans le contexte de la fonction
  • 38 : on crée la chaîne qu'on va renvoyer. Elle commence par la déclaration en global de ou des variables contenues dans le fichier cache.
  • 39 : on notera l'utilisation de la fonction PHP var_export (avec comme deuxième argument true) qui formate la déclaration d'une variable en langage PHP. Elle supporte aussi bien les tableaux que les chaînes, de ce fait vous n'avez pas à vous préoccuper des problèmes liés aux guillemets simples ou doubles.
  • 66 : la chaîne $string contient au moment auquel on la renvoie ce qui sera écrit dans le fichier cache (à <?php et ?> près).


Chargement et génération du fichier


Chargement et utilisation des données


Lorsque vous souhaitez charger le fichier cache de la FAQ il vous suffit de faire : Code PHP :
$Cache->Load_file('faq');

Les variables seront directement accessibles dans les variables déclarées dans le fichier de génération.
Par exemple pour avoir la configuration de la FAQ on utilisera la variable $FAQ_CONFIG qui, telle qu'elle a été déclarée, est un tableau. On pourra y accéder directement après le chargement grâce à sa déclaration "globale".

Régénération


Pour rester dans cet exemple, lorsqu'on modifie la configuration de la FAQ, les nouvelles valeurs sont à mettre à jour dans la base de données. Mais le fichier cache n'est plus à jour. A ce moment à il faut appeler la fonction de régénération pour l'actualiser : Code PHP :
$Cache->Generate_module_file('faq');


 
Cette page a été vue 2806 fois
Annonces