28February

EthnaでLayoutView

Category: Ethna
今週もEthnaネタを。
ある人がすごくお待ちかねのネタだそうです。

概要

EthnaのViewをRailsとかにあるLayoutに対応させます。
これは結構いろんな人がやっているようです。その一つということで。

Source

http://bobpp.as-roma.com/svn/ethnaLibs/trunk/projBop_Layout_ViewClass.php
こちらになります。

使い方は続きをみてね。

How to Load

libsディレクトリなどに置いてください。include_onceできればどこでもいいですが。
2006年夏頃からのEthnaはプロジェクトジェネレート時にアプリケーション固有のViewClassを作成するので、それの基底クラスを変更することにします。
require_once 'libs/projBop_Layout_ViewClass.php';
class AppID_ViewClass extends projBop_Layout_ViewClass { ... }
このようにしていけばいいかと思います。

Layoutファイルの書き方

レイアウトファイルも通常のテンプレートとあまり変わりません。
1カ所、実際のコンテンツが入る箇所に
{include file=$app.contents_tpl_path} と記述する必要があります。

簡単にテンプレートを書くと、、、
!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>Test!</title>
</head>
<body>
  <h1>Test Site!</h1>
  {include file=$app.contents_tpl_path}
</body>
</html>
このような記述になります。

Layoutの宣言

Layoutの宣言は $_layout プロパティで行います。なので基本的なレイアウトがある場合は、
class AppID_ViewClass extends projBop_Layout_ViewClass {
  var $_layout = 'application';
 
  ...
}
と記述しておけばいいと思います。

また、ViewClassの動作中にレイアウトを変更したい場合は setLayoutメソッドがありますのでそちらをご利用ください。
$this->setLayout("hoge"); このように利用します。

また、レイアウトファイルの置き場所ですが、template/<lang>/layoutがデフォルトです。
変更したい場合は、 $_layout_dir プロパティまたは setLayoutDirectory メソッドを利用してください。

言語に問わずレイアウトが統一の場合の例としては、
// Class定義で決める場合は
class AppID_ViewClass extends projBop_Layout_ViewClass {
  var $_layout_dir = "template/layout";

  ...
}

// 動的に決定する場合などは
$this->setLayoutDirectory("template/layout");
このように変更することができます。

Done.

このようにレイアウトファイルとレイアウトの設定ができればレイアウトを取り込んで出力することになります。
これで同じようなテンプレートのコピペが減ってよりDRYなシステムになるでしょう!

感想・バグなどございましたらぜひコメント等でご連絡ください。
Posted by BoBpp at 18:13:00 |はてなブックマークに追加

Trackback

Trackback
There are currently no trackbacks for this item.
Use this TrackBack url to ping this item (right-click, copy link target). If your blog does not support Trackbacks you can manually add your trackback by using this form.

Comment

コメントがありません

Add Comment

:

:
: