1

我不太确定这一点,但从聪明的说明阅读http://www.smarty.net/docs/en/installing.smarty.basic.tpl,我必须设置 $template_dir、$compile_dir、$config_dir、和 $cache_dir 每次我有一个新的 PHP 脚本时。换句话说,我必须为每个 PHP 脚本添加以下代码行:

$smarty->setTemplateDir('/.../templates/');
$smarty->setCompileDir('/...templates_c/');
$smarty->setConfigDir('/.../configs/');
$smarty->setCacheDir('/.../cache/');

那是对的吗?你们有没有采取任何“捷径”来避免这种情况?

4

2 回答 2

2

您应该在一个通用配置文件中设置所有这些内容,然后在需要时将其包含在内。

include( 'path/to/common_config.php' );

然后,在您的 common_config.php 中,您可以执行以下操作:

//set up Smarty
require_once( dirname( __FILE__ ) . '/smarty/Smarty.class.php' );
$smarty = new Smarty;
$smarty->error_reporting = E_ALL & ~E_NOTICE;
$smarty->setTemplateDir( dirname( __FILE__ ) . '/../templates' );
$smarty->setCompileDir( dirname( __FILE__ ) . '/../smarty/templates_c' );

使用 "dirname( FILE )" 将确保路径始终相对于公共配置文件。

现在您需要做的就是使用带有模板文件名称的 display 方法:

$smarty->display( 'index.tpl' );
于 2012-08-14T02:25:40.877 回答
0

我认为更好的解决方案是扩展 Smarty 类。

<?php
require_once SMARTY_DIR . 'Smarty.class.php';

class Application extends Smarty {

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

        $this
            ->addTemplateDir (TPL_DIR)
            ->setCompileDir  (COMPILE_DIR)
            ->setConfigDir   (CONFIG_DIR)
            ->setCacheDir    (CACHE_DIR)
            ->setPluginsDir  ( array ( SMARTY_DIR.'plugins', PRESENTATION_DIR.'smarty_plugins' ) );

        $this->caching = false;       // set Smarty caching off by default
        $this->muteExpectedErrors();  // can't remember what this does exactly, but it tunes down the sensitivity of errors
        $this->debugging = SMARTY_DEBUG; // setting controlled in config. file
    }
}
?>

然后只需启动新的“应用程序”类。

于 2013-10-02T20:14:12.740 回答