我正在改编现有网站以使用codeigniter。当前系统使用以下格式的XML将导航配置存储在单个表格单元格中:
<NAVIGATION>
<item1>
<id>1</id>
<name>Home</name>
<link></link>
<parent>0</parent>
<target>_self</target>
<rel>follow</rel>
<menu>main</menu>
</item1>
<item2>
<id>2</id>
<name>Some Page</name>
<link>some-page</link>
<parent>0</parent>
<target></target>
<rel>follow</rel>
<menu>main</menu>
</item2>
</NAVIGATION>
我不确定原始开发人员的想法是什么,但由于原因仍然无法解释,我现在想维持这种格式。
我创建了一个导航模型,它从数据库中提取此XML并将其转换为数组。
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Navigation_model extends CI_Model
{
function __construct()
{
parent::__construct();
}
function get_navigation()
{
$this->db->select('pages.block');
$this->db->from('pages');
$this->db->join('style','style.styleID = pages.styleID','left');
$this->db->where('style.name','data');
$this->db->where('pages.locID',$this->config->item('splitID'));
$this->db->like('pages.block','<NAVIGATION>');
$navigation_query = $this->db->get();
$navigation_row = $navigation_query->row_array();
return xml2array($navigation_row['block']);
}
}
/* End of file navigation_model.php */
/* Location: ./application/model/navigation_model.php */
我正在尝试做的是将此模型加载到名为navigation.php的配置文件中,并将导航数组加载到全局$ config数组中。我尝试了自动加载模型并在navigation.php中加载,但无济于事。
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
$this->load->model('Navigation_model');
var_dump($this->Navigation_model->get_navigation());
/* End of file navigation.php */
/* Location: ./application/config/navigation.php */
我一直收到以下错误:
严重性:注意
消息:未定义属性:CI_Config :: $ load
文件名:config / navigation.php
行号:3
我怎样才能最好地完成我想做的事情?
答案 0 :(得分:0)
我可以通过两种方式来思考。
<强> 1。扩展CI_Controller
通过这种方式,您可以创建一个扩展基本控制器功能的类,自动加载模型并向子类提供获取菜单的方法。
class MY_Controller extends CI_Controller {
protected $navigation;
function __construct() {
parent::__construct();
$this->load_config();
}
protected function load_config() {
$this->load->model('Navigation_model');
$this->navigation = $this->Navigation_model->get_navigation();
}
}
<强> 2。提供导航帮助
通过帮助程序,您可以轻松获取所需位置的导航内容。
navigation_helper.php
function get_navigation() {
$ci =& get_instance();
$ci->load->model('Navigation_model');
return $ci->Navigation_model->get_navigation();
}
在你的控制器中:
function index() {
$this->load->helper('navigation'); //or autoload...
$nav = get_navigation();
}
答案 1 :(得分:0)
另一种选择是在config-file config / navigation.php中执行此操作
$CI =& get_instance();
$CI->load->model('navigation');
$config = $CI->navigation->get_navigation();
这样您就可以像任何其他配置一样访问navigation-config。