Comunitatea PHP Romania
 

 
Cache Handler Function

Cache Handler Function

As an alternative to using the default file-based caching mechanism, you can specify a custom cache handling function that will be used to read, write and clear cached files.

Create a function in your application that Smarty will use as a cache handler. Set the name of it in the $cache_handler_func class variable. Smarty will now use this to handle cached data.

  • The first argument is the action, which will be one of read, write and clear.

  • The second parameter is the Smarty object.

  • The third parameter is the cached content. Upon a write, Smarty passes the cached content in these parameters. Upon a read, Smarty expects your function to accept this parameter by reference and populate it with the cached data. Upon a clear, pass a dummy variable here since it is not used.

  • The fourth parameter is the name of the template file, needed for read/write.

  • The fifth parameter is the optional $cache_id.

  • The sixth is the optional $compile_id.

  • The seventh and last parameter $exp_time was added in Smarty-2.6.0.

Example 15-5. Example using MySQL as a cache source

<?php
/**************************************************
example usage:

include('Smarty.class.php');
include('mysql_cache_handler.php');

$smarty = new Smarty;
$smarty->cache_handler_func = 'mysql_cache_handler';

$smarty->display('index.tpl');


mysql database is expected in this format:

create database SMARTY_CACHE;

create table CACHE_PAGES(
CacheID char(32) PRIMARY KEY,
CacheContents MEDIUMTEXT NOT NULL
);

**************************************************/

function mysql_cache_handler($action, &$smarty_obj, &$cache_content$tpl_file=null$cache_id=null$compile_id=null$exp_time=null)
{
    
// set db host, user and pass here
    
$db_host 'localhost';
    
$db_user 'myuser';
    
$db_pass 'mypass';
    
$db_name 'SMARTY_CACHE';
    
$use_gzip false;

    
// create unique cache id
    
$CacheID md5($tpl_file.$cache_id.$compile_id);

    if(! 
$link mysql_pconnect($db_host$db_user$db_pass)) {
        
$smarty_obj->_trigger_error_msg('cache_handler: could not connect to database');
        return 
false;
    }
    
mysql_select_db($db_name);

    switch (
$action) {
        case 
'read':
            
// read cache from database
            
$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':
            
// save cache to database

            
if($use_gzip && function_exists("gzcompress")) {
                
// compress the contents for storage efficiency
                
$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':
            
// clear cache info
            
if(empty($cache_id) && empty($compile_id) && empty($tpl_file)) {
                
// clear them all
                
$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:
            
// error, unknown action
            
$smarty_obj->_trigger_error_msg("cache_handler: unknown action \"$action\"");
            
$return false;
            break;
    }
    
mysql_close($link);
    return 
$return;

}

?>

Ultimele discutii in forum RSS Forum

Ultimele articole Ultimele articole

Top membri

Pirahna Pirahna
la birou
carco carco
Bucuresti
Birkoff Birkoff
Bucuresti
Mascka Mascka
Braila
raul_ raul_
whooper whooper
Toronto ON
mihaitha mihaitha
Sibiu
gabysolomon gabysolomon
Bacau
oriceon oriceon
Constanta
garlicinicolae garlicinicolae

Newsletter


Email:
 inscriere
 renuntare
 
 Arhiva newsletter

Parteneriat

Copyright © 2001-2008 PHP Romania Add PHPRomania to Google Add PHPRomania to Del.icio.us Add PHPRomania to Stumbleupon Add PHPRomania to Yahoo! Add PHPRomania to Digg Add PHPRomania to Blink Free mobile phone's stuffs | Comprar vivienda Denia | Loans | Homeowner Loan | Custom software development
Ads: Partener Way2Web Nework: gazduire web | inregistrare domenii | web design | imobiliare | web hosting
Powered by Simplis