Smarty 고급 응용 캐 시 조작 기법 분석
스마트 캐 시 제어
스마트 는 강력 한 캐 시 기능 을 제공 합 니 다.그러나 때때로 우 리 는 전체 문서 가 캐 시 되 는 것 을 원 하지 않 고 선택 한 캐 시 일부 내용 이나 일부 내용 이 캐 시 되 지 않 는 다.예 를 들 어 페이지 상단 에 광고 줄 위치 가 있 는 템 플 릿 을 사용 합 니 다.광고 줄 은 HTML,이미지,FLASH 등 혼합 정 보 를 포함 할 수 있 습 니 다.따라서 정적 링크 를 사용 할 수 없 으 며 캐 시 되 는 것 도 원 하지 않 습 니 다.insert 함수 에서 지정 하고 광고 줄 의 내용 정 보 를 가 져 오 는 함수 가 필요 합 니 다.스마트 도 이런 캐 시 제어 능력 을 제공 했다.
템 플 릿 의 일부분 을 캐 시 하지 않도록{insert}을 사용 할 수 있 습 니 다.
$smarty->register 사용 가능function($params,&$smarty)플러그 인 이 캐 시 에서 출력 되 는 것 을 막 습 니 다.
$smarty->register 도 사용 가능block($params,&$smarty)은 전체 페이지 의 한 조각 을 캐 시 하지 않 습 니 다.
다음은 캐 시 출력 을 제어 하 는 세 가지 방법 에 대한 간단 한 수 요 를 설명 합 니 다.
수요:캐 시 된 문서 의 현재 시간 은 캐 시 되 지 않 습 니 다.새로 고침 할 때마다 변 합 니 다.
1.insert 함 수 를 사용 하여 템 플 릿 의 일부분 을 캐 시 하지 않 습 니 다.
index.tpl:
<div>{insert name="get_current_time"}</div>
index.php
function insert_get_current_time(){
return date("Y-m-d H:m:s");
}
$smarty=new smarty();
$smarty->caching = true;
if(!$smarty->is_cached()){
.......
}
$smarty->display('index.tpl');
주석:함수 이름 형식 을 정의 합 니 다.
inser_name(array $params, object &$smarty),
함수 매개 변 수 를 선택 할 수 있 습 니 다.템 플 릿 의 insert 방법 에 다른 속성 을 추가 하려 면 배열 로 사용자 에 게 정 의 된 함수 로 전 달 됩 니 다.예:
{insert name='get_current_time' local='zh'}
get 에서current_time 함수 에서 우 리 는$params[local]을 통 해 속성 치 를 얻 을 수 있 습 니 다.하면,만약,만약...current_time 함수 에서 현재 smarty 대상 의 방법 이나 속성 을 사용 하면 두 번 째 매개 변 수 를 통 해 얻 을 수 있 습 니 다.
이 때 index.tpl 이 캐 시 되 어 있 는 것 을 발견 할 수 있 지만,현재 시간 은 매번 새로 고침 에 따라 끊임없이 변화 하고 있 습 니 다.
2,register 사용function 플러그 인 이 캐 시 에서 출력 되 는 것 을 막 습 니 다.
index.tpl:
<div>{current_time}{/div}
index.php:
function smarty_function_current_time($params, &$smarty){
return date("Y-m-d H:m:s");
}
$smarty=new smarty();
$smarty->caching = true;
$smarty->register_function('current_time','smarty_function_current_time',false);
if(!$smarty->is_cached()){
.......
}
$smarty->display('index.tpl');
주석:함수 이름 형식:smartytype_name($params, &$smarty)
type 은 function
name 사용자 정의 탭 이름,여기{currenttime}
두 매개 변 수 는 필수 입 니 다.함수 에 사용 되 지 않 더 라 도 적어 야 합 니 다.두 매개 변수의 기능 이 같다.
3、register 사용블록 은 전체 페이지 의 한 조각 을 캐 시 되 지 않 게 합 니 다.
index.tpl:
<div align='center'>
Page created: {"0"|date_format:"%D %H:%M:%S"}
{dynamic}
Now is: {"0"|date_format:"%D %H:%M:%S"}
... do other stuff ...
{/dynamic}
</div>
index.php:
function smarty_block_dynamic($param, $content, &$smarty) {
return $content;
}
$smarty = new Smarty;
$smarty->caching = true;
$smarty->register_block('dynamic', 'smarty_block_dynamic', false);
if(!$smarty->is_cached()){
.......
}
$smarty->display('index.tpl');
주석:함수 이름 형식:smartytype_name($params, &$smarty)
type 은 block
name 사용자 정의 탭 이름 입 니 다.{dynamic}
두 매개 변 수 는 필수 입 니 다.함수 에 사용 되 지 않 더 라 도 적어 야 합 니 다.두 매개 변수의 기능 이 같다.
4.총화
(1)캐 시 에 대한 제어 능력:
register 사용function 과 registerblock 은 플러그 인 출력 을 편리 하 게 제어 할 수 있 는 버퍼 능력 입 니 다.세 번 째 매개 변 수 를 통 해 캐 시 여 부 를 제어 할 수 있 습 니 다.기본 값 은 캐 시 입 니 다.false 로 설정 해 야 합 니 다.테스트 에서 보 여 준 것 처럼
$smarty->register_function('current_time','smarty_function_current_time',false);
insert 함 수 는 기본적으로 캐 시 되 지 않 습 니 다.그리고 이 속성 은 수정 할 수 없습니다.그런 의미 에서 insert 함수 가 캐 시 에 대한 제어 능력 이 register 보다 못 한 것 같 습 니 다.function 과 register블록 이 강하 다.(2)사용 편의 성:
하지만 insert 함수 사용 이 편리 합 니 다.등록 을 표시 하지 않 아 도 됩 니 다.현재 요청 과정 에 이 함수 smarty 를 포함 하면 현재 요청 과정 에서 지정 한 함 수 를 자동 으로 찾 을 수 있 습 니 다.
물론 registerfunction 도 실행 되 지 않 을 때 등록 을 표시 할 수 있 습 니 다.그러나 그렇게 하 는 효 과 는 다른 모드 함수 와 마찬가지 로 모두 캐 시 되 어 제어 할 수 없다.
실행 중 호출 register 를 표시 합 니 다.function 사용자 정의 함 수 를 등록 하려 면 is 를 호출 해 야 합 니 다.cached()방법 전에 함수 등록 작업 을 완료 합 니 다.
그렇지 않 으 면 iscached()이 캐 시 문 서 는 등록 함 수 를 찾 지 못 해 smarty 오류 가 발생 합 니 다.
Smarty 사용자 정의 함수 인 스 턴 스
<?php
$smarty->register_function('date_now', 'print_current_date');
function print_current_date($params, &$smarty)
{
if(empty($params['format'])) {
$format = "%b %e, %Y";
} else {
$format = $params['format'];
}
return strftime($format,time());
}
?>
템 플 릿 에서 사용
{date_now}
{* or to format differently *}
{date_now format="%Y/%m/%d"}
더 많은 스마트 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.이 글 은 스마트 템 플 릿 을 기반 으로 한 PHP 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
관리 화면에서 자신의 검증기 데이터 정의CS-Cart는 기본 양식 검증 데이터를 미리 준비합니다. 하지만 자신의 검증을 만들고 싶은 장면은 많다. 그래서 오리지널 검증의 설치 방법을 설명해 드리겠습니다. 예) 입력한 값이 5자 이내인지 확인합니다. 이름:...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.