Get Smarty

Donate

Paypal

Smarty Icon

You may use the Smarty logo according to the trademark notice.

Smarty Template Engine Smarty Template Engine

For sponsorship, advertising, news or other inquiries, contact us at:

Sites Using Smarty

Advertisement

Función manipuladora de cache

Como una alternativa al uso del mecanismo de caching por default basado en archivo, usted puede especificar una función habitual de manipulación de cache que será usada para leer, escribir y limpar archivos de cache.

Cree una función en su aplicación para que Smarty la use como un manipulador de cache. Defina el nombre de la variable de clase en el $cache_handler_func. El Smarty ahora usara esta para manipular datos en el cache. El primer parámetro es la acción, que puede ser uno de estos 'read', 'write' y 'clear'. El segundo parámetro es el objeto de Smarty. El tercer parámetro es el contenido que esta en el cache. Sobre 'write', el Smarty pasa el contenido en cache en estos parámetros. sobre 'read', el Smarty espera que su función acepte este parámetro por referencia y poblar estos con los datos en cache. Sobre 'clear', el Smarty pasa una variable en cero desde aquí que esta no es usada. El cuarto parámetro es el nombre del archivo de template(necesario para leer/escribir). El quinto parámetro es la cache_id (opcional). El sexto parámetro es la compile_id (opcional).

NOTA: El ultimo parámetro ($exp_time) fue adicionado en el Smarty-2.6.0.

Example 15.5.  ejemplo usando MySQL como una fuente de cache


<?php
/*

ejemplo de uso:

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;
	
}

?>


Comments
No comments for this page.

Advertisement

Sponsors [info]

Sponsors