Smarty 고급 응용 캐 시 조작 기법 분석

5232 단어 Smarty캐 시
이 사례 는 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 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기