smarty template engine
Thursday, November 20, 2008  
download | documentation | faq | forum | mailing lists | changelog | contribs 


search for in the  


Fungsi Pengendali Cache

Sebagai alternatif untuk menggunakan mekanisme cache berbasis-file standar, anda bisa menetapkan fungsi penanganan cache kustom yang akan digunakan untuk membaca, menulis dan membersihkan file yang di-cache.

Buat sebuah fungsi dalam aplikasi anda yang akan digunakan Smarty sebagai pengendali cache. Set namanya dalam variabel kelas $cache_handler_func . Smarty sekarang akan menggunakan ini untuk menangani data yang di-cache.

  • Argumen pertama adalah aksi, yang akan berupa salah satu dari read, write dan clear.

  • Parameter kedua adalah obyek Smarty.

  • Paremeter ketiga adalah konten yang di-cache. Setelah menulis, Smarty mengoper konten yang di-cache dalam parameter ini. Setelah membaca, Smarty mengharapkan fungsi anda untuk menerima parameter ini dengan referensi dan menempatkannya dengan data yang di-cache. Setelah membersihkan, mengoper variabel dummy di sini karena ia tidak digunakan.

  • Parameter ke empat adalah nama file template , diperlukan untuk membaca/menulis.

  • Parameter ke lima adalah opsional $cache_id.

  • Parameter ke enam adalah opsional $compile_id.

  • Parameter ke tujuh dan parameter terakhir $exp_time ditambahkan dalam Smarty-2.6.0.

Teladan 15-5. Contoh menggunakan MySQL sebagai sumber cache

<?php
/**************************************************
contoh pemakaian:

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

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

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


database mysql diharapkan dalam format ini:

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 dan sandi di sini
    
$db_host 'localhost';
    
$db_user 'myuser';
    
$db_pass 'mypass';
    
$db_name 'SMARTY_CACHE';
    
$use_gzip false;

    
// buat id cache unik
    
$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':
            
// baca cache dari 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':
            
// simpan cache ke 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:
            
// salah, aksi tidak dikenal
            
$smarty_obj->_trigger_error_msg("cache_handler: unknown action \"$action\"");
            
$return false;
            break;
    }
    
mysql_close($link);
    return 
$return;

}

?>



 

credits 

Smarty Copyright © 2002-2008
New Digital Group, Inc.

All rights reserved.