| 
									
										
										
										
											2004-04-13 11:47:32 +00:00
										 |  |  |  | <?xml version="1.0" encoding="iso-8859-1"?> | 
					
						
							|  |  |  |  | <!-- $Revision$ --> | 
					
						
							| 
									
										
										
										
											2004-11-01 18:05:10 +00:00
										 |  |  |  | <!-- EN-Revision: 1.3 Maintainer: gerald Status: ready --> | 
					
						
							| 
									
										
										
										
											2004-05-23 15:50:53 +00:00
										 |  |  |  | <sect1 id="section.template.cache.handler.func"> | 
					
						
							|  |  |  |  |  <title>Fonction de gestion du cache</title> | 
					
						
							|  |  |  |  |  <para> | 
					
						
							|  |  |  |  |   Une alternative au m<>canisme de cache par d<>faut (bas<61> sur des fichiers | 
					
						
							| 
									
										
										
										
											2004-12-26 15:03:10 +00:00
										 |  |  |  |   de cache) consiste <20> sp<73>cifier une fonction de gestion de cache utilisateur | 
					
						
							| 
									
										
										
										
											2004-05-23 15:50:53 +00:00
										 |  |  |  |   qui sera utilis<69>e pour lire, <20>crire et effacer les fichiers de cache. | 
					
						
							|  |  |  |  |  </para> | 
					
						
							|  |  |  |  |  <para> | 
					
						
							|  |  |  |  |   Il suffit de cr<63>er dans votre application une fonction que Smarty | 
					
						
							|  |  |  |  |   utilisera pour la gestion du cache et d'assigner le nom de cette | 
					
						
							| 
									
										
										
										
											2004-12-26 15:03:10 +00:00
										 |  |  |  |   fonction <20> la variable de classe | 
					
						
							| 
									
										
										
										
											2004-05-23 15:50:53 +00:00
										 |  |  |  |   <link linkend="variable.cache.handler.func">$cache_handler_func</link>. | 
					
						
							| 
									
										
										
										
											2004-12-26 15:03:10 +00:00
										 |  |  |  |   Smarty utilisera alors cette fonction pour g<>rer les donn<6E>es du cache. | 
					
						
							|  |  |  |  |   Le premier argument est l'action, qui sera 'read', 'write' ou 'clear'. | 
					
						
							|  |  |  |  |   Le second param<61>tre est l'objet Smarty. Le troisi<73>me est le contenu | 
					
						
							|  |  |  |  |   du cache. Pour <20>crire, Smarty passe le contenu du cache dans ces param<61>tres. | 
					
						
							|  |  |  |  |   Pour lire, Smarty s'attend <20> ce que votre fonction accepte ce param<61>tre | 
					
						
							|  |  |  |  |   par r<>f<EFBFBD>rence et que vous le remplissiez avec les donn<6E>es du cache. Pour effacer, | 
					
						
							|  |  |  |  |   il suffit de passer une variable fictive car cette derni<6E>re n'est pas utilis<69>e. | 
					
						
							|  |  |  |  |   Le quatri<72>me param<61>tre est le nom du fichier de template (utile pour | 
					
						
							|  |  |  |  |   lire/<2F>crire), le cinqui<75>me param<61>tre est l'identifiant de cache (optionnel) | 
					
						
							|  |  |  |  |   et le sixi<78>me est l'identifiant de compilation (optionnel). | 
					
						
							|  |  |  |  |  </para> | 
					
						
							|  |  |  |  |  <para> | 
					
						
							|  |  |  |  |   Note: Le dernier param<61>tre ($exp_time) a <20>t<EFBFBD> ajout<75> dans Smarty-2.6.0. | 
					
						
							|  |  |  |  |  </para>   | 
					
						
							|  |  |  |  |  <example> | 
					
						
							|  |  |  |  |   <title>Exemple d'utilisation de MySQL pour la source du cache</title> | 
					
						
							|  |  |  |  |   <programlisting role="php"> | 
					
						
							|  |  |  |  | <![CDATA[ | 
					
						
							|  |  |  |  | <?php | 
					
						
							| 
									
										
										
										
											2004-04-13 11:47:32 +00:00
										 |  |  |  | /* | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | exemple d'usage : | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | include('Smarty.class.php'); | 
					
						
							|  |  |  |  | include('mysql_cache_handler.php'); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | $smarty = new Smarty; | 
					
						
							| 
									
										
										
										
											2004-10-29 14:18:12 +00:00
										 |  |  |  | $smarty->cache_handler_func = 'mysql_cache_handler'; | 
					
						
							| 
									
										
										
										
											2004-04-13 11:47:32 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-10-29 11:58:15 +00:00
										 |  |  |  | $smarty->display('index.tpl'); | 
					
						
							| 
									
										
										
										
											2004-04-13 11:47:32 +00:00
										 |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | la base mysql est attendu dans ce format : | 
					
						
							| 
									
										
										
										
											2004-12-26 15:03:10 +00:00
										 |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-04-13 11:47:32 +00:00
										 |  |  |  | create database SMARTY_CACHE; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | create table CACHE_PAGES( | 
					
						
							|  |  |  |  | CacheID char(32) PRIMARY KEY, | 
					
						
							|  |  |  |  | CacheContents MEDIUMTEXT NOT NULL | 
					
						
							|  |  |  |  | ); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | */ | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-10-29 11:58:15 +00:00
										 |  |  |  | function mysql_cache_handler($action, &$smarty_obj, &$cache_content, $tpl_file=null, $cache_id=null, $compile_id=null) | 
					
						
							| 
									
										
										
										
											2004-04-13 11:47:32 +00:00
										 |  |  |  | { | 
					
						
							| 
									
										
										
										
											2004-12-26 15:03:10 +00:00
										 |  |  |  |   // l'h<>te de la bd, l'utilisateur, et le mot de passe | 
					
						
							|  |  |  |  |   $db_host = 'localhost'; | 
					
						
							|  |  |  |  |   $db_user = 'myuser'; | 
					
						
							|  |  |  |  |   $db_pass = 'mypass'; | 
					
						
							|  |  |  |  |   $db_name = 'SMARTY_CACHE'; | 
					
						
							|  |  |  |  |   $use_gzip = false; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   // cr<63>e un identifiant de cache unique | 
					
						
							|  |  |  |  |   $CacheID = md5($tpl_file.$cache_id.$compile_id); | 
					
						
							|  |  |  |  |    | 
					
						
							|  |  |  |  |   if(! $link = mysql_pconnect($db_host, $db_user, $db_pass)) { | 
					
						
							| 
									
										
										
										
											2004-10-29 11:58:15 +00:00
										 |  |  |  |  $smarty_obj->_trigger_error_msg("cache_handler: could not connect to database"); | 
					
						
							| 
									
										
										
										
											2004-12-26 15:03:10 +00:00
										 |  |  |  |     return false; | 
					
						
							|  |  |  |  |   } | 
					
						
							|  |  |  |  |   mysql_select_db($db_name); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   switch ($action) { | 
					
						
							|  |  |  |  |     case 'read': | 
					
						
							|  |  |  |  |       // r<>cup<75>re le cache dans la base de donn<6E>es | 
					
						
							|  |  |  |  |       $results = mysql_query("select CacheContents from CACHE_PAGES where CacheID='$CacheID'"); | 
					
						
							|  |  |  |  |       if(!$results) { | 
					
						
							|  |  |  |  |         $smarty_obj->_trigger_error_msg("cache_handler: query failed."); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       $row = mysql_fetch_array($results,MYSQL_ASSOC); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       if($use_gzip && function_exists("gzuncompress")) { | 
					
						
							|  |  |  |  |         $cache_content = gzuncompress($row["CacheContents"]); | 
					
						
							|  |  |  |  |       } else { | 
					
						
							|  |  |  |  |         $cache_content = $row["CacheContents"]; | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       $return = $results; | 
					
						
							|  |  |  |  |       break; | 
					
						
							|  |  |  |  |     case 'write': | 
					
						
							|  |  |  |  |       // sauvegarde le cache dans la base de donn<6E>es | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       if($use_gzip && function_exists("gzcompress")) { | 
					
						
							|  |  |  |  |         // compresse le contenu pour gagner de la place | 
					
						
							|  |  |  |  |         $contents = gzcompress($cache_content); | 
					
						
							|  |  |  |  |       } else { | 
					
						
							|  |  |  |  |         $contents = $cache_content; | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       $results = mysql_query("replace into CACHE_PAGES values( | 
					
						
							|  |  |  |  |                                               '$CacheID', | 
					
						
							|  |  |  |  |                                               '".addslashes($contents)."') | 
					
						
							|  |  |  |  |                                               "); | 
					
						
							|  |  |  |  |       if(!$results) { | 
					
						
							|  |  |  |  |         $smarty_obj->_trigger_error_msg("cache_handler: query failed."); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       $return = $results; | 
					
						
							|  |  |  |  |       break; | 
					
						
							|  |  |  |  |     case 'clear': | 
					
						
							|  |  |  |  |       // efface les donn<6E>es du cache | 
					
						
							|  |  |  |  |       if(empty($cache_id) && empty($compile_id) && empty($tpl_file)) { | 
					
						
							|  |  |  |  |         // les efface toutes | 
					
						
							|  |  |  |  |         $results = mysql_query("delete from CACHE_PAGES"); | 
					
						
							|  |  |  |  |       } else { | 
					
						
							|  |  |  |  |         $results = mysql_query("delete from CACHE_PAGES where CacheID='$CacheID'"); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       if(!$results) { | 
					
						
							|  |  |  |  |         $smarty_obj->_trigger_error_msg("cache_handler: query failed."); | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  |       $return = $results; | 
					
						
							|  |  |  |  |       break; | 
					
						
							|  |  |  |  |     default: | 
					
						
							|  |  |  |  |       // erreur, action inconnue | 
					
						
							|  |  |  |  |       $smarty_obj->_trigger_error_msg("cache_handler: unknown action \"$action\""); | 
					
						
							|  |  |  |  |       $return = false; | 
					
						
							|  |  |  |  |       break; | 
					
						
							|  |  |  |  |   } | 
					
						
							|  |  |  |  |   mysql_close($link); | 
					
						
							|  |  |  |  |   return $return; | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-04-13 11:47:32 +00:00
										 |  |  |  | } | 
					
						
							|  |  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-10-29 11:58:15 +00:00
										 |  |  |  | ?> | 
					
						
							|  |  |  |  | ]]> | 
					
						
							|  |  |  |  | </programlisting> | 
					
						
							| 
									
										
										
										
											2004-05-23 15:50:53 +00:00
										 |  |  |  |   </example> | 
					
						
							|  |  |  |  |  </sect1> | 
					
						
							|  |  |  |  |  <!-- Keep this comment at the end of the file
 | 
					
						
							|  |  |  |  |  Local variables: | 
					
						
							|  |  |  |  |  mode: sgml | 
					
						
							|  |  |  |  |  sgml-omittag:t | 
					
						
							|  |  |  |  |  sgml-shorttag:t | 
					
						
							|  |  |  |  |  sgml-minimize-attributes:nil | 
					
						
							|  |  |  |  |  sgml-always-quote-attributes:t | 
					
						
							|  |  |  |  |  sgml-indent-step:1 | 
					
						
							|  |  |  |  |  sgml-indent-data:t | 
					
						
							|  |  |  |  |  indent-tabs-mode:nil | 
					
						
							|  |  |  |  |  sgml-parent-document:nil | 
					
						
							|  |  |  |  |  sgml-default-dtd-file:"../../../../manual.ced" | 
					
						
							|  |  |  |  |  sgml-exposed-tags:nil | 
					
						
							|  |  |  |  |  sgml-local-catalogs:nil | 
					
						
							|  |  |  |  |  sgml-local-ecat-files:nil | 
					
						
							|  |  |  |  |  End: | 
					
						
							|  |  |  |  |  vim600: syn=xml fen fdm=syntax fdl=2 si | 
					
						
							|  |  |  |  |  vim: et tw=78 syn=sgml | 
					
						
							|  |  |  |  |  vi: ts=1 sw=1 | 
					
						
							|  |  |  |  |  --> |