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}と指定されていることに注意してください。 なぜなら、後者の書き方では単なる文字列を意味し、ブール値ではなくなってしまうからです。

キャッシュタグ

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

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

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

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

この記述は、

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

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

クリップタグ

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

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

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

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

コメントタグ

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

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