>  기사  >  백엔드 개발  >  PHP 템플릿 엔진의 두 번째 내장 기능인 smarty

PHP 템플릿 엔진의 두 번째 내장 기능인 smarty

黄舟
黄舟원래의
2016-12-20 10:56:551337검색

Smarty에는 일부 내장 함수가 있습니다.
내장 함수는 템플릿 언어의 일부입니다.
사용자는 내장 함수와 동일한 이름을 가진 사용자 정의 함수를 생성할 수 없으며 내장 함수를 수정할 수도 없습니다.
(#capture 함수, config_load, foreach, foreachelse, include, include_php 및 기타 내장 함수는 PHP 템플릿 엔진 smarty 튜토리얼 항목의 내장 함수 중 하나를 참조하세요.)
insert
if, elseif, else
ldelim, rdelim
literal
php
section,sectionelse
strip

insert
속성 유형에 기본값이 있어야 하는지 여부 값 설명
이름 문자열 예 해당 없음 삽입 함수 이름
할당 문자열 아니요 해당 없음 이 속성은 삽입할 함수의 출력을 저장하는 변수를 지정합니다.
스크립트 문자열 아니요 해당 없음 함수를 삽입하기 전에 포함되어야 하는 PHP 스크립트의 이름

[var ...] [ var type] 아니요 해당 없음 삽입할 함수에 전달된 로컬 매개변수

Insert 함수는 inluce 함수와 유사하지만, insert에 포함된 내용이 캐시되지 않고 템플릿이 호출될 때마다 다시 실행된다는 점이 다릅니다.

예를 들어, 페이지 상단에 광고 배너 위치가 있는 템플릿을 사용하면 광고 배너에 HTML, 이미지, FLASH 등과 같은 혼합 정보가 포함될 수 있습니다. 따라서 여기에서는 정적 링크를 사용할 수 없으며 우리는 또한 광고 배너를 캐시하려면 삽입 함수에 #banner_location_id# 및 #site_id# 값(구성 파일에서 가져옴)을 지정해야 하며, 광고 배너의 콘텐츠 정보를 가져오는 함수가 필요합니다. 🎜>
삽입 기능 데모
{* 배너 가져오기 예 *} {insert name="getBanner"lid=#banner_location_id# sid=#site_id#}

이 예에서는 다음을 사용합니다. getBanner를 이름 속성으로 지정하면 #banner_location_id# 및 #site_id# 매개변수가 모두 전달됩니다. 다음으로 Smarty는 PHP 프로그램에서 insert_getBanner()라는 함수를 검색하여 #banner_location_id# 및 #site_id# 값을 결합합니다. 첫 번째 매개변수는 함수 이름 지정 혼란을 피하기 위해 insert_로 시작해야 합니다. insert_getBanner() 함수는 전달된 매개변수를 기반으로 실행되고 실행 결과를 반환합니다. 결과는 함수가 호출되는 위치에 표시됩니다. 이 예에서 Smarty는 insert_getBanner(array("lid"=>"12345","sid"=>67890"));와 같은 함수를 호출하고


Assign 속성이 설정된 경우 이 속성에 해당하는 변수 이름을 사용하여 포함될 함수의 출력을 저장합니다. 참고: 템플릿 변수에 할당된 출력 정보는 캐싱 시에도 유효하지 않습니다.

script 속성을 지정하면 script에서 지정한 PHP 스크립트가 한 번만 포함됩니다. ) 함수를 호출하고 실행하기 전에 호출된 함수가 존재하지 않는 것을 방지하기 위한 것입니다. 함수가 포함된 PHP 스크립트를 먼저 호출하면 이러한 상황을 피할 수 있습니다.

스마트 개체가 의 두 번째 매개변수로 전달됩니다. 함수이며, 포함될 함수에서 $this를 통해 스마트 객체 정보에 접근 및 수정이 가능합니다.
기술적 포인트: 템플릿의 일부를 캐시하지 않도록 설정하면 삽입 기능이 캐시되지 않습니다. . 캐시된 페이지에서도 페이지가 호출될 때마다 동적으로 로드됩니다. 이 기능은 광고 배너, 투표, 실시간 일기예보, 검색 결과, 피드백 정보 및 기타 영역에서 널리 사용될 수 있습니다. 🎜>if,elseif,else

Smarty의 if 문은 PHP의 if 문만큼 유연하고 사용하기 쉬우며 if가 /if와 쌍으로 표시되어야 하는 템플릿 엔진에 적합한 여러 기능을 추가했습니다. Else 및 elseif 절을 사용할 수 있습니다: eq, ne, neq, gt, lt, lte, le, gte, ge, is even, is 홀수, is not even, is not 홀수, not , mod, div by, even by, 홀수 by, ==, !=, >, <, <=, >= 이러한 수정을 사용하세요. 단어는 변수나 상수와 공백으로 구분되어야 합니다. 데모 {if $name eq "Fred"} 선생님 환영합니다.{elseif $name eq "Wilma"} 선생님 환영합니다.{else} 무엇이든 환영합니다.{/if}{* "or" 논리를 사용한 예 * }{if $name eq "Fred" or $name eq "Wilma"} ...{/if}{* 위와 동일 *}{if $ name == "Fred" || ...{/if}{* 다음 구문은 작동하지 않습니다. 조건부 한정자는 주변 요소와 공백으로 구분되어야 합니다. *}{if $name== "Fred" || {/if}{* 괄호가 허용됩니다. *}{if ( $amount < 0 or $amount > 1000 ) and $volume >= #minVolAmt #} ...{/if}{* PHP를 삽입할 수도 있습니다. 함수 호출 *}{if count($var) gt 0} ...{/if}{* 값이 짝수인지 홀수인지 테스트 *}{$var가 짝수인 경우} ...{/if}{if $var가 홀수입니다} ...{/if}{if $var가 홀수가 아닌 경우} ...{/if}{* var가 4로 나누어지는지 테스트 *}{if $var가 4로 나누어지는 경우} ... {/if}{* var가 짝수인지 테스트합니다. 즉, 0=짝수, 1=짝수, 2=홀수, 3=홀수, 4=짝수, 5=짝수 등입니다. *}{if $var 2만큼 짝수} ...{/if}{* 0=짝수, 1=짝수, 2=짝수, 3=홀수, 4=홀수, 5= 홀수 등. *}{$var가 3만큼 짝수인 경우 } ...{/if}

ldelim,rdelim
ldelim 및 rdelim은 중괄호 "{" 및 "}"인 구분 기호를 출력하는 데 사용됩니다. 템플릿 엔진은 항상 중괄호 안의 내용을 해석하려고 시도하므로 중괄호를 출력해야 하는 경우 이 방법을 사용하세요.
ldelim, rdelim을 사용하여 {* 템플릿에서 리터럴 구분 기호를 인쇄합니다. *}{ldelim}funcname{rdelim}은 Smarty에서 함수가 표시되는 방식입니다. 출력 결과: {funcname}은 함수가 표시되는 방식입니다. Smarty를 보세요!


literal
Literal 레이블 영역의 데이터는 텍스트로 처리되며 템플릿은 내부의 모든 문자 정보를 무시합니다. 문자 정보와 같은 중괄호 JavaScript 스크립트가 포함되어 있으면 템플릿 엔진이 이를 분석하여 직접 표시하지 않습니다.

리터럴 태그 데모
{literal}

{ /literal}

php

php 태그를 사용하면 PHP 스크립트를 템플릿에 직접 포함할 수 있습니다. 이러한 명령문이 처리되는지 여부는 일반적으로 $php_handling 설정에 따라 다릅니다. 물론 사용할 필요는 없습니다. 이 기능을 잘 알고 있거나 꼭 사용해야 한다고 생각한다면 .

php 태그 데모
{php} //php 스크립트를 포함하여 사용할 수도 있습니다. // 템플릿에서 직접 include("/path/to /display_weather.php"); {/php}


section,sectionelse
템플릿의 섹션은 섹션 태그는 쌍으로 표시되어야 합니다. 이름은 문자, 숫자 및 밑줄의 조합으로 구성될 수 있지만 중첩된 이름은 고유해야 합니다. (보통 배열)은 루프가 실행되는 횟수를 결정합니다. 섹션 루프 내에서 변수를 출력해야 하는 경우 루프 변수가 없을 때 sectionelse가 실행된 후 대괄호로 묶인 이름 변수를 추가해야 합니다. value

속성 유형에 기본값이 있어야 하는지 여부 설명
name string 예 n/a 루프 이름
loop [$variable_name] 예 n/a 해당 변수의 이름 루프 수를 결정합니다.
시작 정수 번호 0 루프 실행의 초기 위치 값이 음수인 경우 시작 위치는 배열의 끝에서 계산됩니다. 예를 들어 배열의 경우 7개의 요소가 있습니다. in에 시작을 -2로 지정하면 현재 배열을 가리키는 인덱스는 5입니다. 잘못된 값(루프 배열의 하한을 초과하는)은 자동으로 가장 가까운 합법적인 값인
단계 정수 1번으로 조정됩니다. 값은 루프의 단계 크기를 결정합니다. 예를 들어 step=2를 지정하면 인덱스가 0, 2, 4 등인 요소만 순회합니다. 단계가 음수 값이면 배열을 뒤에서 앞으로 순회합니다. >max 정수 No 1 루프의 최대 실행 횟수를 설정합니다.
show boolean 아니요 true 루프를 표시할지 여부를 결정합니다.

section 함수 데모
{* 이 예는 인쇄됩니다. $custid 배열의 모든 값을 출력합니다 *}
{section name=customer loop=$custid}
id: {$custid[customer]}

{/section}

출력 결과:

id: 1000

id: 1001

id: 1002

루프 데모

출력 결과:
{* 루프 변수는 루프 횟수만 결정합니다. 섹션 내의 템플릿에서 모든 변수에 액세스할 수 있습니다. 이 예에서는 $custid, $name 및 $address가 모두 동일한 숫자를 포함하는 배열이라고 가정합니다. 값 ​​*}{섹션 이름=고객 루프 =$custid} ID: {$custid[customer]}
이름: {$name[customer]}
주소: {$address[customer] }

{/section }출력 결과: id: 1000
name: John Smith
주소: 253 N 45번째

id: 1001
name: Jack Jones 주소: 417 Mulberry 주소: 1002 이름: Jane Munson 주소: 5605 apple st

section name称演示 {* 섹션 이름은 원하는 대로 지정할 수 있습니다.
 섹션 내의 데이터를 참조하는 데 사용됩니다. *}
{section name=mydata loop=$custid}
 id: {$custid[mydata]}

 이름: {$name[mydata]}

 주소: {$address[mydata]}

 < ;p>
{/section} 
嵌套 section 演示 {* 섹션은 원하는 만큼 깊이 중첩될 수 있습니다. 중첩된 섹션을 사용하면 다차원 배열과 같은 복잡한 데이터 구조에 액세스할 수 있습니다. 이 예에서 $contact_type[customer]는 현재 고객의 연락처 유형 배열입니다. *}{섹션 이름=고객 루프=$custid} ID: {$custid[고객]}
이름: {$name[고객]}
주소: {$address[고객]}
{섹션 이름=연락처 루프=$contact_type[고객]}  {$contact_type[고객][연락처]}: {$contact_info[고객][연락처]}
{/section}

{/section}输出结果:id: 1000
이름: John Smith
주소: 253 N 45번째
집 전화: 555-555-5555
휴대폰: 555-555-5555
이메일: john@mydomain.com

id: 1001
이름: Jack Jones
주소: 417 Mulberry 집 전화: 555- 555-5555
휴대 전화: 555-555-5555
이메일: jack@mydomain.com

id: 1002
이름: Jane Munson
주소: 5605 apple st
집 전화: 555-555-5555
휴대 전화: 555-555-5555
이메일: jane@mydomain.com

 
section 遍历多维数组演示 {* 섹션 내 데이터의 연관 배열
을 인쇄하는 예입니다. *}
{section name=customer loop=$contacts}
이름: {$contacts [고객].name}

 집: {$contacts[customer].home}

 셀: {$contacts[customer].cell}

 e -mail: {$contacts[customer].email}


{/section}


输出结果:

name: John Smith
집: 555-555-5555

휴대폰: 555-555-5555

이메일: john@mydomain.com


이름: Jack Jones

집 전화: 555-555-5555

휴대 전화: 555-555-5555

이메일: jack@mydomain.com


이름: Jane Munson< br>
집 전화: 555-555-5555

휴대 전화: 555-555-5555

이메일: jane@mydomain.com

 
sectionelse 演示 {* $custid 값이 없으면 sectionelse가 실행됩니다. *}
{section name=customer loop=$custid}
 id: {$custid[customer]}

{sectionelse}
 $custid에 값이 없습니다.
{/section}

Section 循环也有可供调用的变weightname. 通过如下方式调사용{$smarty.section.sectionname.varname}.
 
스트립
Web 开发者多次遇到空格 and 回车影响HTML输은 浏览器的"特性"), 이 회사는 특별히 정해진 네트워크를 갖고 있지 않으며 여행 중 다른 곳에서 여행할 수 없습니다. 일반적으로 模板中遇到此问题.

Smarty 재显示前将除区任何位于 {strip}{/strip} 标记中数据的首공기와 공기. 这样可以保证模板容易理解且不用担心多余的空格导致问题.
strip 标签演示 {* 다음은 출력시 모두 한 줄로 실행됩니다 *}
{strip}


 
  
 

       이것은 테스트입니다
   

  

{/스트립}


输出结果:

{strip}

 
  
 

       이것은 테스트입니다
   

  

{/strip}


输出结果:

위 예에서는 모든 줄이 HTML 태그로 시작하고 끝나므로 모든 줄이 함께 그룹화되어 실행됩니다. 줄의 시작과 끝 부분에 텍스트가 있는 경우에도 함께 그룹화됩니다. 원하는 결과를 얻을 수 있습니다.

위 내용은 PHP 템플릿 엔진 smarty의 두 번째 내장 기능에 대한 내용이며, 자세한 내용은 PHP 중국어 홈페이지를 참고해주세요. (www.php.cn)!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.