Skip to content

Latest commit

 

History

History
85 lines (58 loc) · 4.35 KB

onOutput.wiki

File metadata and controls

85 lines (58 loc) · 4.35 KB

  1. summary アウトプットハンドラ

Table of Contents

導入

onInitでセットされたリソースや値を出力します。display()メソッドでHTMLページを出力する他に、AJAX用JSONやphpシリアライズ、エクセルファイルダウンロードなどアウトプットフォーマットを変えて出力できます。

詳細

HTML出力

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スニッフィング

ページクラス内のコードを変更する事なく、UA(ユーザーエージェント)別のテンプレートを用意できます。「リソースセットはページクラスで同一だが携帯でアクセスした場合とPCでアクセスした場合でテンプレートを出し分ける」という事ができます。たとえばPCでindex.tplというページテンプレートが呼び出されるとき、携帯でアクセスして、「もしindex.mobile.tplというファイルが用意されていれば」携帯用テンプレートで出力されます。テンプレートが用意されているかどうかはページは関知しません。

絵文字、文字コード 

文字コードや絵文字変換はフレームワークが自動的に行なわれます。フォームからサブミットされた文字列も絵文字はエンティティに、文字コードはUTF-8に変換されてページ内で処理できます。通常、ページクラスからユーザーエージェントに応じて文字コードを変換したり、テンプレートを出し分けたりする処理は記述する必要がありません。