1

我正在改装现有网站以使用 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

我怎样才能最好地完成我想做的事情?

4

2 回答 2

0

另一种选择是在您的配置文件 config/navigation.php 中执行此操作

 $CI =& get_instance();
 $CI->load->model('navigation');
 $config = $CI->navigation->get_navigation();

这样,您将能够像访问任何其他配置一样访问导航配置。

于 2012-05-10T20:33:48.843 回答
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();
}
于 2012-05-10T16:22:25.093 回答