Skip to content

Latest commit

 

History

History
86 lines (60 loc) · 4.38 KB

onOutput.md

File metadata and controls

86 lines (60 loc) · 4.38 KB

導入

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

詳細

HTML出力

HTMLページとして標準出力する場合はdisplay()メソッドを使います。

public function onOutput()
{
  $this->display($tpl);
}

$tplは省略できます。省略すればページ名に従ったテンプレートが使われます。例えばPage_User_Indexという/user/index.phpのページで実行されているとすると、App/views/page/user/index.tplが使用されます。

アウトプットハンドラを省略したときは継承元のBEAR_Page::onOutput()に実装されている以下のコードが実行されます。

    public function onOutput()
    {
        $this->display();
    }

ページ名とテンプレート名

ページ名 テンプレートパス
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

default:
 body:
  color: 青

とアサインされたものはテンプレートでは

index.tpl

ボディカラーは{$layout.body.color}です

となります。

プログラムから動的にアサインファイルの内容を上書きするにはdisplayの時$options['layout']を使います。

// DSi用レイアウトファイルを使用
$options['layout'] = array('layout'=>'index.dsi.tpl');
$this->display(null, $options); 

UAスニッフィング

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

絵文字、文字コード

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