What is Smarty?
Why use it?
Use Cases and Work Flow
Syntax Comparison
Template Inheritance
Best Practices
Crash Course
You may use the Smarty logo according to the trademark notice.
For sponsorship, advertising, news or other inquiries, contact us at:
Usted puede tener multiples archivos de cache para una simples llamada de display() o fetch(). Vamos a decir que una llamada a display('index.tpl') debe tener varios contenidos de salida diferentes dependiendo de alguna condición, y usted quiere separar los caches para cada una. Usted puede hacer esto pasando un cache_id como un segundo parámetro en la llamada de la función.
Example 14.6. Pasando un cache_id para display()
<?php require('Smarty.class.php'); $smarty = new Smarty; $smarty->caching = true; $my_cache_id = $_GET['article_id']; $smarty->display('index.tpl',$my_cache_id); ?>
Arriba, nosotros pasamos la variable $my_cache_id a display() con el cache_id. Para cada valor unico de $my_cache_id, un cache por separado sera generado para cada index.tpl. En este ejemplo, "article_id" fue pasado en URL y es usado como el cache_id.
Tenga mucho cuidado cuando pase valores del cliente (web browser) dentro de Smarty (o alguna aplicación PHP). Aunque el ejemplo de arriba usar el article_id desde una URL parece facil, esto podría tener fatales consecuencias. El cache_id es usado para crear un directorio en el sistema de archivos, entonces si el usuario decide pasar un valor extremadamente largo para article_id, o escribir un script que envia article_ids aleatorios en un paso rápido, esto posiblemente podría causar problemas a nivel del servidor. Tenga la certeza de limpiar algún dato pasado antes de usarlo. En este ejemplo, tal vez usted sabia que el article_id tiene un largo de 10 caracteres este es constituido solamente de alfanuméricos, y debe ser un article_id valido en la base de datos. Verifique esto!
Asegurarse de pasar el mismo cache_id como el segundo parámetro para is_cached() y clear_cache().
Example 14.7. Pasando un cache_id para is_cached()
<?php require('Smarty.class.php'); $smarty = new Smarty; $smarty->caching = true; $my_cache_id = $_GET['article_id']; if(!$smarty->is_cached('index.tpl',$my_cache_id)) { // No cache available, do variable assignments here. $contents = get_database_contents(); $smarty->assign($contents); } $smarty->display('index.tpl',$my_cache_id); ?>
Usted puede limpar todos los caches para un cache_id en particular pasando el primer parámetro null a clear_cache()..
Example 14.8. Limpando todos los caches para un cache_id en particular
<?php require('Smarty.class.php'); $smarty = new Smarty; $smarty->caching = true; // clear all caches with "sports" as the cache_id $smarty->clear_cache(null,"sports"); $smarty->display('index.tpl',"sports"); ?>
De esta manera, usted puede "agrupar" sus caches conjuntamente dando les el mismo cache_id.