名前

registerDefaultPluginHandler() — 未定義のタグから呼ばれる関数を登録する

Description

void registerDefaultPluginHandler(mixed callback);

デフォルトのプラグインハンドラを登録します。これは、 コンパイラがタグの定義を見つけられなかったときに呼ばれるものです。 次のパラメータを使います。

  • PHP 関数のコールバック function は、次のいずれかとなります。

    • 関数名を含んだ文字列

    • array($object, $method) 形式の配列 ($object はオブジェクトの参照で、 $method はメソッド名を含む文字列)

    • array($class, $method) という形式の配列 ($class はクラス名であり、 $method はクラスのメソッド名)

Smarty のコンパイル時に遭遇したタグが 内部的に未定義で、かつ登録されてもいなくて、 さらにプラグインフォルダにも存在しない場合に、デフォルトのプラグインハンドラを使って解決を試みます。 このハンドラは同じ未定義のタグに対して何度も呼ばれる可能性があります。 有効なプラグイン形式をループ処理するためです。

例 14.38. デフォルトのプラグインハンドラの例


<?php

$smarty = new Smarty();
$smarty->registerDefaultPluginHandler('my_plugin_handler');

/**
 * Default Plugin Handler
 *
 * called when Smarty encounters an undefined tag during compilation
 * 
 * @param string                     $name      name of the undefined tag
 * @param string                     $type     tag type (e.g. Smarty::PLUGIN_FUNCTION, Smarty::PLUGIN_BLOCK, 
                                               Smarty::PLUGIN_COMPILER, Smarty::PLUGIN_MODIFIER, Smarty::PLUGIN_MODIFIERCOMPILER)
 * @param Smarty_Internal_Template   $template     template object
 * @param string                     &$callback    returned function name 
 * @param string                     &$script      optional returned script filepath if function is external
 * @param bool                       &$cacheable    true by default, set to false if plugin is not cachable (Smarty >= 3.1.8)
 * @return bool                      true if successfull
 */
function my_plugin_handler ($name, $type, $template, &$callback, &$script, &$cacheable)
{
    switch ($type) {
        case Smarty::PLUGIN_FUNCTION:
            switch ($name) {
                case 'scriptfunction':
                    $script = './scripts/script_function_tag.php';
                    $callback = 'default_script_function_tag';
                    return true;
                case 'localfunction':
                    $callback = 'default_local_function_tag';
                    return true;
                default:
                return false;
            }
        case Smarty::PLUGIN_COMPILER:
            switch ($name) {
                case 'scriptcompilerfunction':
                    $script = './scripts/script_compiler_function_tag.php';
                    $callback = 'default_script_compiler_function_tag';
                    return true;
                default:
                return false;
            }
        case Smarty::PLUGIN_BLOCK:
            switch ($name) {
                case 'scriptblock':
                    $script = './scripts/script_block_tag.php';
                    $callback = 'default_script_block_tag';
                    return true;
                default:
                return false;
            }
        default:
        return false;
    }
 }

?>

  

注意

戻すコールバックは静的なものでなければなりません。 関数名か、あるいはクラス名とメソッド名の配列を返します。

オブジェクトとメソッド名のような動的なコールバックには対応していません。