为什么Smarty无法加载此块标记插件

时间:2011-08-04 14:49:20

标签: php smarty

这是我的目录结构:

./ smartytest.php
./smarty31/*(libs等)
./plugins/block.sayhi.php

初始化smarty的PHP代码是:

require_once('smarty31/libs/Smarty.class.php');
$smarty = new Smarty();
$smarty->template_dir = getcwd() . '/templates';
$smarty->compile_dir  = getcwd() . '/templates_c';
$smarty->plugins_dir[] = getcwd() . '/plugins';

插件的PHP代码是:

<?php
    function smarty_block_sayhi($params, $content, $smarty, $open) {
        if (!$open) {
            return 'Hello: ' . $content;
        }
    }
?>

我得到的错误信息是:

  

致命错误:带有消息的未捕获异常'SmartyCompilerException'   '模板中的语法错误“/mypath/phptests/templates/page.tpl”on   第11行“{sayhi}”未知标签“sayhi”'

当插件位于smarty31 / libs / plugins目录下时,它加载正常。此示例代码是否未正确初始化Smarty?

1 个答案:

答案 0 :(得分:1)

$smarty->plugins_dir[] = getcwd() . '/plugins';

应该是:

$existing = $smarty->getPluginsDir();
$existing[] = getcwd() . '/plugins';
$smarty->setPluginsDir($existing);

原来我正在看一个PHP 4的例子; Smarty 3.1使用PHP 5访问修饰符,因此无法以这种方式更改plugins_dir。