我的模板解析器看起来像这样(p / s。' /&#39 ;.是为了便于阅读):
$this->parser->parse($this->settings['theme'].'/'.'header', $data);
$this->parser->parse($this->settings['theme'].'/'.'register', $data);
$this->parser->parse($this->settings['theme'].'/'.'footer', $data);
我不想每次都在我的控制器功能中声明$this->parser->parse($this->settings['theme'].'/'.'header', $data);
和$this->parser->parse($this->settings['theme'].'/'.'footer', $data);
。
如何扩展MY_Parser.php
以便我可以像这样使用它:
$this->parser->parse($this->settings['theme'].'/'.'register', $data);
会自动在register.php
和header.php
之间加入footer.php
。
这样做的好处是节省了2行,如果我有20个功能,我可以节省40行。
答案 0 :(得分:1)
只需创建一个函数(可以是帮助器,库扩展或模型):
function tpl($view, $data) {
$this->parser->parse($this->settings['theme'].'/'.'header', $data);
$this->parser->parse($this->settings['theme'].'/'.$view, $data);
$this->parser->parse($this->settings['theme'].'/'.'footer', $data);
}
如果您愿意,可以扩展Parser
并在库文件夹中创建MY_Parser
并执行:
class MY_Parser extends CI_Parser {
function tpl($view, $data) {
$this->parse($this->settings['theme'].'/'.'header', $data);
$this->parse($this->settings['theme'].'/'.$view, $data);
$this->parse($this->settings['theme'].'/'.'footer', $data);
}
}
用法:
$this->parser->tpl($view, $data);
您可以使用$this->parser->parse()
执行此操作,但在覆盖默认方法时需要更多代码,并且引入新方法同样容易。
<强>更新强>
使用MY_Parser
方法,您可能必须通过$this->settings
访问$this->CI->settings
,从而根据此变量的来源,引用CI_Parser
中的CI实例。
答案 1 :(得分:0)
在application / core文件夹中创建具有前缀类名称的类,并按照下面的代码进行操作。如果请求来自ajax,则$ this-&gt; input-&gt; is_ajax_request()将仅加载除页眉和页脚之外的视图。并且在每个控制器中,您需要扩展YOUR-PREFIX_Controller而不是CI_Controller
<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class YOUR-PREFIX_Controller extends CI_Controller {
protected $header_data;
protected $footer_data;
protected $header_view;
protected $footer_view;
public function __construct() {
parent::__construct();
$this->header_view = 'path-to-header';
$this->footer_view = 'path-to-footer';
}
public function _output($output) {
if ($this->input->is_ajax_request()) {
echo ($output);
} else {
echo $this->load->view($this->header_view, $this->header_data, true);
echo ($output);
echo $this->load->view($this->footer_view, $this->footer_data, true);
}
}
}
?>