94
eZ Publish実装 はじめの一歩 藤田 拓 @teilnehmen http://teilnehmen.jp Sunday, March 28, 10

eZ Publish 実装 はじめの一歩

Embed Size (px)

DESCRIPTION

2009年10月7日に行ったeZ Publish 徹底勉強会で使ったスライドをちょっと手直ししてアップします。「eZ Publish 徹底勉強会(2009/10/7開催)http://atnd.org/events/1667

Citation preview

Page 1: eZ Publish 実装 はじめの一歩

eZ Publish実装はじめの一歩

藤田 拓 @teilnehmenhttp://teilnehmen.jp

Sunday, March 28, 10

Page 2: eZ Publish 実装 はじめの一歩

eZでは何もかもがオブジェクト!なのでクラスでいろいろ管理

eZではオーバーライドで変更!eZではテンプレートと設定もオーバーライドで変更します。

なのでオリジナルは絶対さわらないように!

eZ3大ポイント!

siteaccssで複数の見せ方を!管理画面、公開画面、ステージ画面、携帯用画面等々

Sunday, March 28, 10

Page 3: eZ Publish 実装 はじめの一歩

クラスとオブジェクト

自動車クラス

タイヤクラス

窓クラス

ヘッドライトクラス

自動車クラスはいろいろなクラスから成り立っています。自動車クラスはいろいろな変数を持っています。

自動車クラスに具体的なオブジェクトや値を与えると自動車オブジェクトになります。

全長

全高

名前

eZでは何もかもがオブジェクト!

Sunday, March 28, 10

Page 4: eZ Publish 実装 はじめの一歩

どうやらヘッドライトや窓は必須じゃないらしい。。

逆に名前や全長等はこの世に存在するあらゆるものに与件としてあるもの。

スラスト SSC

(Thrust SSC, SuperSonic Car)

イギリスで設計・製作されたジェットエンジン搭載の自動車。

http://ja.wikipedia.org/wiki/%E3%82%B9%E3%83%A9%E3%82%B9%E3%83%88SSC

開発には Richard Noble、Glynne Bowsher、Ron Ayers、Jeremy Blissらが携わった。1997年10月15日、アメリカ合衆国ネバダ州において時速1,227.985キロメートル(時速763マイル)の自動車の速度記録を打ち立てた。この数値はマッハ1.016であり、世界で初めて音速を超える公式記録を残した自動車でもある。運転はイギリス空軍中佐のアンディ・グリーンが務めた。

クラスとオブジェクトeZでは何もかもがオブジェクト!

自動車オブジェクト

Sunday, March 28, 10

Page 5: eZ Publish 実装 はじめの一歩

コンテンツクラスeZでは何もかもがオブジェクト!

ページスタック

ページ

ページ

ページスタック

ページ

ページ ユーザーアセット

Sunday, March 28, 10

Page 6: eZ Publish 実装 はじめの一歩

記事(

Article)

クラス

eZでは何もかもがオブジェクト!

Sunday, March 28, 10

Page 7: eZ Publish 実装 はじめの一歩

記事(

Article)

オブジェクト

= 記事ページ

eZでは何もかもがオブジェクト!

Sunday, March 28, 10

Page 8: eZ Publish 実装 はじめの一歩

記事(

Article)

クラス設定 1

eZでは何もかもがオブジェクト!

Sunday, March 28, 10

Page 9: eZ Publish 実装 はじめの一歩

記事(

Article)

クラス設定 2

eZでは何もかもがオブジェクト!

Sunday, March 28, 10

Page 10: eZ Publish 実装 はじめの一歩

画像(

Image)

クラス

eZでは何もかもがオブジェクト!

Sunday, March 28, 10

Page 11: eZ Publish 実装 はじめの一歩

画像(

Image)

オブジェクト

= 画像ページ

eZでは何もかもがオブジェクト!

Sunday, March 28, 10

Page 12: eZ Publish 実装 はじめの一歩

画像(

Image)

クラス設定 1

eZでは何もかもがオブジェクト!

Sunday, March 28, 10

Page 13: eZ Publish 実装 はじめの一歩

画像(

Image)

クラス設定 2

eZでは何もかもがオブジェクト!

Sunday, March 28, 10

Page 14: eZ Publish 実装 はじめの一歩

ユーザー(

User)

クラス

eZでは何もかもがオブジェクト!

Sunday, March 28, 10

Page 15: eZ Publish 実装 はじめの一歩

ユーザー(

User)

オブジェクト

= ユーザーページ

eZでは何もかもがオブジェクト!

Sunday, March 28, 10

Page 16: eZ Publish 実装 はじめの一歩

ユーザー(

User)

クラス設定 1

eZでは何もかもがオブジェクト!

Sunday, March 28, 10

Page 17: eZ Publish 実装 はじめの一歩

ユーザー(

User)

クラス設定 2

eZでは何もかもがオブジェクト!

Sunday, March 28, 10

Page 18: eZ Publish 実装 はじめの一歩

記事クラスに属性(Attribute)を追加してみる :設定

行列データタイプで「属性の追加」

追加されると下記のような入力画面がでてきて、必要事項を入力

eZでは何もかもがオブジェクト!

Sunday, March 28, 10

Page 19: eZ Publish 実装 はじめの一歩

記事クラスに属性(Attribute)を追加してみる:入力

eZでは何もかもがオブジェクト!

Sunday, March 28, 10

Page 20: eZ Publish 実装 はじめの一歩

記事クラスに属性(Attribute)を追加してみる:出力

eZでは何もかもがオブジェクト!

出力されない、、理由:テンプレートで行列データタイプを表示させるための記述がないから表示させるにはテンプレートに{attribute_view_gui attribute=$node.data_map.spec}とか書くとでてくる

Sunday, March 28, 10

Page 21: eZ Publish 実装 はじめの一歩

実際、eZのオブジェクトはどんなデータを持っているのか?

eZでは何もかもがオブジェクト!

http://ez.no/doc/ez_publish/technical_manual/4_x

ezauthorezbasketezbinaryfileezcontentbrowsebookmarkezcontentbrowserecentezcontentclassezcontentclassattributeezcontentclassclassgroupezcontentclassgroupezcontentlanguageezcontentobjectezcontentobjectattributeezcontentobjecttranslationezcontentobjecttrashnodeezcontentobjecttreenodeezcontentobjectversionezcurrencydataezdateezdatetimeezimagealiashandlerezimagelayerezimageobjectezinformationcollectionezinformationcollectionattributeezkeywordezlocaleezmatrixezmediaezmultioptionezmultioption2

ezmultipriceeznodeassignmentezoptionezorderezorderitemezorderstatusezpolicyezpriceezproductcategoryezproductcollectionitemezrangeoptionezroleezsectionezsimplifiedxmlinputezsubtreenotificationruleeztimeezurlezuserezvatruleezvattypeezxhtmlxmloutputezxmlinputhandlerezxmloutputhandlerezxmltext

object

まずは一番よく使われるezcontentobjecttreenodeを

見てみましょう(別紙:ezcontentobjectnode)

Sunday, March 28, 10

Page 22: eZ Publish 実装 はじめの一歩

テンプレートを少し編集して属性を表示

1eZでは何もかもがオブジェクト!

eZのドキュメントルートからみて右記ファイルをエディタで開く

 design/base/override/tem

plates/full/article.tpl

その後、

{$node|attribute(show,1)}を

1行目に挿入。

<=

これはやっちゃいけないこと!!!!

(※)通常はテンプレートに直接記述するのではなく、テンプレートをオーバーライドしてください。

Sunday, March 28, 10

Page 23: eZ Publish 実装 はじめの一歩

テンプレートを少し編集して属性を表示

2eZでは何もかもがオブジェクト!

eZのドキュメントルートからみて右記ファイルをエディタで開く

 design/base/override/tem

plates/full/article.tpl

その後、

{$node.data_map|attribute(show

,1)}を1行目に挿入。

<=

これはやっちゃいけないこと!!!!

(※)通常はテンプレートに直接記述するのではなく、テンプレートをオーバーライドしてください。

やっちゃいけないこと(既存テンプレートに直接記述)ついで

にさらに予習的に

{$node.data_map}を

インスペクトしてみた。

data_mapの直下にはクラス設定にある属性が存在している。

Sunday, March 28, 10

Page 24: eZ Publish 実装 はじめの一歩

テンプレートを少し編集して属性を表示

3eZでは何もかもがオブジェクト!

eZのドキュメントルートからみて右記ファイルをエディタで開く

 design/base/override/tem

plates/full/article.tpl

その後、

{$node|creator(show,1)}を

1行目に挿入。

<=

これはやっちゃいけないこと!!!!

(※)通常はテンプレートに直接記述するのではなく、テンプレートをオーバーライドしてください。

やっちゃいけないこと(既存テンプレートに直接記述)ついで2

{$node.creator}をインスペクトしてみた。

creatorの直下にはオブジェクトとしてユーザー情報がある

Sunday, March 28, 10

Page 25: eZ Publish 実装 はじめの一歩

オブジェクトが保有する属性は豊富eZでは何もかもがオブジェクト!

クラスで定義した属性がdata_map内にオブジェクトとして保有されている。かつ、eZ Publishのシステムから付与された属性も付与されている。上記の値を適宜呼び出して、テンプレートに組み込んでいく

Sunday, March 28, 10

Page 26: eZ Publish 実装 はじめの一歩

eZでは何もかもがオブジェクト!

オブジェクト名前url情報所有者情報ノード番号オブジェクト番号作成日時編集日時etc...

属性

•はノードツリー上(サイトマップとか)で管理できる•は作成することができる•は編集することができる•はゴミ箱にいれることができる•は削除することができる•はバージョン管理をすることができる•は多言語バージョンを持つことができる•はExport/Importすることができる•はワークフローに流すことができる•は権限管理の対象となる•は権限管理の主体となることができる•は他オブジェクトと関連することができる•はテンプレートで表示することができる•はテンプレートから新規作成/編集/削除することができる•は時刻により制御できる•はコピー(移動)することができる•は他のオブジェクトとの集合体(サブツリー)としてコピー(移動)することができる•はセクションをもつことができる(セグメンテーション)•は検索することができる•はリンクマネジメントシステムを利用できる等々、、

Sunday, March 28, 10

Page 27: eZ Publish 実装 はじめの一歩

コンテンツオブジェクト

eZでは何もかもがオブジェクト!

Sunday, March 28, 10

Page 28: eZ Publish 実装 はじめの一歩

では実際に目的をもってクラスを作ってみましょう

Sunday, March 28, 10

Page 29: eZ Publish 実装 はじめの一歩

ブログ実装用クラスの作成~リベンジのための~

以前の勉強会、テンプレート実装で思いっきりコケた実装実演を今日こそ。。

Sunday, March 28, 10

Page 30: eZ Publish 実装 はじめの一歩

まずどんなブログをつくるか機能+ 記事を新規作成/編集/削除できる+ その記事についてコメントができる+ ブログはサイト上のどこにでも設置できる

相対的位置関係 + ブログトップ + 記事1 + コメント1 + コメント2 + コメント3 + 記事2 + コメント1 + コメント2 + コメント3 + 記事3 + コメント1 + コメント2 + コメント3

各ページの概要 ブログトップ + 記事は直近5件をタイトルと本文20文字まで

記事ページ + 自記事のテキスト/画像要素を出す + コメントへのリンク + コメントの一覧 コメントは直下のコメントをとってくればよい

コメントページ + 投稿ページを作る

Sunday, March 28, 10

Page 31: eZ Publish 実装 はじめの一歩

クラスの定義/作成名前 id データタイプ データタイプ補足 必須? URL名に使う? ノード名に使う?

ブログ名 title テキスト/text 1~255 レ 1

URL名 url_title テキスト/text 1~127 1

ブログの説明 description テキストブロック/textblock 初期5行表示ids ids 識別子/identifier 接頭語top 桁数 3桁 auto 2

ブログトップ id: blog_top  コンテナ: yes

名前 id データタイプ データタイプ補足 必須? URL名に使う? ノード名に使う?

記事名 title テキスト/text 1~255 レ 1

URL名 url_title テキスト/text 1~127 1

記事本文 body XMLタグ/xmlblock 初期5行表示 レ

画像 image 画像/image 2MBまで

コピーライト copyright テキスト/ text 1~127

公開日時 opendate 日時/datetime 現在日時をデフォルト値に レ

ids ids 識別子/identifier 接頭語entry 桁数 5桁 auto 2

ブログ記事 id: blog_entry  コンテナ: yes

名前 id データタイプ データタイプ補足 必須? URL名に使う? ノード名に使う?

ユーザー名 title テキスト/text 1~127 レ 1

e-mail email テキスト/text 1~127

コメント本文 body XMLタグ/xmlblock 初期5行表示 レids ids 識別子/identifier 接頭語comment 桁数 6桁 auto 1

ブログコメント id: blog_comment  コンテナ: no

Sunday, March 28, 10

Page 32: eZ Publish 実装 はじめの一歩

クラスの定義を実装ここはWeb管理画面での作業になります。

「システム設定」↓

「クラス」(ここでクラスグループを新規作成するか

または、Content内へ遷移。新規作成した場合は、

そのクラスグループに遷移)

↓クラスを新規作成する場所としての

クラスグループへ移動(デモでは新規作成した「Blog」グループ)

あとは、新規クラスを作成

Sunday, March 28, 10

Page 33: eZ Publish 実装 はじめの一歩

とりあえず現状でブログを作成

ブログトップ

ブログ記事

コメント

とりあえずできてるけどこれは実用に耐えない。。

Sunday, March 28, 10

Page 34: eZ Publish 実装 はじめの一歩

コンテンツ投入はできる。足りないのは見た目。

つまり

コンテンツ出力つまり

テンプレート実装Sunday, March 28, 10

Page 35: eZ Publish 実装 はじめの一歩

ヘッダー(header)

グローバルナビゲーション(gl_navi)

コンテント(content) サイドナビside_navi

フッター(footer)

よくあるパターンで実装します

Sunday, March 28, 10

Page 36: eZ Publish 実装 はじめの一歩

ちょっと設定について

• デフォルトの設定ファイルはsettings/に入っています。全ての設定とコメ

ントが付いています。

• 設定に該当するファイル名.ini

• システムの特定な部分を管理しています

• 一番重要な設定ファイルはsite.iniです

• /settings直下にデフォルト設定ファイルがあります: 絶対に変更してはいけ

ません!

• コメントがかかれており(英語。。)、デフォルトの値を持っています

eZではオーバーライドで変更!

Sunday, March 28, 10

Page 37: eZ Publish 実装 はじめの一歩

設定を変更するにはオーバーライド!settings

override

siteaccess

pub

cp

site.ini.append.php

site.ini.append.php

site.ini.append.php

site.ini

すべてを上書きするoverrideフォルダにあるものはsiteaccessフォルダ配下の設定をも上書きします。

siteacces pub用のsite.ini設定

siteacces cp用のsite.ini設定

デフォルトのsite.ini設定直接変更してはだめ!

上書きする設定ファイル名.iniに.append.phpを付与するのが吉(*)つけなくても動くんだけど、rewriteの設定次第では中がみえちゃいます!(データベース接続設定とか諸々)

eZではオーバーライドで変更!

Sunday, March 28, 10

Page 38: eZ Publish 実装 はじめの一歩

方針

現状のテンプレートも残しつつ新しいテンプレート実装する

新しいテンプレートセットと設定セットを用意するために

新しいSiteaccessを用意!

Sunday, March 28, 10

Page 39: eZ Publish 実装 はじめの一歩

Siteaccessとは?Siteaccessとはその名の通り、サイトにアクセスした人にどんなサイトを閲覧させるかを指示する設定内容を格納する仕組みです。Siteaccess毎に利用するデザインや設定内容、そしてデータベースまでもが個別に指定できます。

Sunday, March 28, 10

Page 40: eZ Publish 実装 はじめの一歩

Siteaccessの設定•利用できるSiteaccessはsite.iniのグローバルオーバーライドに記述することが必要です。(settings/override/site.ini.append.php)

•Siteaccessはsettings/siteaccessの直下にフォルダとして設置します。

•上記サブディレクトリはSiteaccessに同じ名前にします。

•settings/siteaccess直下のsiteaccessフォルダには各サイト用の設定を記載した設定ファイル群を設置します。

settings

override

siteaccess

pub

cp

site.ini.append.php [SiteAccessSettings]CheckValidity=falseAvailableSiteAccessList[]AvailableSiteAccessList[]=pubAvailableSiteAccessList[]=cp

settings/override/site.ini.append.php内の記述

はフォルダ

Sunday, March 28, 10

Page 41: eZ Publish 実装 はじめの一歩

新しいSiteaccessフォルダの作成eZ Publishドキュメントルート直下のsettings/siteaccess以下のフォルダをみると下記のようになっている。pubはインストールの際に設定した公開用のSiteaccess、cpは管理用のSiteaccsss。adminとsetupは触らないで下さい。

pubをフォルダ毎コピー

pubのコピーにnewという名前を

つける

Sunday, March 28, 10

Page 42: eZ Publish 実装 はじめの一歩

Override配下のsite.iniに新しいSiteaccessを登録

[SiteAccessSettings]CheckValidity=falseAvailableSiteAccessList[]AvailableSiteAccessList[]=pubAvailableSiteAccessList[]=cpAvailableSiteAccessList[]=new

[SiteAccessSettings]CheckValidity=falseAvailableSiteAccessList[]AvailableSiteAccessList[]=pubAvailableSiteAccessList[]=cp

http://example/index.php/new/

その後、下記URLにアクセスすると。。

Sunday, March 28, 10

Page 43: eZ Publish 実装 はじめの一歩

アクセスできませんこれは新しいSiteaccessにログインしてないユーザーが

アクセスできない設定になっているため。ロールの設定で変更してもいいですが、

とりあえず管理者アカウントで入りましょう。

Sunday, March 28, 10

Page 44: eZ Publish 実装 はじめの一歩

みれました!当然のことながらpubのコピーなので同じです。

Sunday, March 28, 10

Page 45: eZ Publish 実装 はじめの一歩

では別のデザインを当てていきたいのですが

Sunday, March 28, 10

Page 46: eZ Publish 実装 はじめの一歩

すいません、その前にもう一個Siteaccessを作らせてください。。。

さっき作成したnewと同様の手順でoriginalというのを作成します。

というのも、デフォルトでデザインにあたっているテンプレートの大元やオーバーライドの状況を

お見せしたいからです。

Sunday, March 28, 10

Page 47: eZ Publish 実装 はじめの一歩

Plainでインストールした場合、eZ Publishドキュメントルート直下のdesignフォルダ内にはadmin、base、plain_site、standardという4つのフォルダがあります。その中にはデザインを司るファイル一式が存在します。

 design情報が入ってる場所

admin   管理画面用base    さっきからみている公開用plain_site  実は空!standard  一番ベースのテンプレート

Sunday, March 28, 10

Page 48: eZ Publish 実装 はじめの一歩

 どのdesign情報を選ぶのか決める記述

[DesignSettings]SiteDesign=plain_siteAdditionalSiteDesignList[]=base

eZドキュメントルート直下のsettings/siteaccess/pub/site.ini.append.php、

つまり、Siteaccessのpub内にあるsite.ini.append.phpの

[DesignSettings]セクションを見てみます。

この記述の意味は1. まずデザインplain_site内のデザイン情報を使え

2. もし該当するものがなければデザインbaseを使えplain_siteは空なので、baseを利用していることになります。

Sunday, March 28, 10

Page 49: eZ Publish 実装 はじめの一歩

さっきつくったsiteaccess「original」にstandardデザインのみ当ててみる

[DesignSettings]SiteDesign=standard

公開サイトに使えなさそうなデザインが表示されます。

Sunday, March 28, 10

Page 50: eZ Publish 実装 はじめの一歩

ここまでのsiteaccessとdesignのマッピング状況

pub

new

original

cp

[DesignSettings]SiteDesign=plain_siteAdditionalSiteDesignList[]=base

[DesignSettings]SiteDesign=standard

[DesignSettings]SiteDesign=admin

Sunday, March 28, 10

Page 51: eZ Publish 実装 はじめの一歩

ということで新しいデザインをnewサイトに当てましょう。

pub

new

original

cp

[DesignSettings]SiteDesign=plain_siteAdditionalSiteDesignList[]=base

[DesignSettings]SiteDesign=standard

[DesignSettings]SiteDesign=admin

[DesignSettings]SiteDesign=new

ヘッダー(header)

コンテント(content) サイドナビside_navi

フッター(footer)

Sunday, March 28, 10

Page 52: eZ Publish 実装 はじめの一歩

newサイトのsite.ini.append.php変更[DesignSettings]SiteDesign=newAdditionalSiteDesignList[]=base

designフォルダ内のplain_siteをコピーしてnewフォルダを作成

Sunday, March 28, 10

Page 53: eZ Publish 実装 はじめの一歩

デザインnewフォルダ内の構造

重要!

重要!

Sunday, March 28, 10

Page 54: eZ Publish 実装 はじめの一歩

overrideとtemplatesフォルダ内にテンプレートを置いていくと新しいデザインが作れます!

Sunday, March 28, 10

Page 55: eZ Publish 実装 はじめの一歩

と、ここでeZの基礎概念を

少し。。

Sunday, March 28, 10

Page 56: eZ Publish 実装 はじめの一歩

どのテンプレートがどこに適用されるの?

Sunday, March 28, 10

Page 57: eZ Publish 実装 はじめの一歩

 これがeZの基本構造

Sunday, March 28, 10

Page 59: eZ Publish 実装 はじめの一歩

リクエストURLに対してのmodule処理の流れ

Sunday, March 28, 10

Page 60: eZ Publish 実装 はじめの一歩

http://example.url/index.php/content/view/full/2

トップページが表示されるトップページのnode idが2だから

Sunday, March 28, 10

Page 61: eZ Publish 実装 はじめの一歩

http://example.url/index.php/user/login

ユーザーモジュールのログインビューつまりユーザーログイン画面が表示される

Sunday, March 28, 10

Page 62: eZ Publish 実装 はじめの一歩

http://example.url/index.php/content/edit/1

コンテンツモジュールのeditビューでobject id 1を渡すとトップページの編集画面になるトップページのobject idは1だから

Sunday, March 28, 10

Page 63: eZ Publish 実装 はじめの一歩

でもこんなかっこわるいURLはいやだ!

Sunday, March 28, 10

Page 64: eZ Publish 実装 はじめの一歩

 だから仮想URLにマッピング

ノードにオブジェクトをマッピングすることで仮想URLを生み出すパンくずリストやサイトマップはノード構造で作られる

Sunday, March 28, 10

Page 65: eZ Publish 実装 はじめの一歩

URLリクエストから表示されるまでの流れ

1. eZ Publishにリクエストがあった際にURLを確認します。

2. 仮想URLテーブルにURLが存在する場合、システムは相当

するシステムURLにプロセスします。

3. 仮想URLテーブルに存在しない場合、eZ Publishはシステム

URLとして解析します。

4. システムURLに該当しない場合、Kernelエラーを出力します。

Sunday, March 28, 10

Page 66: eZ Publish 実装 はじめの一歩

さて、ついにテンプレート実装

Sunday, March 28, 10

Page 67: eZ Publish 実装 はじめの一歩

どのテンプレートがどこに適用されるの?

に戻ります。

それを知るためのデバッグ設定をまず。

Sunday, March 28, 10

Page 68: eZ Publish 実装 はじめの一歩

デバッグ設定で「Debug output」、「 Template debug」、「List of used templates」をチェックしてSetをクリックします。その際、プルダウンはGlobal(override)になっていることを確認してください。

Sunday, March 28, 10

Page 69: eZ Publish 実装 はじめの一歩

Debug output

リクエストがきてから表示されるまでのプロセスが表出されます。 処理の時間が表示されます

Sunday, March 28, 10

Page 70: eZ Publish 実装 はじめの一歩

Template debug

HTMLソースレベルでどのテンプレートが利用されているかわかります。

Sunday, March 28, 10

Page 71: eZ Publish 実装 はじめの一歩

モジュールのビュー用テンプレートファイルのパス

実際に利用されているテンプレートファイル

List of used templates

Sunday, March 28, 10

Page 72: eZ Publish 実装 はじめの一歩

テンプレートオーバーライド 1

モジュールのビュー用テンプレートファイルのパスと同様のパスを利用デザイン内templatesフォルダから設置するとそちらが利用されます!

pagelayout.tplで試してみましょう!

pagelayout.tplはtemplatesフォルダ直下に存在します。なので、design/new/templates/pagelayout.tplを作成して中にaaaaaと書いて保存しましょう。

Sunday, March 28, 10

Page 73: eZ Publish 実装 はじめの一歩

pagelayout.tplが白紙になればすべて白紙!

aaaaa+デバッグ画面になりました。実はpagelayout.tplは非常に重要なテンプレートなのです。

Sunday, March 28, 10

Page 74: eZ Publish 実装 はじめの一歩

PagelayoutとModule Result

Point! テンプレートのとっかかりで理解すべき点がここ。テンプレート系統は大きくみて2つに分かれます。

一つはいわゆる「ガワ」それがpagelayout.tplなのです。

もう一つはそのURLに固有の内容、つまりモジュールの処理を行ったビューの結果としてのmodule_resultになります。

Sunday, March 28, 10

Page 75: eZ Publish 実装 はじめの一歩

Pagelayout変数の王様$module_result.content

先ほど記載したaaaaaの下に{$module_result.content}と付け加えると。。

結構な量の情報がでてきました。これは文字通りモジュールの処理結果としてのビューが出力されています。

Sunday, March 28, 10

Page 76: eZ Publish 実装 はじめの一歩

Pagelayout変数の王様$module_result.content

先ほどはトップページをみましたが、ブログトップへのリンクをクリックしてブログトップでもどうなるか見てみましょう

こちらも入力欄に沿った情報がでてきました。では、ここでHTMLソースをみてみましょう。

Sunday, March 28, 10

Page 77: eZ Publish 実装 はじめの一歩

$module_result.contentで引っ張ることができるnode/view/full.tpl

ブログトップのHTMLソースをみると。。

node/view/full.tplという文字列がみえます。これは該当しているノードに割り当てられているコンテンツオブジェクトを表示するためのメインのテンプレートになります。では、こちらもdesign/new/templates/node/view/full.tpl

を作成して上書きしてしまいましょう。今度はbbbbbといれてみます。

Sunday, March 28, 10

Page 78: eZ Publish 実装 はじめの一歩

これではあまりに、、、

ではbbbbbの下に{$node|attribute(show,1)}と書いてみてください。

Sunday, March 28, 10

Page 79: eZ Publish 実装 はじめの一歩

これは冒頭にオブジェクトとクラスの話をした際にでてきたものです。つまり、ノードオブジェクト情報です。

$nodeという変数を使えば、該当しているノードの情報に詰め込まれた様々な情報をとることができます!

Sunday, March 28, 10

Page 80: eZ Publish 実装 はじめの一歩

attribute(show)http://ez.no/doc/ez_publish/technical_manual/4_0/reference/template_operators/miscellaneous/attribute

オブジェクト内の属性値を渡り歩くための便利なオペレータ、attribute(show)

利用の仕方は、{$オブジェクト変数|attribute(show)}

ちなみにattribute(show,1)とやると1階層下までattribute(show,2)とやると2階層下まで取得できます。ちなみにattribute(show)は2が指定されています。

では先ほどの{$node|attribute(show,1)}を{$node.data_map|attribute(show)}に書き換えてみてください。

Sunday, March 28, 10

Page 81: eZ Publish 実装 はじめの一歩

オブジェクトはピリオド「.」でつなぐとオブジェクト階層を下っていくことができます。

では、{$node.data_map.title.data_text}と記載してみましょう。Sunday, March 28, 10

Page 82: eZ Publish 実装 はじめの一歩

このノードに割り当てられているブログトップオブジェクトのブログ名に記載された「ブログトップ」という文字列が表示されました!では、残りの設定属性値も取得するテンプレートを書いてみましょう

Sunday, March 28, 10

Page 83: eZ Publish 実装 はじめの一歩

<h1>{$node.data_map.title.data_text}</h1>

<p>{$node.data_map.description.data_text}</p>

<p>このブログトップオブジェクトのidsは{$node.data_map.body.value}です。</p>

すこしだけページっぽくなってきた、、

でもこのオーバーライドだとブログトップのfullviewもブログ記事のfullviewも同じテンプレートが当たってしまう。

Sunday, March 28, 10

Page 84: eZ Publish 実装 はじめの一歩

テンプレートオーバーライド 2ちょっとトップページをみてみましょう。

おや?前と変わらない。fullはすべてdesign/new/templates/node/view/full.tplが当たっているのではないのか?では、HTMLソースをみてみます。

design/base/override/templates/full/folder.tplというのが当たっているようだ。。

Sunday, March 28, 10

Page 85: eZ Publish 実装 はじめの一歩

テンプレートオーバーライド 2settings

override

siteaccess

new override.ini.append.php

実は該当siteaccess内(今回はnew)にはoverride.ini.append.phpというものがあります。このファイルでデフォルトのテンプレート(今回であればnode/view/full.tpl)を全く別の自由なテンプレートファイルにマッピングすることができます。その際、どういった条件の時にそのファイルをマッピングするかという条件はいろいろ選べます。#トップページの場合は、folderクラスだった場合

Sunday, March 28, 10

Page 86: eZ Publish 実装 はじめの一歩

テンプレートオーバーライド 2

各ブロックに必要な情報は• オーバーライドブロックの名前• オーバーライドするテンプレート• 代わりに使われるテンプレート• オーバーライドテンプレートが入ってるフォルダ• オーバーライド条件の組み合わせ

オーバーライドルールの優先順位はファイル内での位置で決定されます。複数のブロックを利用できる場合、eZ Publishは最初のものを使います

ルール

[full_folder]

Source=node/view/full.tpl

MatchFile=full/folder.tpl

Subdir=templates

Match[class_identifier]=folder

Sunday, March 28, 10

Page 87: eZ Publish 実装 はじめの一歩

テンプレートオーバーライド 2

Sunday, March 28, 10

Page 88: eZ Publish 実装 はじめの一歩

ここまでがeZ Publishにおける特徴的な部分つまり壁でした。あとはなんとかなるかな。

Sunday, March 28, 10

Page 89: eZ Publish 実装 はじめの一歩

ということでここからはざくざくつくっていきます。

(実演)

Sunday, March 28, 10

Page 90: eZ Publish 実装 はじめの一歩

メニュー |メニュー|メニュー|メニュー|メニュー|メニュー

ツリーサイトマップ

サイト名

ブログ記事タイトル

写真

本文本文 本文本文 本文本文 本文本文 本文本文本文本文 本文本文 本文本文 本文本文 本文本文本文本文 本文本文 本文本文 本文本文 本文本文本文本文 本文本文 本文本文 本文本文 本文本文

コメント(件数)|日付

トップ

コメント投稿

ブログ記事一覧+ ○○○○○+ ○○○○○+ ○○○○○+ ○○○○○

コメント一覧+ ○○○○○+ ○○○○○+ ○○○○○+ ○○○○○

ユーザーログイン

Sunday, March 28, 10

Page 91: eZ Publish 実装 はじめの一歩

メニュー |メニュー|メニュー|メニュー|メニュー|メニュー

ツリーサイトマップ

サイト名

ブログ記事タイトル

写真 本文本文 本文本文 本文本文 本文本文 本文本文本文本文 本文本文 本文本文 本文本文 本文本文本文本文 本文本文 本文本文 本文本文 本文本文

ブログトップ

ブログ記事タイトル

写真 本文本文 本文本文 本文本文 本文本文 本文本文本文本文 本文本文 本文本文 本文本文 本文本文本文本文 本文本文 本文本文 本文本文 本文本文

コメント(件数)|日付コメント投稿

コメント(件数)|日付コメント投稿

ブログ記事一覧+ ○○○○○+ ○○○○○+ ○○○○○+ ○○○○○

コメント一覧+ ○○○○○+ ○○○○○+ ○○○○○+ ○○○○○

ユーザーログイン

Sunday, March 28, 10

Page 92: eZ Publish 実装 はじめの一歩

メニュー |メニュー|メニュー|メニュー|メニュー|メニュー

ブログ記事一覧+ ○○○○○+ ○○○○○+ ○○○○○+ ○○○○○

コメント一覧+ ○○○○○+ ○○○○○+ ○○○○○+ ○○○○○

サイト名

ブログ記事タイトル

写真 本文本文 本文本文 本文本文 本文本文 本文本文本文本文 本文本文 本文本文 本文本文 本文本文本文本文 本文本文 本文本文 本文本文 本文本文本文本文 本文本文 本文本文 本文本文 本文本文

日付

ブログ記事

本文本文 本文本文 本文本文 本文本文 本文本文 本文本文 本文本文本文本文 本文本文 本文本文 本文本文 本文本文 本文本文 本文本文本文本文 本文本文 本文本文 本文本文 本文本文 本文本文 本文本文本文本文 本文本文 本文本文 本文本文 本文本文 本文本文 本文本文本文本文 本文本文 本文本文 本文本文 本文本文 本文本文 本文本文本文本文 本文本文 本文本文 本文本文 本文本文 本文本文 本文本文本文本文 本文本文 本文本文 本文本文 本文本文 本文本文 本文本文

コメント投稿

コメント コメント コメント コメント コメント コメント コメントコメント コメント コメント コメント コメント コメント コメント

コメント投稿者名

コメント コメント コメント コメント コメント コメント コメントコメント コメント コメント コメント コメント コメント コメント

コメント投稿者名

ユーザーログイン

Sunday, March 28, 10

Page 93: eZ Publish 実装 はじめの一歩

include情報

ヘッダー(header)

グローバルナビゲーション(gl_navi)

コンテント(content) サイドナビside_navi

フッター(footer)

templates

parts

pagelayout.tpl

headtag.tpl

header.tpl

gl_navi.tpl

footer.tpl

side_navi.tpl

(*)headtagは<head></head>内の記述

Sunday, March 28, 10

Page 94: eZ Publish 実装 はじめの一歩

近く、実装したコードを公開しますね。

Sunday, March 28, 10