0

我尝试使用 Smarty 模板中的 base_url() 和 site_url()。我读了一些文章,关于如何做到这一点。但是,没有一个有效。我按照本教程 为 Smarty 创建了一个名为functions.url.php的“插件”: https
://github.com/EllisLab/CodeIgniter/wiki/Smarty-plugin---URL-Helper 所以,我使用 {url} Smarty “标签”:

<form action={url type='site' url='authentication/login'} method="post" id="login_form">

但是,当我访问该站点时,smarty 在下面的行中显示了一个大的致命错误:

带有消息“模板中的语法错误”的“SmartyCompilerException”

有任何想法吗 ?。

编辑:新步骤。

我将插件的名称更改为:plugin.url.php 我尝试在控制器中注册插件:

$this->smartyci->registerPlugin("function", "url", "smarty_function_url");

但是一个新的错误显示:

带有消息“插件不可调用”的“SmartyException”

4

1 回答 1

1
  1. 将 Smarty 放入 CI 的某个文件夹中,例如third_party/smarty。
  2. 将 Smarty 添加到 CI - 创建库 application/libraries/Mysmarty.php

定义('SMARTY_DIR', APPPATH . 'third_party/smarty/'); require_once(SMARTY_DIR.'Smarty.class.php');

class Mysmarty extends Smarty
{
    public function __construct ( )
    {
        parent::__construct();
        $config =& get_config();            
        $this->template_dir   = $config['smarty_template_dir'];                                                                        
        $this->compile_dir    = $config['smarty_compile_dir']; 
        $this->cache_dir      = $config['cache_dir'];   
        $this->caching        = $config['caching'];
    }

    function view($resource_name, $params = array())   {
        if (strpos($resource_name, '.') === false) {
            $resource_name .= '.tpl';
        }

        if (is_array($params) && count($params)) {
            foreach ($params as $key => $value) {
                $this->assign($key, $value);
            }
        }

        if (!is_file($this->template_dir . $resource_name)) {
            show_error("template: [$resource_name] cannot be found.");
        }

        return parent::display($resource_name);
    }
} 
  1. 将新的配置变量添加到 application/config/config.php

    $config['smarty_template_dir'] = APPPATH 。'意见/'; // smarty 模板的文件夹 $config['smarty_compile_dir'] = APPPATH . '缓存/智能/编译/'; // 创建这个文件夹 $config['cache_dir'] = APPPATH . '缓存/智能/缓存/'; // 创建这个文件夹 $config['caching'] = 0;

  2. 在文件 application/config/autoload.php 中添加新库以自动加载

    $autoload['libraries'] = array('database', 'session', 'mysmarty');

  3. 现在在您的控制器中尝试向 smarty 添加一些变量:

    $this->mysmarty->assign('url', $this->config->item('base_url'));

然后显示您的模板:

$this->mysmarty->view('main'); // template path is application/views/main.tpl

在 main.tpl 添加您的表单

<form action={$url} method="post" id="login_form">
...


enter code here
于 2013-06-20T10:04:13.930 回答