2

私はコードイグナイターの初心者です。mysql データベースを使用してアプリケーションを作成しようとしています。私のサイトでは、メニューを次のように使用したい:

+Homepage
+About
+Services
  +Education services
  +neurofeedback
  +biofeedback

理解するには情報が必要です。ページコントローラーをメインページコントローラーとして使用します。

<?php 

class Pages extends CI_Controller {

        public function view($page = 'home')
        {$this->load->view('templates/header', $data);
        $this->load->view('pages/'.$page, $data);
        $this->load->view('templates/footer', $data);

私の質問は次のとおりです。

1) メニュー コントローラーをページ コントローラー内または別のコントローラー内にコーディングする必要がある場所はどこですか?

2) データベースからメニュー コントローラを作成するにはどうすればよいですか?

3) メニュー ID とページ ID を関連付けるにはどうすればよいですか?

私は多くの研究を行いましたが、もう少し理解する必要があります。

ご協力ありがとうございました。

編集:あなたが言うように、私は MY_Controller を使用しました。

これは私のページコントローラーです:

class Home extends MY_Controller {
         function __construct() {
    parent::__construct();
  }

        public function view($page = 'home')
        {
         $this->load->helper('text');
            $data['records']= $this->services_model->getAll();
            if ( ! file_exists('application/views/pages/'.$page.'.php'))
            {
                // Whoops, we don't have a page for that!
                show_404();
            }

            $data['title'] = ucfirst($page); // Capitalize the first letter


            $this->load->view('pages/'.$page, $data);


        }

}
4

1 に答える 1

5

メニューコントローラーは、ページコントローラー内または別のコントローラー内にコーディングする必要がありますか?

すべてのページが従わなければならないテンプレートがあると仮定すると、これを行うことをお勧めします。

1. 基本コントローラーを作成する

./application/core/ フォルダーに、MY_Controller というファイルを作成します。

class MY_Controller extends CI_Controller {

  protected $data = array();

  function __construct() {
    parent::__construct();
  }

  function render_page($view) {
    //do this to don't repeat in all controllers...
    $this->load->view('templates/header', $this->data);
    //menu_data must contain the structure of the menu...
    //you can populate it from database or helper
    $this->load->view('templates/menu', $menu_data);
    $this->load->view($view, $this->data);
    $this->load->view('templates/footer', $this->data);
  }

}

2. 各ページに 1 つのコントローラーを作成し、CI_Controller の代わりに MY_Controller を使用します。

class Homepage extends MY_Controller {
  function __construct() {
    parent::__construct();
  }

  function index() {
    //define data that the view can access
    $this->data['someDataToView'] = 'Some data';
    $this->render_page('pages/homepage');
  }

}

データベースからメニュー コントローラを作成するにはどうすればよいですか?

さて、メニュー用のコントローラーはありませんが、代わりにビューがあります。

メニューの可能性

  1. メニューのビューを作成し、MY_Controller のデータベースからレコードをロードし、ビューをロードしますrender_page()
  2. メニューのビューを作成し、メニュー構造を定義して MY_Controller で使用するヘルパーrender_page()関数を作成し、ビューを にロードします。

メニュー テンプレートの例 (シナリオに合わせて調整):

./application/views/templates/menu.php

<ul>
<?php foreach($menus as $menu): ?>
  <li><a href='<?php print $menu["url"] ?>'><?php print $menu["title"] ?></a></li>
<?php endforeach; ?>
</ul>

編集

Home コントローラーを考えると、エラーは file_exists チェックにあると思います。変更したホーム コントローラーを確認します。

class Home extends MY_Controller {
  function __construct() {
    parent::__construct();
  }

   public function view($page = 'home') {
     $this->load->helper('text');
     //always use $this->data
     $this->data['records']= $this->services_model->getAll();
     if ( ! file_exists(APPPATH.'views/pages/'.$page.'.php'))
     {
       //check the content of APPPATH.'views/pages/'.$page.'.php'
       // Whoops, we don't have a page for that!
       show_404();
     }

     $this->data['title'] = ucfirst($page); // Capitalize the first letter

     //if you use the MY_Controller, check the render_page function...
     //$this->load->view('pages/'.$page, $data);
     $this->render_page('pages/'.$page)
   }
}
于 2012-08-01T03:15:06.727 に答える