自前のカスタム関数を作ってみました。

Smarty のクラスを独自に拡張した MySmarty クラスにユーザ認証の機能を作ることができました。

class MySmarty extends Smarty
{
    private $_auth;

    public function __construct() {
        $this->Smarty();

        /* 中略 */

        // 認証
        $params = array(
                "cryptType" => "none",
                "users" => array(
                    'test@osumo-online.com' => 'password'
                    )
                );
        $auth = new Auth("Array",$params,"_loginFunction",TRUE);
        $auth->start();
        if ($auth->getAuth()){
            $this->_auth = true;
        } else {
            $this->_auth = false;
        }
    }
    
    public function chkAuth(){
        return $this->_auth;
    }
}
function _loginFunction(){
    ;//dummy
}

このクラスの認証を使ってテンプレートの表示を切り替えたかったので、自前のカスタム関数を作成してみました。カスタム関数には、テンプレート関数、修飾子、ブロック関数などたくさんの種類があるようですが、ログインしている時とログインしていない時でテンプレートの表示したい部分を切り替えるので、作りたいカスタム関数はブロック関数プラグインに該当するようです。


公式サイトの「16章プラグインによる Smarty の拡張 ブロック関数プラグイン」のページを参考に作ってみました。
http://smarty.php.net/manual/ja/plugins.block.functions.php


プラグインディレクトリを自分で作って、そこに配置した時は

$this->plugins_dir[]   = $dirMySmarty."/plugins/";

といったようにプラグインディレクトリを追加してあげないと Smartyプラグインを見つけることができないので、注意が必要だなと思いました。

block.login.php

<?php
function smarty_block_login($params, $content, &$smarty, &$repeat)
{
    // 終了タグでのみ出力します
    if(!$repeat){
        if (isset($content)) {
            if ($smarty->chkAuth()) {
                return $content;
            }
        }
    }
    return "";
}
?>

hoge.tpl

ログインに成功している時だけ、「ようこそ」メッセージが表示されます。

{login}
ようこそ!○○さん。
{/login}