1

codeigniter で動作するように既存の Web サイトを再調整しています。現在のシステムは、次の形式の 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

これを達成するには、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();
}
于 2012-05-10T16:22:25.093 に答える
0

別のオプションは、構成ファイル config/navigation.php でこれを行うことです

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

このようにして、他の構成と同様にナビゲーション構成にアクセスできます。

于 2012-05-10T20:33:48.843 に答える