ビュー
ビューは単純にはwebページで、ヘッダ・フッタ・サイドバーのようなページの部品のこともあります。実践では、ビューには、他のビューを柔軟に埋め込むことができます(埋め込むこのビューにはさらに他のビューが埋め込まれる、などなど…)。このような階層構造が必要であれば、そうすることができます。
ビューは直接的に呼び出されることはなく、コントローラによって読み込まれる必要があります。 MVC フレームワークにおいては、コントローラが交通整理を行い、それぞれのビューを取り出す責任を持つことを覚えておいてください。コントローラのページをまだ読んでないのなら、続きを読む前に読んでおいてください。
コントローラ のページで作成したサンプルのコントローラを使って、ビューを追加してみましょう。
ビューの作成
テキストエディタを使って blogview.php という名前のファイルを作成し、その中に下記のように打ち込んでください:
次に、application/views/ フォルダにこのファイルを保存します。
ビューの読み込み
それぞれのビューファイルを読み込むには、次のメソッドを使います:
$this->load->view('name');
上のname はビューファイルの名前になります。 Note: .php ファイルの拡張子は不要です。ファイルを指定するために、他のフレームワークなどで .php とするようなことは要りません。
ここで blog.phpという名前で前のセクションで作ったコントローラを開き、 echo 文を次の読み込みメソッドに置き換えてください:
前に使った URL でサイトを見ると、新しいビューが見えるはずです。URLは次に挙げるものと同じです:
example.com/index.php/blog/
複数のビューの読み込み
CodeIgniter は、ひとつのコントローラ内での複数の $this->load->view の呼び出しをかしこく処理します。もし、ひとつ以上の呼び出しがあれば、順に追加されます。例えば、ヘッダビュー、メニュービュー、コンテントビューそしてフッタビューを使いたい場合があります。その場合、以下のようになります:
<?php
class Page extends Controller {
function index()
{
$data['page_title'] = 'Your title';
$this->load->view('header');
$this->load->view('menu');
$this->load->view('content', $data);
$this->load->view('footer');
}
}
?>
上の例では、下の「ビューに動的データを追加する」で説明する動的データを使用しています。
ビューをサブフォルダに保存する
サブフォルダでビューを管理したい場合は、ビューのファイルをサブフォルダに分けて配置することもできます。そうした場合、ビューをロードするときにフォルダ名を含めて指定する必要があります。 例です:
$this->load->view('folder_name/file_name');
ビューに動的データを追加する
ビュー読み込みメソッドの第2引数に 配列またはオブジェクトを渡すやり方で、ビューにデータを渡すことができます。配列を使った例は下記の通りです:
$data = array(
'title' => 'My Title',
'heading' => 'My Heading',
'message' => 'My Message'
);
$this->load->view('blogview', $data);
オブジェクトを使った例は下記の通りです:
$data = new Someclass();
$this->load->view('blogview', $data);
Note: オブジェクトを使う場合クラスの変数が配列の要素に変換されます。
コントローラのファイルでやってみましょう。コントローラを開いて次のコードを追加してください:
では、ビューを開き、テキストの部分を渡したデータの配列のキーと同じ名前の変数に変えます:
次に、前で使ったURLでページを読み込みます。変数が置き換えられているのが見えるはずです。
ループの作成
ビューファイルに渡したデータの配列は、単純な変数だけであるとは限りません。ループして複数の行を生成できるように、多次元配列を渡すこともできます。たとえば、データベースから持ってきたデータ場合、典型的には、多次元配列に整形されています。
以下に例を示します。 次のコードをコントローラに追加します:
ここでビューのファイルを開き、下記のようにループを作成します:
Note: お気付きのように、上の例では、PHPの代替構文を使用しています。PHPの代替構文に慣れていない場合は、こちらを御覧ください。