문서 목차

1. config_load 함수

통사론:
(config_load 파일="file_name")

이 함수는 에서 템플릿 변수로 로드하는 데 사용됩니다. 구성 파일. 로드되는 파일의 이름 외에도 이 함수는 여러 개를 가질 수 있습니다. 추가 옵션. 예를 들어, 로드할 섹션의 이름을 지정하는 섹션 매개변수입니다. 더 자세한 정보이러한 옵션과 기타 옵션은 Smarty 설명서에서 찾을 수 있습니다.

예시:
(config_load 파일="task.conf")

2.캡쳐 기능

통사론:

(캡처 이름="block_name"
assign="변수 이름") ...
(/포착)

이 함수는 템플릿의 출력을 화면에 표시하는 대신 변수로 수집하기 위한 것입니다.

(capture name="varname")과 (/capture) 사이의 모든 것은 varname이라는 변수에 기록됩니다. 이러한 방식으로 캡처된 콘텐츠는 $smarty.capture.varname 특수 변수를 사용하여 템플릿에서 사용할 수 있습니다. 여기서 varname은 캡처 함수의 name 속성에 전달된 값입니다. 변수 이름을 지정하지 않으면 기본값이 사용됩니다.

두 번째 매개변수 assign은 캡처된 출력 값이 할당될 변수의 이름을 지정합니다. 이름과 같은 이 매개변수는 선택사항입니다.

3. 섹션 기능

통사론:

(섹션 이름="섹션_이름"
loop="variable_to_calculate_the_number_of_iterations"
[,start="start_position_index"]
[, step="step"] [,max="max_iterations"]
[,show="show_section"] )...
(/ 부분)

섹션은 배열의 요소를 순회하기 위한 루프입니다. 필수 매개변수는 섹션의 이름을 지정하는 name과 루프의 반복 횟수를 결정하는 변수인 loop입니다.

일반적으로 루프는 배열 변수이며 섹션의 반복 횟수는 해당 배열의 요소 수와 같습니다. 루프 안에 변수를 표시하려면 변수 이름 뒤에 대괄호 안에 섹션 이름을 지정해야 합니다.

(섹션 이름=아트 루프=$title)

제목: ($title)

(/ 부분)

예 15.8. 배열 요소를 반복하는 루프

4. foreach 함수

통사론:

(foreach from="array_name"
item="현재_항목_이름")
... (/각각)

또한 추가 속성 키(배열의 현재 요소에 대한 키 이름)와 이름(속성에 액세스할 수 있는 주기 이름)을 사용할 수 있습니다. from 및 item 속성은 필수입니다.

foreach 루프는 섹션 루프의 대안입니다. foreach 함수는 PHP의 foreach 루프와 매우 유사합니다.
(foreach from=$articles item=art)
제목: ($art)

(/각각)

예 15.9. foreach 루프

foreach 루프에는 고유한 속성이 있습니다. 다음과 같이 액세스할 수 있습니다. ($smarty.foreach.foreachname.varname), 여기서 foreachname은 name 매개변수에 의해 제공된 루프의 이름이고 varname은 속성의 이름입니다.

5. if, elseif, else 문

통사론:

(if 표현식) action_block
(elseif 식1) action_block1
(그 외) action_block2
(/만약에)

연산자의 동작은 PHP 언어의 if...elseif...else 연산자와 거의 유사합니다.

표현식에 다음 비교 연산자를 사용할 수 있습니다. eq, ne, neq, gt, lt, lte, le, gte, ge, is 짝수, is 홀수, is not even, is not odd, not, mod, div by, even 에 의해, 홀수에 의해, ==, !=, >,<, <=, >=. 각각은 공백으로 주변 값과 분리되어야 합니다. 괄호는 표현식에 사용할 수 있으며 PHP 함수를 호출할 수 있습니다.

($name eq "Vasya"인 경우)
환영합니다 Vasya.
(elseif $name eq "Petya")
환영합니다, 페티야.
(또 다른)
환영하다. 그리고 당신은 누구입니까?
(/만약에)

예 15.10. if, elseif, else 문

(* 이 예제는 비교 연산자 주위에 공백이 없기 때문에 작동하지 않습니다 *)
(if $name=="Vasya" || $name=="Peter")
...
(/만약에)
예 15.11. 깨진 예

자체 작성 사이트를 만들 때(프레임워크, CMS 및 기타 웹 개발자의 삶을 더 쉽게 만들어 주는 유행을 사용하지 않고) 페이지가 많을 때 사이트를 변경해야 하는 문제에 직면하게 됩니다.

각 페이지 파일에서 사이트의 동일한 부분을 변경할 필요가 없도록 한 줄의 코드로 모든 페이지에 필요한 코드가 있는 파일을 포함할 수 있는 편리한 PHP 명령을 사용할 수 있습니다. 그런 다음 포함된 파일의 내용을 변경하여 사이트의 모든 페이지에서 코드를 변경합니다. 어떻게 보아도 편리합니다.

이제 파일을 연결하는 방법을 더 자세히 살펴보겠습니다.

포함 및 요구 사용

원하는 대로 이 두 가지 지침 간에 근본적인 차이점을 찾을 수는 없지만 뉘앙스가 있습니다.

require 명령을 실행하는 동안 오류가 발생하면 파서는 치명적인 오류 응답을 수신하고 페이지 코드 실행이 중지되는 반면, include는 경고만 발행하고 파일은 계속 실행됩니다(파일은 단순히 포함).

주제를 더 잘 이해하기 위해 간단한 예를 들어 보겠습니다.

머리글과 바닥글은 모든 페이지에서 동일하지만 문서의 본문은 변경되는 미니 사이트가 있습니다.

header.php 및 footer.php 파일을 생성하여 모든 페이지에 동일한 코드를 배치하고 index.php 및 newpage.php 파일에서 정적 부분을 연결합니다. 결과적으로 다음을 얻습니다.

header.php 콘텐츠

< header> < nav> < a href= "newpage1.php" title= "메뉴 아이템" >메뉴 아이템 < a href= "newpage2.php" title= "메뉴 아이템" >메뉴 아이템 < a href= "newpage3.php" title= "메뉴 아이템" >메뉴 아이템

footer.php 콘텐츠

< footer> < p>우리가 만든

사이트의 다른 페이지 내용

미니사이트

유용한 정보가 많다

페이지를 로드한 결과 다음 그림을 얻습니다.

보시다시피 모든 것이 훌륭하게 작동합니다.

우리는 다음에서 예제를 실행했습니다. 로컬 서버 Denwer, 왜냐하면 PHP 작업지원하는 서버가 필요합니다. PC의 간단한 폴더에 사이트를 만들면 아무 것도 작동하지 않습니다.

고려한 예에서는 연결에 require 헤더를 사용하고, 바닥글을 포함했습니다. 귀하의 사이트에서 무엇을 사용할지는 귀하에게 달려 있습니다. 이미 언급했듯이 그들 사이에는 큰 차이가 없습니다. 요구하지 않는 한 다소 엄격한 명령으로 간주됩니다.

사실 라인은 단순히 파일의 전체 내용(우리가 지정한 경로)을 해당 파일이 있는 문서 내부에 복사합니다.

include _once 및 require _once 사용

사이트에서 작업할 때 동일한 코드 조각이 한 파일에 두 번 이상 포함되어 있기 때문에 문제가 발생할 수 있습니다.

여러 사람이 현장에서 일했기 때문에 이런 일이 발생했다고 가정하고 코드가 결합되면 그러한 사건이 발생했습니다 ...

이러한 문제의 가능성을 제거하기 위해 개발자는 종종 include _once 및 require _once 문을 사용합니다. 그들의 작동 원리는 include와 require의 원리와 정확히 동일하지만 그러한 명령어의 파일이 이미 우리 파일에 연결되어 있는 경우 다시 연결일어나지 않을 것입니다.

단점에 이 방법코드 중복을 피하기 위해 포함된 모든 파일을 기억하고 비교해야 하기 때문에 이전 버전이 require에 포함된 것보다 느리고 계산 비용이 더 많이 든다는 사실에 기인할 수 있습니다.

메모에

  • 사이트 페이지 파일과 그 조각의 파일을 보다 편리하게 구별할 수 있도록 하기 위해 일반적으로 포함된 파일은 이름에 inc 부분을 추가합니다. 고려하면 이 접근법이 예에서는 header.php 파일에서 header.inc.php 파일을 가져오는 식입니다. 이 접근 방식은 향후 사이트 구조에 대한 이해를 크게 단순화할 수 있습니다.
  • 우리가 포함하는 파일의 코드는 그것이 포함된 라인의 범위를 상속합니다. 페이지 내부의 Tobish에는 전역 범위가 있고 함수 내부에는 로컬 범위가 있습니다.
  • 우리가 원하는 곳 어디에서나 require와 함께 include를 사용할 수 있습니다. 심지어 내부 스크립트.

). 각 태그 (부분)커플이 있어야 합니다 (/ 부분). 필수 매개변수는 이름그리고 고리. 주기 이름(섹션)은 문자, 숫자 및 밑줄로 구성된 무엇이든 될 수 있습니다. 주기 (부분)중첩될 수 있으며 중첩(섹션) 이름은 서로 고유해야 합니다. 변하기 쉬운 고리(보통 값의 배열) 루프의 반복 횟수를 지정합니다. 섹션 내에서 변수를 인쇄할 때 섹션 이름은 대괄호 안에 있는 변수 이름 옆에 나타나야 합니다. (섹션별)매개변수인 경우 실행 고리값이 없습니다.

속성 이름 유형 필수적인 기본 설명
이름 해당 사항 없음 섹션 이름
고리 혼합 해당 사항 없음 루프의 반복 횟수를 지정하는 값입니다.
시작 정수 아니다 0 루프가 시작될 위치의 인덱스입니다. 값이 음수이면 시작 위치는 배열의 끝에서 계산됩니다. 예를 들어 루프 변수에 7개의 요소가 있고 시작 속성의 값이 -2이면 시작 인덱스는 5가 됩니다. 잘못된 값(배열 외부의 값)은 가장 가까운 유효한 값으로 자동 잘립니다.
단계 정수 아니다 1 배열을 반복하는 데 사용되는 단계 값입니다. 예를 들어, step=2는 요소 0,2,4...만큼 배열을 순회하도록 지정합니다. 단계가 음수이면 배열은 반대 방향으로 순회됩니다.
최대 정수 아니다 1 루프 반복의 최대 수입니다.
보여 주다 부울 아니다 진실 이 섹션을 표시할지 여부를 지정합니다.

노트

Smarty 1.5.0부터 세션 속성 변수 구문이 (%sectionname.varname%)에서 ($smarty.section.sectionname.varname)으로 변경되었습니다. 이전 구문은 계속 지원되지만 새 구문의 예만 표시됩니다.

index는 0(또는 지정된 경우 start 속성)에서 시작하여 1(또는 지정된 경우 step 속성의 값)씩 증가하는 배열의 현재 인덱스를 표시하는 데 사용됩니다.

기술 노트

단계 및 시작 속성이 지정되지 않은 경우 인덱스는 1 대신 0에서 시작한다는 점을 제외하고 반복 섹션 속성과 동일합니다.

반복은 루프의 현재 반복 번호를 표시하는 데 사용됩니다.

노트

이 값은 index 속성과 달리 start, step, max 속성과 무관합니다. 또한 반복은 인덱스처럼 0이 아닌 1에서 시작합니다. rownum은 iteration 속성의 동의어이며 동일한 방식으로 작동합니다.

예 7.38. 속성(섹션) 반복

assign("custid",$id); ?> (섹션 이름=cu 루프=$custid 시작=5 단계=2) iteration=($smarty.section.cu.iteration) index=($smarty.section.cu.index) id=($custid)
(/ 부분)

이 예제를 실행한 결과:

반복=1 인덱스=5 ID=3005
반복=2 색인=7 ID=3007
반복=3 색인=9 ID=3009
반복=4 인덱스=11 ID=3011
반복=5 색인=13 ID=3013
반복=6 인덱스=15 ID=3015

이 예에서는 iteration 속성을 사용하여 5줄마다 테이블 헤더를 표시합니다(mod 연산자와 함께 (if) 사용 - 모듈로).

(섹션 이름=co 루프=$contacts) ($smarty.section.co.iteration % 5 == 1인 경우) (/만약에) (/ 부분)
이름>이메일
보다 ($연락처 이름) ($contacts.home) ($contacts.cell) ($contacts.email)


섹션 카테고리에서 섹션 HTML 요소를 고려하는 기사.

섹션 요소의 목적

section 요소는 일부 주제 콘텐츠를 함께 그룹화하는 문서의 섹션을 만드는 데 사용됩니다. 문서의 각 섹션에 대해 제목(제목)을 표시해야 합니다. 이것은 일반적으로 제목(h1 - h6 요소)으로 수행됩니다.

섹션 제목

섹션 내용...

섹션 요소는 일반적으로 다음과 같은 경우에 사용됩니다.

  • 섹션 내의 섹션을 마크업합니다. 예를 들어 기사의 챕터, 대화 상자의 탭, 논문의 섹션 등을 표시하려면
  • 여러 섹션을 하나의 주제 그룹으로 그룹화합니다. 예를 들어 그룹화하려면 최근 소식사이트, 기사에 대한 의견 등

따라서 섹션 요소는 제목이 있고 다른 콘텐츠의 일부인 경우에만 일부 콘텐츠에 사용해야 합니다.

섹션 요소 적용

예를 들어, 주석이 있는 기사가 포함된 페이지 코드 조각을 고려하십시오. 페이지에 사용자가 남긴 각 댓글에는 완성된 콘텐츠가 포함되어 있으므로 기사 요소로 간주될 수 있습니다. 그러나 동시에 모든 주석은 일부 주제 그룹을 나타내므로 섹션 요소에 배치할 수 있습니다. 이 요소는 페이지의 모든 댓글을 함께 그룹화합니다.

기사 제목

코멘트

댓글 제목

댓글 텍스트...

댓글 제목

댓글 텍스트...

기사 제목 댓글 댓글 제목 댓글 제목

예를 들어, 섹션 요소를 사용하여 기사 요소 내에 섹션을 만드는 것을 고려하십시오.

책의 이름

첫 번째 장

두 번째 장

세 번째 장

부록 A

부록 B

위의 예는 다음과 같은 구조(개요)를 갖습니다.

책 제목 1장 2장 3장 부록 A 부록 B

섹션 요소 사용 시 제한 사항

HTML 5의 섹션 요소는 콘텐츠를 그룹화하기 위한 일반 요소가 아닙니다. 원하는 콘텐츠를 래핑하는 데 사용해서는 안 됩니다. 주요 목적은 문서에 의미를 추가하고 구조(개요)를 만드는 것입니다.

작성자가 스타일을 지정하거나 JavaScript에서 작업하기 위해 콘텐츠를 그룹화해야 하는 경우 가장 좋은 방법은 div 요소를 사용하는 것입니다. div 요소는 section 요소와 달리 문서에 의미를 추가하지 않으며 문서의 구조(개요) 생성에 참여하지 않습니다.

섹션 요소와 기사 요소의 차이점

섹션 및 기사 요소는 겉보기에는 매우 유사해 보이지만 의미론적 의미가 다릅니다. 기사 요소는 완전하고 독립적이며 페이지의 나머지 콘텐츠와 분리된 것으로 간주될 수 있는 콘텐츠를 그룹화하기 위한 것입니다. 그리고 섹션 요소는 다른 의미론적 의미를 가지며 콘텐츠를 그룹화하기 위한 것입니다. 중요한 부분다른 것.

그러나 작성자는 페이지의 일부 콘텐츠가 무엇인지 어떻게 알 수 있습니까? 예제 기사 조각을 사용하여 이것을 살펴보겠습니다. 프래그먼트는 기사의 일부이므로 섹션 요소를 사용하여 콘텐츠를 그룹화해야 합니다. 그러나 이미 주석으로 남겨진 동일한 단편은 완전하고 완전한 것이 될 것입니다. 따라서 이 컨텍스트에서 기사 요소를 사용하여 그룹화할 수 있습니다. 그러나 물론 그 반대의 주장도 제기될 수 있다. 따라서 대부분의 경우 콘텐츠를 그룹화하는 데 사용할 요소는 작성자로서의 주관적인 의견에 따라 다릅니다. 그러나 이 접근 방식에서 가장 중요한 것은 선택한 위치를 유지하는 것입니다. 따라서 저자가 구조를 만드는 데 일관성이 있을수록 더 많은 의미를 넣을 수 있습니다.