0 follower

他のテンプレートシステムを使う

Yii では開発者が好みのテンプレート (例: Prado や Smarty など) を使ってビューを書くことができます。 これは viewRenderer を作成して、コンポーネントに追加することで可能になります。 ビューレンダラは CBaseController::renderFile の呼び出しを横取りして、ビューファイルをカスタマイズされたテンプレート文法でコンパイルし、結果を表示します。

情報: カスタマイズされたテンプレート文法を利用するのは、再利用される可能性が低いビューを書く場合に限ることをおすすめします。 そうしないと、ビューを再利用しようとする人に対して、カスタマイズされたテンプレート文法の使用を強制することになります。

以下に CPradoViewRenderer を使う方法を示します。 このビューレンダラを使うと、ビューを Prado framework と似た文法で書くことができます。 独自のレンダラを開発したい場合は、 CPradoViewRenderer は良い参考になるでしょう。

1. CPradoViewRenderer を使う

CPradoViewRenderer を使うには、以下のようにアプリケーション設定を変更する必要があります。

return array(
    'components'=>array(
        ......,
        'viewRenderer'=>array(
            'class'=>'CPradoViewRenderer',
        ),
    ),
);

デフォルトでは、CPradoViewRenderer はビューファイルをコンパイルした結果を runtime ディレクトリ以下に保存します。 ビューテンプレートが変更された場合のみ、コンパイルされたファイルが再生成されるので、CPradoViewRenderer を使ってもパフォーマンスの低下はほんの少しです。

ヒント: CPradoViewRenderer では、主にビューの記述を簡単かつすばやくできる新しいタグを導入しますが、それらを使わずに PHP コードをそのまま書くことも可能です。

以下では CPradoViewRenderer で利用可能なテンプレートタグを紹介します。

ショート PHP タグ

ショート PHP タグは、ビューで PHP コードを書く際のショートカットです。 <%= expression %> という出力タグは、<?php echo expression ?> と同じ意味です。 <% statement %> という宣言タグは、<?php statement ?> と同じ意味です。 たとえば、

<%= CHtml::textField($name,'value'); %>
<% foreach($models as $model): %>

というタグは、

<?php echo CHtml::textField($name,'value'); ?>
<?php foreach($models as $model): ?>

と同じです。

コンポーネントタグ

コンポーネントタグは widget をビューに挿入する際に利用されます。 以下のような文法で利用します。

<com:WidgetClass property1=value1 property2=value2 ...>
    // ウィジェットの body content
</com:WidgetClass>
 
// body content なしのウィジェット
<com:WidgetClass property1=value1 property2=value2 .../>

ここで、WidgetClass はウィジェットクラスの名前、またはクラスの パスエイリアス を指定します。 プロパティの初期値は、引用符号で囲まれた文字列か、中括弧で囲まれた PHP コードで指定することが可能です。 例えば、

<com:CCaptcha captchaAction="captcha" showRefreshButton={false} />

この内容は、

<?php $this->widget('CCaptcha', array(
    'captchaAction'=>'captcha',
    'showRefreshButton'=>false)); ?>

このように翻訳されます。

注意: showRefreshButtonの値が、"false" ではなく、{false} と指定されていることに注意してください。 なぜなら、前者の書き方では単なる文字列を意味し、ブール値ではなくなってしまうからです。

キャッシュタグ

キャッシュタグは フラグメントキャッシュ を利用するためのショートカットです。 以下のように書きます。

<cache:fragmentID property1=value1 property2=value2 ...>
    // キャッシュされる内容
</cache:fragmentID >

fragmentID がキャッシュされる内容を一意に決定する識別子です。 プロパティと値のペアでキャッシュの設定を指定します。 例えば、

<cache:profile duration={3600}>
    // ユーザプロファイル情報
</cache:profile >

この記述は、

<?php if($this->beginCache('profile', array('duration'=>3600))): ?>
    // ユーザプロファイル情報
<?php $this->endCache(); endif; ?>

このように翻訳されます。

クリップタグ

キャッシュタグと同じように、クリップタグはビューファイルで CBaseController::beginClipCBaseController::endClip を呼ぶためのショートカットです。 以下のように記述します。

<clip:clipID>
    // クリップされる内容
</clip:clipID >

clipID がクリップされる内容を一意に決定する識別子です。

<?php $this->beginClip('clipID'); ?>
    // クリップされる内容
<?php $this->endClip(); ?>

コメントタグ

コメントタグはビューで開発者のみが読めるコメントを書くために使われます。 コメントタグはビューがユーザに表示されたときにはなくなっています。 以下のように記述します。

<!---
ビューコメントは取り除かれます
--->

2. テンプレート形式を混用する

バージョン 1.1.2 以降、何らかの代替テンプレート文法を通常の PHP 文法と併用することが可能になりました。 そうするためには、インストールされているビューレンダラの CViewRenderer::fileExtension プロパティを .php 以外の値に構成する必要があります。 例えば、プロパティを .tpl と設定すると、.tpl で終るすべてのビューファイルがインストールされたビューレンダラを使って表示され、一方、.php で終るその他のすべてのビューファイルは通常の PHP ビュースクリプトとして取り扱われることになります。

Found a typo or you think this page needs improvement?
Edit it on github !