16

サイト全体に存在する必要があるデータを含む変数があります。このデータを各コントローラーの各ビューに渡す代わりに、このデータをサイト内のすべてのビューで利用できるようにする方法があるかどうか疑問に思っていました。

PD.このデータをセッション変数 / ci セッション Cookie として保存することはできません。

本当にありがとう。

4

8 に答える 8

16

Base Controller を作成するには、CI_Controller を拡張する必要があります。

https://www.codeigniter.com/user_guide/general/core_classes.html

コア/MY_Controller.php

<?php

class MY_Controller extend CI_Controller {

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

         //get your data
         $global_data = array('some_var'=>'some_data');

         //Send the data into the current view
         //http://ellislab.com/codeigniter/user-guide/libraries/loader.html
         $this->load->vars($global_data);

     }  
}

コントローラー/welcome.php

 class Welcome extend MY_Controller {
      public function index() {
          $this->load->view('welcome');
      }
 }

ビュー/welcome.php

var_dump($some_var);

注:関数またはコントローラーでこの変数を取得するには、次を使用できます$this->load->get_var('some_var')

于 2013-04-23T14:14:08.190 に答える
1

これが変数 (値が変化し続ける) でない場合は、apps ディレクトリの config ディレクトリの下にある constant.php ファイルに定数を作成することをお勧めします。変数が変化し続ける場合は、カスタム コントローラーを作成することをお勧めします。コア フォルダー (存在しない場合は、apps フォルダーの下にフォルダー "core" を作成します)。ここに記載されているように、他のコントローラーでいくつかの変更を行う必要があります。新しいコントローラーを「CI_Controller」クラスで拡張します。例

open-php-tag if ( ! defined('BASEPATH')) exit('スクリプトへの直接アクセスは許可されていません'); class LD_Controller extends CI_Controller { } close-php-tag

ここでLD_は私のカスタム キーワードです。変更したい場合は、次のように config.php ファイルの 112 行目で変更できます。すべてのコントローラーでこのクラスを「class Mynewclass extends LD_Controller..」として拡張します。LD_controller では、値の変数/配列を定義するメソッドを記述し、ここに示すようにアプリケーション全体でその配列を呼び出す必要があります。 : 変数の定義 : var $data = array(); Model クラスを介して db から値を取得するメソッド:

function getbooks()
{
   $books =   $this->mybooks_model->getbooks(); //array of records
   $this->data = array('books'=>$books);
}

ビューでこの変数を呼び出すには: print_r($this->data['books']);); すべての配列値を取得します... ここで、少なくとも 1 つの「$data」パラメーターを渡す必要があることを確認する必要があります。問題がなければ、この $data パラメーターをビューに定義できます。 load->view('mybookstore',$data);

その後、それは絶対に問題なく動作します,,, 共有するのが大好きです...一緒に働く友達を楽しんでください

于 2014-08-16T13:28:07.837 に答える
0

コントローラーでセッションを使用する

$this->session->set_userdata('data');

次に、それらをビューに表示します

$this->session->userdata('data');

または、index.php などのベース ビュー ファイルにページを含めます。

include "page.php";

次にpage.phpで、

$this->session->userdata('data');任意の要素または div に追加

次に、これはすべてのビューに表示されます

于 2015-03-18T18:47:16.073 に答える
0

私はすべての回答を読みましたが、最善のアプローチはフックを使用することです。

  1. フックを作成し、新しいメッセージを取得しましょう:

    class NewMessages {
        public function contact()
        {
            // Get CI instance CI_Base::get_instance();
            $CI = &get_instance(); // <-- this is contoller in the matter of fact
            $CI->load->database();
    
            // Is there new messages?
            $CI->db->where(array('new' => 1));
            $r = $CI->db->count_all_results('utf_contact_requests');
    
            $CI->load->vars(array('new_message' => $r));
        }
    }
    
  2. 「post_controller_constructor」など、いくつかのフロー ポイントにアタッチします。このようにして、コントローラーがインスタンス化されるたびにロードされます。

    $hook['post_controller_constructor'][] = array(
        'class'    => 'NewMessages',
        'function' => 'contact',
        'filename' => 'NewMessages.php',
        'filepath' => 'hooks',
        'params'   => array(),
    );
    
  3. これで、すべてのビューまたはテンプレートで変数 $new_message にアクセスできます。

それと同じくらい簡単です:)

于 2018-06-23T16:32:09.957 に答える