2009-06-06 7 views
2

내 프로젝트에서 Smarty를 사용하고 있는데 캐싱을 사용하면 작동하지 않는 것 같습니다. 나는 다음과 같은 구조를 사용하고 있습니다 : - 디스플레이 (한편, index.tpl)Smarty 캐시가 작동하지 않습니까?

한편, index.tpl -

의 index.php를

모듈 = 제품 { 파일 = $의 page_center을 포함} - $ smarty-> assign ("page_center", "product.tpl");

product.php에서 product.tpl 템플릿은 index.tpl의 가운데에로드해야합니다. 캐싱을 사용하면 product.tpl이 아닌 기본 콘텐츠가 계속 표시됩니다. 캐싱이 비활성화되면 제대로 작동합니다. 캐싱을 사용할 때의 문제점은 무엇입니까?

답변

7

당신은 올바르게 작동하도록 각 페이지에 대해 고유 한 캐시 ID를 사용해야합니다, 그것은 감각을 만들 수있는 쿼리에서 모듈 이름을 사용

$cacheID = 'some_unique_value_for_this_page'; 
$smarty->assign('page_center', 'product.tpl'); 
$smarty->display('index.tpl', $cacheID); 

당신이 질문에 준 예를 감안할를 문자열을 캐시 ID의 기초로 사용하십시오.

스마티 설명서에 대한 자세한 정보가있다 : http://www.smarty.net/manual/en/api.display.php

+0

확인. 나는 그것을 테스트하지만 그것은 불행히도 beacause 모듈을 호출 할 때마다 cache 디렉토리에 새로운 cach 파일이 생성 될 때마다 도움이되지 않는다. $ smarty-> force_compile을 사용하는 것과 같다. 이 방법은 올바른 생각으로 나는 생각하지 않습니다. – mehdi

+0

지금은 오래된 주제이지만 해당 페이지에 고유 한 값을 사용하면 작업이 수행됩니다. 예를 들어 제품에 제품 ID 번호가있는 경우이를 고유 한 cacheID 값으로 사용하십시오. Smarty는 특정 제품 페이지의 템플릿을 컴파일하고 캐시 한 다음 나중에 참조 할 때마다 캐시 된 버전을 참조합니다. – Rohaq

+0

내 언어 기반 캐싱 솔루션 ($ cache_id = $ lng_id). 감사! –

0

당신이 동적 모듈을 만들 필요가있다! 캐싱이 발생하지 않은 경우

function smarty_block_dynamic($param, $content, &$smarty) { 
    return $content; 
} 

$smarty = new Smarty 
$smarty->register_block('dynamic', 
         'smarty_block_dynamic', 
         false /* this block wont be cached */); 

와 유식 캐싱 문제를 해결하기 위해 노력하기 전에 TPL

Hello {$name} 

this is your las update 

{/dyamic} 
{include file="some/dynamic/thing.tpl"} 
{/dynamic} 
0

, 즉, 당신의 templates_c 폴더는 읽기 여부를 확인하고 적어주세요 모두에게 사용 권한