mirror of
https://github.com/yiisoft/yii.git
synced 2026-03-09 01:26:53 +01:00
142 lines
6.6 KiB
Plaintext
142 lines
6.6 KiB
Plaintext
ビュー
|
|
====
|
|
|
|
ビューは主にユーザインターフェースの要素によって定義される 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]
|
|
......header here......
|
|
<?php echo $content; ?>
|
|
......footer here......
|
|
~~~
|
|
|
|
`$content` にはコンテントビューのレンダリング結果を格納します。
|
|
|
|
レイアウトは [render()|CController::render] をコールするとき、
|
|
暗黙に適用されます。
|
|
デフォルトでは、ビュースクリプト `protected/views/layouts/main.php` が
|
|
レイアウトとして使用されます。これは、 [CWebApplication::layout] か
|
|
[CController::layout] のいずれかを変更することで、カスタマイズ可能です。
|
|
レイアウトを適用せずにビューの描画を行うには、
|
|
代わりに [renderPartial()|CController::renderPartial] をコールします。
|
|
|
|
ウィジェット
|
|
------
|
|
|
|
ウィジェットは、[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()
|
|
{
|
|
// this method is called by CController::beginWidget()
|
|
}
|
|
|
|
public function run()
|
|
{
|
|
// this method is called by CController::endWidget()
|
|
}
|
|
}
|
|
~~~
|
|
|
|
コントローラのように、ウィジェットはそれ自身のビューを持つことができます。
|
|
デフォルトでは、ウィジェットのビューファイルは、
|
|
そのビューファイルのあるディレクトリの `views` サブディレクトリに位置します。
|
|
コントローラと同じように、ビューは [CWidget::render()] を呼び出すことで
|
|
描画させることができます。
|
|
唯一の違いは、ウィジェットビューにはレイアウトを適用できないことです。
|
|
|
|
システムビュー
|
|
-----------
|
|
|
|
システムビューは、Yii によってエラーやロギング情報を表示するために、
|
|
使用されるビューです。たとえば、存在しないコントローラやアクションが
|
|
ユーザによりリクエストされた場合、Yii はそのエラーを説明する例外を投げ、
|
|
特定のシステムビューを使用して、その例外を表示します。
|
|
|
|
システムビュー名は、いくつかのルールに基づきます。`errorXXX` のような名前は、
|
|
エラーコード `XXX` の [CHttpException] エラー表示のためのビューを指します。
|
|
たとえば、もし [CHttpException] がエラーコード404により発生した場合、
|
|
`error404` ビューが表示されます。
|
|
|
|
Yii は `framework/views` 以下に、1セットのデフォルトシステムビューを提供します。
|
|
システムビューをカスタマイズしたい場合、 `protected/views/system` 以下に、
|
|
同じファイル名のビューファイルを作成してください。
|
|
|
|
<div class="revision">$Id: basics.view.txt 416 2008-12-28 05:28:11Z qiang.xue $</div> |