상단

PHP Template Engine인 smarty를 정리 한다.

 

프로그램 문법


프로그램 기초

  • 선언 및 사용

 
 #--- Smarty.class.php 파일이 있는 위치를 나타내는 SMARTY_DIR 상수를 정의 한다.
 #--- php.ini 파일의 include_path에도 추가 되어 있어야 한다.
 #---  $compile_dir과  $cache_dir에 대한 읽고 쓰기 권한이 있어야 한다.
 define('SMARTY_DIR', '/var/www/html/sugar/include/Smarty');
 require_once('Smarty.class.php');
 
 $smarty = new Smarty();
 $smarty->template_dir = '.';
 $smarty->compile_dir  = '/var/www/html/sugar/cache/smarty/templates_c/';
 $smarty->config_dir   = '/var/www/html/sugar/cache/smarty/configs/';
 $smarty->cache_dir    = '/var/www/html/sugar/cache/smarty/cache/';
 
 $smarty->assign('firstname', 'Doug');
 ### $str = $smarty->fetch('index.tpl'); 
 $smarty->display('index.tpl');
 

상수/변수

  • 내장 상수

 
 SMARTY_DIR
 SMARTY_CORE_DIR
 
  • Smarty 클래스 변수

 
 $debugging
 $debug_tpl
 $debugging_ctrl
 $autoload_filters
 $compile_check
 $force_compile
 $caching
 $cache_lifetime
 $cache_handler_func
 $cache_modified_check
 $config_overwrite
 $config_booleanize
 $config_read_hidden
 $config_fix_newlines
 $default_template_handler_func
 $php_handling
 $security
 $secure_dir
 $security_settings
 $trusted_dir
 $compiler_class
 $request_vars_order
 $request_use_auto_globals
 $error_reporting
 $compile_id
 $use_sub_dirs
 $default_modifiers
 $default_resource_type
 
  • Smart 문법이 적용되는 Delimiter 정의

 
 $left_delimiter : Default 값. {
 $right_delimiter : Default 값. }
 
  • Smarty에서 사용하는 디렉토리리를 지정 한다.

 
 $template_dir
 $compile_dir
 $config_dir
 $plugins_dir
 $cache_dir
 

함수

  • Smart 클래스 함수

 
 append() -- 할당된 템플릿 배열에 요소를 추가합니다.
 append_by_ref() -- 참조로서 값을 추가합니다.
 assign() -- 템플릿에 값을 할당합니다.
 assign_by_ref() -- 참조로서 값을 할당합니다.
 clear_all_assign() -- 할당된 모든 템플릿 변수를 파기합니다.
 clear_all_cache() -- 모든 템플릿의 캐시를 파기합니다.
 clear_assign() -- 할당된 템플릿 변수의 값을 파기합니다.
 clear_cache() -- 지정한 템플릿의 캐시를 파기합니다.
 clear_compiled_tpl() -- 지정한 템플릿의 캐시를 파기합니다.
 clear_config() -- 할당된 모든 설정 파일의 변수를 파기합니다.
 config_load() -- 설정 파일 데이터를 로딩하여, 템플릿에 할당합니다.
 display() -- 템플릿을 표시합니다.
 fetch() -- 템플릿의 출력을 반환합니다.
 get_config_vars() -- 로딩된 설정 파일 변수를 반환합니다.
 get_registered_object() -- 등록된 오브젝트의 참조를 반환합니다.
 get_template_vars() -- 할당된 변수의 값을 반환합니다.
 is_cached() -- 템플릿이 유효한 캐시를 가질 경우에 TRUE를 반환합니다.
 load_filter() -- 필터 플러그인을 로딩합니다.
 register_block() -- 블록 함수 플러그인을 동적으로 등록합니다.
 register_compiler_function() -- 컴파일러 함수 플러그인을 동적으로 등록합니다.
 register_function() -- 템플릿 함수 플러그인을 동적으로 등록합니다.
 register_modifier() -- 변수의 변경자 플러그인을 동적으로 등록합니다.
 register_object() -- 템플릿 내에서 사용할 오브젝트를 등록합니다.
 register_outputfilter() -- 출력 필터를 동적으로 등록합니다.
 register_postfilter() -- 포스트 필터를 동적으로 등록합니다.
 register_prefilter() -- 프리 필터를 동적으로 등록합니다.
 register_resource() -- 리소스 플러그인을 동적으로 등록합니다.
 trigger_error() -- 에러 메시지를 출력합니다.
 template_exists() -- 지정한 템플릿이 존재하는지 아닌지를 체크합니다.
 unregister_block() -- 동적으로 등록된 블록 함수 플러그인의 등록을 해제합니다.
 unregister_compiler_function() -- 동적으로 등록된 컴파일러 함수의 등록을 해제합니다.
 unregister_function -- 동적으로 등록된 템플릿 함수 플러그인의 등록을 해제합니다.
 unregister_modifier() -- 동적으로 등록된 변수의 변경자 플러그인의 등록을 해제합니다.
 unregister_object() -- 동적으로 등록된 오브젝트의 등록을 해제합니다.
 unregister_outputfilter() -- 동적으로 등록된 출력 필터 플러그인의 등록을 해제합니다.
 unregister_postfilter() -- 동적으로 등록된 포스트 필터 플러그인의 등록을 해제합니다.
 unregister_prefilter() -- 동적으로 등록된 프리 필터 플러그인의 등록을 해제합니다.
 unregister_resource() -- 동적으로 등록된 리소스 플러그인의 등록을 해제합니다.
 

데이터 할당

 $smarty->assign('firstname', 'Doug');
 

기타 확장 문법

  • Template Cache

    • 캐시

    • 캐시 핸들러 함수

     
  • 오브젝트 : PHP Object로의 접근 허용

  • Filter : Pre_Filter, Post_Filter, Output_Filter

 
 function func_prefilter($tpl_source, &$smarty)
 {
     return preg_replace("//U",'',$tpl_source);
 }
 
 $smarty->register_prefilter('func_prefilter');
 $smarty->register_postfilter('func_postfilter');
 $smarty->register_outputfilter('func_outputfilter');
 
  • 템플릿 리소스 : 파일외에 장소로부터 Template을 가져오고 싶을 때 사용

  • Plugin

    • Smarty의 대부분의 기능을 Plugin Architecture를 사용하여 확장 가능

    • Plugin type

      • function : 템플릿 함수 플러그인

      • modifier : 변경자 플러그인

      • block : 블록 함수 플러그인

      • compiler : 컴파일러 함수 플러그인

      • prefilter : 프리 필터 플러그인

      • postfilter : 포스트 필터 플러그인

      • outputfilter : 출력 필터 플러그인

      • resource : 리소스 플러그인

      • insert : insert 플러그인

    • Plugin 명명 규칙

      • 파일 명명 규칙 : type.name.php

      • 함수 명명 규칙 : smarty_type_name($params, &$smarty)

    • Plugin 등록

 
 require_once $smarty->_get_plugin_filepath('function', 'html_options');
 

Template 문법


Template 기초

  • Script의 시작과 끝

 
 {
 }
 
  • 주석

 
 {* ~ *}
 
  • Template 무시 (Template을 적용하지 않음)

 
 {literal} ~ {/literal}
 
  • PHP 코드 포함

 
 {php} ~ {/php}
 
  • white space와 carriage return을 제외하고 브라우저에 전달

 
 {strip} ~ {strip}
 
  • 변수 사용

    • "" 내에서 변수를 사용할 때는 ``로 묶어 준다.

 
 예) {func var="test `$foo.bar` test"}
 

Template 상수/변수

  • 내장 상수

  • 변수 선언

 
 {assign var='name' value='Bob'}
 
  • Smarty 내장 변수 : {$smarty}

 
 {$smarty.request.username}
 {$smarty.get.page}, {$smarty.post.page}
 {$smarty.cookies.username}
 {$smarty.env.PATH}
 {$smarty.session.id}
 {$smarty.server.SERVER_NAME} : $_SERVER['SERVER_NAME']('SERVER_NAME'.md)
 {$smarty.now}
 {$smarty.const}
 {$smarty.capture}
 {$smarty.config}
 {$smarty.section},{$smarty.foreach}
 {$smarty.template}
 {$smarty.version}
 {$smarty.ldelim},{$smarty.rdelim}
 
  • PHP 프로그램에서 넘겨 받은 변수

 
 {$foo}
 {$foo[4](4.md)} : 배열의 index는 0부터 시작함
 {$foo.bar}, {$foo.$bar} : $foo['bar'], $foo[$bar]($bar.md)
 {$foo->bar}, {$foo->bar()} : Object내의 변수 및 함수 지정
 {#foo#} : Config_File.class.php 내의 변수, {$smarty.config.foo}
 
  • 변수의 변경자

    • 사용 문법 : {$변수|변경자1: 변경자 1용 파라메터|변경자2|변경자3}

 
 capitalize
 cat
 count_characters
 count_paragraphs
 count_sentences
 count_words
 date_format
 default
 escape
 indent
 lower
 nl2br
 regex_replace
 replace
 spacify
 string_format
 strip
 strip_tags
 truncate
 upper
 wordwrap
 

Template 함수

  • 함수 사용 문법

 
 {funcname attr1='val1' attr2='val2'}
 
  • 내장 함수

 
 {capture}
 {config_load} : Configure 파일 로딩
 {foreach},{foreachelse} : {foreach from=$data key=name item=value} {$name} {$value} {/foreach}
 {if},{elseif},{else}
 {include}
 {include_php}
 {insert}
 {literal}
 {php}
 {section},{sectionelse}
 {strip}
  • Smart 문법이 적용되는 Delimiter 정의

 
 {ldelim} : Default 값. "{"
 {rdelim} : Default 값. "}"
 
  • 외장 함수 : Plugin을 경유하여 실행되는 함수

 
 {assign}
 {counter} : 숫자를 헤아린다.
 {cycle} : 값을 반복 순환 한다.
 {debug} : 화면에 Debug 정보를 표시 한다.
 {eval}
 {fetch}
 {math}
 {popup_init}, {popup}
 {textformat} : 텍스트의 포맷을 지정하여 보여 준다.
  • HTML 문을 생성하는 외장 함수

 
 {html_checkboxes}
 {html_image}
 {html_options}
 {html_radios}
 {html_select_date}
 {html_select_time}
 {html_table}
 {mailto}
 
  • config_load

    • test.config

 
 #global
 pageTitle="Hello"
 
 [login](login.md)
 pageTitle="Login"
  • Template

 
 {config_load file="test.conf" section="login"}
 
 {#pageTitle#}
 {$smarty.config.pageTitle}
 

Template 포함

  • 외부 Template 파일 포함

 
 {include file='get_banner.tpl'}
 {include_php file='/path/to/load_nav.php'}
 {insert name="getBanner" lid=#banner_location_id# sid=#site_id#} : Cache되지 않음
 
  • 내부 Capture 영역 포함

 
 {capture name=banner}
     {include file='get_banner.tpl'}
 {/capture}
 
 {$smarty.capture.banner}
 
  • 외부 파일 포함

 
 {fetch file='/export/httpd/www.example.com/docs/navbar.js'}
 {fetch file='ftp://user:password@ftp.example.com/path/to/currentheadlines.txt'}
 {fetch file='http://www.myweather.com/68502/' assign='weather'}
 

Template 분기 및 순환

  • if 문

    • 연산자 : ==, !=, >, <, >=, <=, ===, !, %

 
 {if $name eq 'Fred'}
     Welcome Sir.
 {elseif $name eq 'Wilma'}
     Welcome Ma'am.
 {else}
     Welcome, whatever you are.
 {/if}
 
  • foreach 문

 
 {foreach from=$myArray item=foo}
     {$foo}
     {$smarty.foreach.foo.first} : 최초 반복일 경우 true
     {$smarty.foreach.products.last} : 마지막 반복일 경우 true
     {$smarty.foreach.foo.index} : for 배열의 인덱스 (0, 1, 2, ...)
     {$smarty.foreach.foo.iteration} : foreache문이 반복된 횟수 (1, 2, 3, ...)
     {$smarty.foreach.foo.total} : 반복할 전체 횟수
 {foreachelse}
 {/foreach}
 
 {foreach from=$myArray key=name item=value}
     {$name}: {$value}
 {foreachelse}
 {/foreach}
 
  • section 문

 
 {section name=customer loop=$custid}
     id: {$custid[customer](customer.md)}
 {sectionelse}
 {/section}
 
 {section name=foo loop=$custid step=-1}
     {$custid[foo](foo.md)}
 {/section}

Template 확장 문법

 

Smarty 분석


  • 배열 표시

 
{{foreach from=$detail_header_buttons key=name item=value}}
``` ppp : {$name} : {$value}
```

``` {{/foreach}} ```
  • 배열의 배열 표시

 
 { {foreach from=$detail_header_buttons key=parentName item=parentValue} }
     Parent : {$parentName} 
{ {foreach from=$parentValue key=name item=value} } ppp : {$name} : {$value}
{ {/foreach} } { {/foreach} }
 

참고 문헌


 
 

분류: 오픈소스 
PHP 
Template_Engine 
프로그램_언어

최종 수정일: 2024-09-30 12:26:18

이전글 :
다음글 :