Smarty Plugins 확장하기

Smarty를 사용하다 보면 기본 적인 함수, 수정자(modifier) 등이 있으나

프로젝트에 따른 사용자 정의 플러그-인의 필요성을 느끼게 된다.

Java에서 사용자 정의 태그 라이브러리를 만들어 사용하 듯이 Smarty 에서도 플러그-인을 쉽게 추가할 수 있다.

추가로 개발된 플러그-인을 템플릿에서 사용하기 위해서는 Smarty의 플러그-인 디렉토리 설정을 변경해야 한다.

Smarty 하위 클래스를 사용할 때 설정 방법.

class Project_Smarty extends Smarty (

    public function __construct() {
        parent::__construct();

        $this->plugins_dir = array(
            "plugins", // SMARTY 디렉토리의 기본 플러그-인
            PROJECT_PATH."/libs/Project/SmartyPlugins"
        );
        // 기타 설정
    }
}

my_func_test 플러그-인 (SmartyPlugins/function.my_func_test.php)

function smarty_function_my_func_test($params, &$smarty) {
    $data = array("첫 번째", "두 번째", "세 번째");
    return $data[array_rand($data)];
}

템플릿(test.tpl) 에서 사용 예:

내가 선택한 것은 {$my_func_test}입니다.

my_mod_test 플러그-인 (SmartyPlugins/modifier.my_func_test.php)

function smarty_modifier_my_mod_test($no) {
    $data = array("첫 번째", "두 번째", "세 번째");}
    return $data[$no];
}

템플릿(test.tpl)에서 사용 예:

{assign var="my_num" value="2"}
내가 선택한 것은 {$my_num|my_mod_test}입니다.