2012-05-10 27 views
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配置文件這一模式,導航數組加載到全球$配置陣列。我試圖自動加載模型,並在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 */ 

我不斷收到以下錯誤:

Severity: Notice

Message: Undefined property: CI_Config::$load

Filename: config/navigation.php

Line Number: 3

我怎樣才能最好地實現我所試圖做的?

回答

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(); 
} 
+0

有趣的解決方案。我的第一個問題是,我不需要每一個控制器都可以訪問導航,對我來說這樣設置似乎有點奇怪。導航助手可以工作,但我不確定這是否非常直觀。是否可以設置它,以便導航配置文件像我嘗試的那樣從導航模型中拉出來? – Yev

+0

我不確定,但比較配置和幫助,我認爲幫手更直觀。 –

+0

如果您不希望每個控制器都有權訪問,您可以創建一個功能,例如'MY_Controller'中的'set_navigation()',並只加載到你想要的控制器中。 –

0

另一種選擇是做在您的配置文件中的config/navigation.php

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

這樣你就可以像其他配置一樣訪問導航配置。

相關問題