- summary アウトプットハンドラ
onInitでセットされたリソースや値を出力します。display()メソッドでHTMLページを出力する他に、AJAX用JSONやphpシリアライズ、エクセルファイルダウンロードなどアウトプットフォーマットを変えて出力できます。
HTMLページとして標準出力する場合はdisplay()メソッドを使います。
$tplは省略できます。省略すればページ名に従ったテンプレートが使われます。例えば`Page_User_Index`という/user/index.phpのページで実行されているとすると、App/views/page/user/index.tplが使用されます。
アウトプットハンドラを省略したときは継承元のBEAR_Page::onOutput()に実装されている以下のコードが実行されます。
|| ページ名 || テンプレートパス || || `Page_Index` || `App/views/page/index.tpl` || || `Page_User_Profile` || `App/views/page/user/profile.tpl` ||
テンプレートは3種類あります。
|| ページテンプレート || (App/views/pages/) || || レイアウトテンプレート || (App/views/layouts/) || || エレメントテンプレート || (App/views/elements/) ||
最低限必要なのはページテンプレートです。ページテンプレートのみが用意されていればそのページテンプレートが全体のHTMLになります。
レイアウトファイルを利用するときはレイアウトテンプレートにページテンプレートの内容が{$content_for_layout}としてアサインされます。※このレイアウト機能は今日の主要フレームワークがほとんど持っているものとほぼ同様のものです。
ページアサインする値でスタティックな値はスタティックバリューとしてページとは別に用意することができます。ページテンプレートの拡張子tplをymlに変えたファイル名にします。
|| ページ名 || テンプレートパス || スタティックバリュー || || `Page_Index` || `App/views/page/index.tpl` || `App/views/page/index.yml` (またはini) ||
携帯アクセスの場合、アサインファイルの中でmobileというセクションが”あれば”defaultセクション(PC)に対して上書きされます。ここでアサインされた値は$layoutという変数でsmartyにアサインされます。
index.yml
とアサインされたものはテンプレートでは
index.tpl
となります。
プログラムから動的にアサインファイルの内容を上書きするにはdisplayの時$options['layout']を使います。
ページクラス内のコードを変更する事なく、UA(ユーザーエージェント)別のテンプレートを用意できます。「リソースセットはページクラスで同一だが携帯でアクセスした場合とPCでアクセスした場合でテンプレートを出し分ける」という事ができます。たとえばPCでindex.tplというページテンプレートが呼び出されるとき、携帯でアクセスして、「もしindex.mobile.tplというファイルが用意されていれば」携帯用テンプレートで出力されます。テンプレートが用意されているかどうかはページは関知しません。
文字コードや絵文字変換はフレームワークが自動的に行なわれます。フォームからサブミットされた文字列も絵文字はエンティティに、文字コードはUTF-8に変換されてページ内で処理できます。通常、ページクラスからユーザーエージェントに応じて文字コードを変換したり、テンプレートを出し分けたりする処理は記述する必要がありません。