Smarty FAQ önbelleklenebilecek parçaları işlemek için bir yol önerir, ancak bu kadar ön yerine düzgün şeyler kapsül haline tonlarca iş yapmak için her sayfa kontrolörü ihtiyacı var.
Biz böyle bir şey yapabilirsiniz bir sahne almak istiyorum:
<div id="header">
{our_categories}
{our_subcategories category=$current_category}
</div>
our_
öneki fonksiyonlarının çıkışı sadece adlandırılmış parametreleri dayanarak, tamamen önbelleklenebilecek olmalıdır (eğer varsa). Daha fazla şablonu {our_categories}
sevk ederse, hepsi başvurmalıdır önbelleğe alınan aynı içerik.
(Muhtemelen biz {insert name="..."}
kullanarak ve kendi işlevlerini kadar kodlama çalıştı söz değer, ama sonuç önbelleklenebilir değildi ve biz oldukça Smarty şablon işleme istifade daha retunred el-marş HTML sona erdi. )
Bu bizim ilk çatlak özel bir işlev smarty_function_our_categories
kullanır, ancak önbelleğe alma korkunç yanlış gidiyor. İşte bizim işlevi gibi görünüyor:
function smarty_function_our_categories($params, &$smarty) {
$smarty->caching = 2;
$smarty->cache_lifetime = 3600; # 1 hour
if (!$smarty->is_cached(...)) {
// ... do db access to fetch data for template...
$smarty->assign(....);
}
return $smarty->fetch(...);
}
Sorun: Bir işlev içinde $smarty->fetch()
çağırarak bu kaybetmeyeceksiniz yapma, smarty karıştırır hangi şablonları eklemek-etiketleri var, ve hangi yok. Bizim durumumuzda bu: Sonuç Smarty önbellekli içeriği (. "Olmayan bazı önbelleği {insert ...}
çağrısı sonuçları ile bu yerini söylemek için orada koyar belirteçler) kadar hizmet olduğunda bazı belirteçleri yerine unutması bu iyi değil - md5 sağlama bir çift ve bizim ana menü olması gereken bir php-serialized hatıra gösteren sitemizde ile kendini gösterir.
Biz bizim bileşenleri yapıyolar nasıl bir hata yaptık, bu yüzden soru sonunda olur varsayalım:
Nasıl güvenli bir şekilde kendini işlemek için Smarty kullanarak bir önbelleğe alma bileşeni oluşturmak mı?