ビュー
====

ビューは主にユーザインタフェースの要素によって構成される PHP スクリプトです。
ビューには PHP 文を含める事ができますが、その PHP 文でデータモデルを変更すべきではなく、また、比較的シンプルなものに留めておくことを推奨します。
ロジック部とプレゼンテーション部の分離の精神に基づいて、ロジックの大部分はビューではなく、コントローラかモデルに置くべきです。

ビューは、描画の際にビュースクリプトファイルを識別するために使われる名前を持ちます。
ビューの名前はビュースクリプトファイル名と同じです。
たとえば、ビュー `edit` は `edit.php` という名前のビュースクリプトファイルを参照します。
ビューを描画するためには、ビュー名を引数にして [CController::render()] をコールします。
このメソッドは `protected/views/ControllerID` ディレクトリ下にある、対応するビューファイルを探します。

ビュースクリプト中では、`$this` を使用してコントローラインスタンスへのアクセスが可能です。
従って、ビューの中では `$this->propertyName` という形でコントローラのプロパティを参照できます。

さらに、データをビューに渡すために、次の方法を使用することができます: 

~~~
[php]
$this->render('edit', array(
	'var1'=>$value1,
	'var2'=>$value2,
));
~~~

上記では、[render()|CController::render] メソッドは 2 番目の配列のパラメータを変数へ展開します。
その結果、ビュースクリプト内では、ローカル変数 `$var1` と `$var2` としてアクセスできます。

レイアウト
------

レイアウトは、ビューを装飾するために使用される特別なビューで、通常、いくつかのビューに共通しているユーザインタフェースの部分を含みます。
たとえば、以下のように、レイアウトはヘッダーとフッターを含み、その間にビューを埋め込むことが出来ます。

~~~
[php]
...... ここにヘッダ ......
<?php echo $content; ?>
...... ここにフッタ ......
~~~

ここで、`$content` がビューのレンダリング結果を格納するものです。

レイアウトは [render()|CController::render] をコールするとき、暗黙に適用されます。
デフォルトでは、ビュースクリプト `protected/views/layouts/main.php` がレイアウトとして使用されます。
これは、 [CWebApplication::layout] か [CController::layout] のいずれかを変更することで、カスタマイズ可能です。
レイアウトを適用せずにビューの描画を行うには、代わりに [renderPartial()|CController::renderPartial] をコールします。

ウィジェット
------

ウィジェットは、[CWidget] か [CWidget] の子クラスのインスタンスです。
これは、主に表示的な用途を持つコンポーネントです。
ウィジェットは、通常、複雑ではあっても自己完結したユーザインタフェースを生成するためにビュースクリプトに埋め込まれます。
たとえば、カレンダーウィジェットは複雑なカレンダーユーザインタフェースを表示させるために使用出来ます。
ウィジェットは、ユーザインタフェースコードの再利用性を高めてくれます。

ウィジェットを使うには、ビュースクリプト内で以下のようにします:

~~~
[php]
<?php $this->beginWidget('path.to.WidgetClass'); ?>
...ウィジェットによりキャプチャされる本文 (body content)...
<?php $this->endWidget(); ?>
~~~

または

~~~
[php]
<?php $this->widget('path.to.WidgetClass'); ?>
~~~

後の方法は、ウィジェットが本文 (body content) を必要としないときに用いられます。

ウィジェットを構成して挙動をカスタマイズするためには、[CBaseController::beginWidget] もしくは [CBaseController::widget] を呼び出す際に、プロパティの初期値を設定します。
たとえば、[CMaskedTextField] ウィジェットを使用する際に、使用されるマスクを指定したい場合は、下記のように、プロパティの初期値を配列として渡します。
ここで、配列のキーはプロパティ名、配列の値は対応するウィジェットプロパティの初期値です。 

~~~
[php]
<?php
$this->widget('CMaskedTextField',array(
	'mask'=>'99/99/9999'
));
?>
~~~

新しいウィジェットを定義するには、[CWidget] を継承し、[init()|CWidget::init] と [run()|CWidget::run] メソッドを上書きします: 

~~~
[php]
class MyWidget extends CWidget
{
	public function init()
	{
		// CController::beginWidget() によってこのメソッドが呼ばれる
	}

	public function run()
	{
		// CController::endWidget() によってこのメソッドが呼ばれる
	}
}
~~~

コントローラのように、ウィジェットはそれ自身のビューを持つことができます。
デフォルトでは、ウィジェットのビューファイルは、そのビューファイルのあるディレクトリの `views` サブディレクトリに位置します。
コントローラと同じように、ビューは [CWidget::render()] を呼び出すことで描画させることができます。
唯一の違いは、ウィジェットビューにはレイアウトを適用できないことです。
さらにビュー中の `$this` はコントローラインスタンスを参照するのではなく、このウィジェットインスタンスを参照します。

> Tip|ヒント: [CWidgetFactory::widgets] を使ってサイト全体のレベルでウィジェットを初期構成すると、基本になる設定を非常に楽に構成することができます。
> 詳細については [テーマ](/doc/guide/topics.theming#sec-5) のページを参照して下さい。

システムビュー
-----------

システムビューは、Yii によってエラーやロギング情報を表示するために使用されるビューです。
たとえば、存在しないコントローラやアクションがユーザによりリクエストされた場合、
Yii はそのエラーを説明する例外を投げ、特定のシステムビューを使用して、その例外を表示します。

システムビュー名は、いくつかのルールに基づきます。
`errorXXX` のような名前は、エラーコード `XXX` の [CHttpException] エラー表示のためのビューを指します。
たとえば、もし [CHttpException] がエラーコード404により発生した場合、`error404` ビューが表示されます。

Yii は `framework/views` 以下に、1セットのデフォルトシステムビューを提供します。
システムビューをカスタマイズしたい場合、`protected/views/system` 以下に、同じファイル名のビューファイルを作成してください。
