Multipel Caches Per Halaman
Anda dapat memiliki multipel file cache untuk satu panggilan ke
display()
atau fetch().
Katakanlah sebuah panggilan ke display('index.tpl')
memiliki beberapa konten output berbeda tergantung dari beberapa
kondisi, dan anda ingin memisahkan cache masing-masing. Anda bisa
melakukan ini dengan mengirimkan $cache_id
sebagai parameter kedua ke fungsi panggil.
Mengirimkan $cache_id untuk display()
caching = 1;
$my_cache_id = $_GET['article_id'];
$smarty->display('index.tpl', $my_cache_id);
?>
]]>
Di atas, kita mengirimkan variabel $my_cache_id ke
display()
sebagai $cache_id. Untuk setiap nilai unik dari
$my_cache_id, cache terpisah akan dibuat untuk
index.tpl. Dalam contoh ini,
article_id dikirimpan dalam URL dan digunakan
sebagai $cache_id.
Catatan Teknis
Harap berhati-hati saat mengirimkan nilai dari klien (web browser) ke
dalam Smarty atau setiap aplikasi PHP. Meskipun contoh di atas menggunakan
article_id dari URL terlihat mudah, ia dapat menimbulkan konsekuensi yang
buruk. $cache_id dipakai untuk membuat direktori
pada sistem file, maka jika pengguna memutuskan untuk mengirimkan nilai
yang sangat besar untuk article_id, atau menulis naskah yang mengirimkan
article_id acak dengan kecepatan tinggi, ini mungkin dapat menimbulkan
masalah di tingkat server. Pastikan mengamankan setiap data yang
dikirimkan sebelum menggunakannya. Dalam contoh ini, mungkin anda
mengetahui article_id memiliki panjang sepuluh karakter dan hanya terdiri
dari alfa-numerik, dan harus article_id yang benar dalam database.
Periksa hal ini!
Pastikan untuk mengirimkan $cache_id yang sama
sebagai parameter kedua ke
is_cached() dan
clear_cache().
Mengirimkan cache_id ke is_cached()
caching = 1;
$my_cache_id = $_GET['article_id'];
if(!$smarty->is_cached('index.tpl',$my_cache_id)) {
// Cache tidak tersedia, lakukan penempatan variabel di sini.
$contents = get_database_contents();
$smarty->assign($contents);
}
$smarty->display('index.tpl',$my_cache_id);
?>
]]>
Anda bisa membersihkan semua cache untul $cache_id
tertentu dengan mengirimkan &null; sebagai parameter kedua ke
clear_cache().
Membersihkan semua cache untuk $cache_id tertentu
caching = 1;
// bersihkan semua cache dengan "sports" sebagai $cache_id
$smarty->clear_cache(null,'sports');
$smarty->display('index.tpl','sports');
?>
]]>
Dengan cara ini, anda bisa mengelompokan cache anda bersama
dengan memberikannya $cache_id yang sama.