2012-02-23 2 views
4

멋진 캐시 기능을 사용했지만 현재 콘텐츠가 올바르게 새로 고쳐지지 않았습니다.데이터베이스 콘텐츠 오류가있는 Smarty 캐시

나는 이러한 템플릿과 유식에 파일 캐싱을 사용

  • index.html을가 (메인 페이지 (약 8K)
  • list.html을 (약 10 페이지를 캐시하려면이 옵션을 사용하여 캐시 이것을 사용 - 약

내가 정의 CMS를) 각각 7K이 날은 새로 고쳐지지 않는 메인 페이지를 변경할 수 있도록, 내가 사용

cache_dir의 & 캐시 feac을 캐시 파일을 삭제하면 내 콘텐츠가 새로 고침되는 것을 볼 수 있기 때문에 정확하게 짚어보아야합니다.

페이지 콘텐츠를 새로 고칠 때마다 삭제하지 않고도이 파일을 쉽게 업데이트 할 수 있습니까?

답변

1

두 가지 옵션이 있습니다.

1) index.html 또는 list.html에 대한 내용을 업데이트 할 때 $smarty->clearCache("index.html");을 사용하여 Smarty에게 각 캐시를 제거하도록 지시하면 the docs을 참조하십시오.

2) 고객님의 CacheResource을 작성하십시오. 그런 다음 fetch() 및 fetchTimestamp() 메서드를 오버로드하여 일부 데이터베이스에 추가로 외부 수정 시간을 쿼리 할 수 ​​있습니다. 이 방법을 사용하면 Smarty에게 뭔가가 변경되었음을 알리는 clearCache()을 사용할 필요가 없습니다.

첫 번째 옵션은 더 간단하고 신속하게 구현할 수 있습니다. 두 번째 옵션은 글로벌 일이며 잠재적으로 추가 DB 연결에 리소스를 낭비합니다.

4

이를 사용할 수 있습니다

$Smarty = new Smarty(); 
$Smarty->caching = 1; 

$SmartyTemplate = $Smarty->createTemplate($yourfile, $your_cache_id); 
// $row = mysql_query("select date_modified from table where ... 

if ($SmartyTemplate->isCached() && $SmartyTemplate->cached->timestamp < $row['date_modified']) { 
    $Smarty->clearCache($yourfile, $your_cache_id); 
} 
$SmartyTemplate->assign('variables', 'data'); 
$SmartyTemplate->display(); 
+1

당신이 봐 [$ smarty-> force_cache] (http://www.smarty.net/docs/en/variable.force.cache.tpl을 가져야한다). 'clearCache() '를 호출하는 대신 캐시를 "수동으로"무효화하면 true로 설정하십시오. – rodneyrehm

+3

@rodneyrehm 이유는 무엇입니까? 클리어하면 클리어되어 강제로 덮어 쓰게됩니까? – EscoMaji

관련 문제