2012-05-10 5 views
1

私は既存のWebサイトを再編集して、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をdbからプルするナビゲーションモデルを作成し、それを配列に変換しました。私がやろうとしている何

<?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

これを達成するには2つの方法が考えられます。

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

代替オプションは、あなたのコンフィグファイルの設定/ navigation.php

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

でこれを行うことですこのようにして、他の設定と同様にnavigation-configにアクセスすることができます。

関連する問題