0

私はCodeIgniterテンプレートシステムを見てきましたが、これまではヘッダーまたはフッターファイル内のコンテンツを変更できますが、モデルからヘッダーファイルにデータを自動的に読み込む方法を探しています(テンプレートによって異なります)。 )。

たとえば、私のヘッダーには、ユーザーのユーザー名と受信トレイが表示されます。モデルからの未読メッセージとユーザーのユーザー名をロードする必要があります。ただし、これはテンプレートによって異なります。ユーザーがログインしている場合にのみ、その情報をロードしたいと思います。

4

3 に答える 3

1

モデルからビューにデータを渡すことはお勧めできません。

最初にコントローラーにデータを渡し、次にビューに渡す必要があります。

http://codeigniter.com/user_guide/overview/appflow.html

このアプリケーション フロー チャートでわかるように、モデルとビューの間に直線はありません。

「レイアウト」にモデル データを表示することに関心がある場合は、フックを使用してください。

http://codeigniter.com/user_guide/general/hooks.html

「pre_controller」フックを定義し、CI インスタンスを取得し、モデルをロードし、データを取得してレイアウトに表示します。

フックを有効にする

$config['enable_hooks'] = TRUE;

次のようなフックを定義します。

$hook['pre_controller'] = array(
                                'class'    => 'MyClass',
                                'function' => 'Myfunction',
                                'filename' => 'Myclass.php',
                                'filepath' => 'hooks',
                                'params'   => array('beer', 'wine', 'snacks')
                                );

例えば

<?php

if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Gamescount
{
        private $model_name = '';

        public function __construct() 
        {
                $this->CI =& get_instance();
                $this->model_name = 'Games_model';
                $this->CI->load->database();
                $this->CI->load->model($this->model_name);
                $this->CI->load->helper('url');
        }

        public function count_games()
        {
                $all_games = $this->CI->Games_model->getAllGames();
                $this->CI->gamescount = count($all_games);
        }
}

?>

レイアウトでは、次のように gamescount 値を取得できます

<?php echo $this->gamescount; ?>
于 2012-07-14T15:19:57.073 に答える
0

コントローラーでデータを取得し、AJAX を介して読み込んでヘッダーに表示するコードを実装します。これは、Codeigniter の慣行を破ることなく実行可能なソリューションです。

于 2012-07-14T16:43:17.190 に答える
-1

Parker が述べたように、ビューからモデルを呼び出すのは得策ではありません。でも、それでもやりたいと思えばできる。

次のように Codeigniter インスタンスを取得します

$CI =& get_instance();

Codeigniter インスタンスを使用して、モデルを呼び出すことができます。

于 2012-07-14T15:28:52.247 に答える