サイト全体に存在する必要があるデータを含む変数があります。このデータを各コントローラーの各ビューに渡す代わりに、このデータをサイト内のすべてのビューで利用できるようにする方法があるかどうか疑問に思っていました。
PD.このデータをセッション変数 / ci セッション Cookie として保存することはできません。
本当にありがとう。
サイト全体に存在する必要があるデータを含む変数があります。このデータを各コントローラーの各ビューに渡す代わりに、このデータをサイト内のすべてのビューで利用できるようにする方法があるかどうか疑問に思っていました。
PD.このデータをセッション変数 / ci セッション Cookie として保存することはできません。
本当にありがとう。
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')
これが変数 (値が変化し続ける) でない場合は、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);
その後、それは絶対に問題なく動作します,,, 共有するのが大好きです...一緒に働く友達を楽しんでください
コントローラーでセッションを使用する
$this->session->set_userdata('data');
次に、それらをビューに表示します
$this->session->userdata('data');
または、index.php などのベース ビュー ファイルにページを含めます。
include "page.php";
次にpage.phpで、
$this->session->userdata('data');
任意の要素または div に追加
次に、これはすべてのビューに表示されます
私はすべての回答を読みましたが、最善のアプローチはフックを使用することです。
フックを作成し、新しいメッセージを取得しましょう:
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));
}
}
「post_controller_constructor」など、いくつかのフロー ポイントにアタッチします。このようにして、コントローラーがインスタンス化されるたびにロードされます。
$hook['post_controller_constructor'][] = array(
'class' => 'NewMessages',
'function' => 'contact',
'filename' => 'NewMessages.php',
'filepath' => 'hooks',
'params' => array(),
);
これで、すべてのビューまたはテンプレートで変数 $new_message にアクセスできます。
それと同じくらい簡単です:)