104
CMSインサイド eZ Publishの構築を簡単に!

eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

CMSインサイドeZ Publishの構築を簡単に!

Page 2: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

自己紹介

● サニエ エリック

● フランス人、2001年に来日

● 2008~2011 eZ Systems Japanでテクニカルコンサルタント

● 2011年より独立(eZ Publishを中心)

● eZ Publishコミュニティ活動・毎月にez Publishの勉強会

[email protected]● @ericsagnes

Page 3: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

eZ Publishの紹介

Page 4: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

eZ Publish

● ノルウェー発のオープンソースCMS (GPL2)

● 2001年から開発

● eZ Systems社が開発の方針を決めます

● 開発と展開はヨーロッパ中心

Page 5: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

2つのeZ Publish

● エンタープライズオープンソースCMS

● エンタープライズ版とオープンソース版

● オープンソースからエンタープライズは移行可能

● プロジェクトの規模とニーズに合わせて、バージョン決めれる

Page 6: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

エンタープライズ版

● 有料

● サブスクリプション型

● 正式サポート

● 専用エクステンションマーケット

● ステーブルバージョン(1年2回リリース)

● 専用商用ライセンス

Page 7: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

コミュニティ版

● エンタープライズ版とコードベースは一緒

● GPL2ライセンス

● 毎月のマイルストーンリリース

● エンタープライズほどステーブルでありません

● エンタープライズ版より最新機能を含んでいます

Page 8: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

2つのeZ Publish第2弾!

● 2012年9月にeZ Publish 5.0がリリースされました

● 主流はまだeZ Publish 4● eZ Publish 5とeZ Publish 4の互換性は少な

● eZ Publish 5は互換性のためにeZ Publish 4をそのまま含んでいます(legacy)

Page 9: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

eZ Publish 4

● 2007年12月にリリース

● PHP 5に対応したバージョン

● 独自のフレームワーク、eZ Componentsの利用

● 最終バージョンは4.7● 安定しています

Page 10: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

eZ Publish 5

● 2012年9月にリリース

● Symfony 2ベース

● 新しいカーネル、カーネルAPI、テンプレート。。。

● eZ Publish 4.7を含んでいる

● 未完成なところもある● 変更点が多く、ドキュメントは現在に少ない● 開発者プレビューに近い● 可能性は広い!

Page 11: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

eZ Publish 4環境

● LAMP環境

● PHP 5.2.14以上

● MySQL 5以上

● PostgreSQL 8以上でも動く

● IISでも動く

Page 12: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

eZ Publish のインストール

● アーカイブのダウンロード(2012.8はおすすめ)

● アーカイブの解答

● DBの作成

● バーチャルホスト・ホストの設定● ブラウザからアクセスする● インストールを完成する● デモサイト、管理画面を確認する

Page 13: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

eZ Publishの事例 ­ 海外

Page 14: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

eZ Publishの事例 ­ 国内

Page 15: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

eZ Publish の特徴

● 柔軟なコンテンツエンジン

● 豊富のデフォルト機能

● 開発の柔軟性

● 開発の速度・効率

Page 16: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

デフォルト機能(一部)

● 柔軟なコンテンツエンジン● 多言語● バージョン管理● ブログ● 掲示板● 画像自動リサイズ● 他段階承認

● webdav● LDAP● オフィスファイルインポート・

エクスポート

● マルチドメイン● 細かいアクセス権限● マルチデータベース

● SSO● 高機能検索エンジン

● REST API● AJAX API● ファイルの一括アップロード● コンテンツ関連付け

● RSS自動生成

● サイトマップ自動生成

Page 17: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

CMSとCMF

● CMSはコンテンツマネジメントシステム

● CMFはコンテンツマネジメントフレームワーク

● eZ PublishはCMFでありながら、CMSである

● と言いますと、eZ Componentsとコンテンツエンジンを使って、別なCMSを「簡単」に作れます

● 管理画面を簡単に置き換えれ、拡張できる

Page 18: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

プラグインベースCMSとコアベースCMS

● プラグインベースCMS+ コミュニティが活発的

+ プラグインのチョイスが多い

ー バージョン依存が複雑になります

ー 品質がばらばら

ー コアが浅い

● コアベースCMS

+ バージョンの依存関係問題はほとんどない

+品質が統一されている

ー コミュニティ活動が静か

ー エクステンションは自作ですることが多い

Page 19: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

eZ Publishに向いてる案件

● ニーズの高い案件● メディアサイト● マルチドメイン・横展開● カタログサイト

● コーポレートサイト (eZ Webin)● 成長可能性のあるサイト

Page 20: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

夢のようなCMS?

● 機能があるだけハードルがやや高い● ドキュメンテーションが少ない、わかりにくい● サイトアクセス、ノード、オブジェクト、ビュー、モ

ジュール。。。初心者から掴みづらいCMS● でもなれると開発時間はかなり短縮できます● 機能の追加も簡単にできます

Page 21: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

初心者向けの使い方

● WebInパッケージをインストール

● CSS変更

● コンテンツの調整● コーポレートサイトの出来上がり

Page 22: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

eZ Publishを活用した案件

● 8ドメイン・10サイト

● 2つのデータベース● 多言語(日本語、英

語)

● 自動Twitter投稿● イベントの自動管理● クロスドメイン投稿

● 統合RSSフィード

● 承認ワークフロー● 未来公開● 複雑なアクセス権限● 関連付け(タグ)● 画像ギャラリー● 複雑なキャッシュ設定● テンプレート言語の拡

Page 23: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

eZ Publishを活用した案件

Page 24: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

それでも

● ひとつのeZ Publish● 元コードやテンプレートに一切の変更なし● 3つのエクステンションで実装● 〜150枚のテンプレート● 簡単に新規サブサイト・機能の追加可能

Page 25: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

eZ Publishの技術紹介

Page 26: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

eZ Publishの最大特徴!コンテンツエンジン

● コンテンツを無理矢理CMSに合わせるのではなく、CMSはコンテンツに自然に合う

● コンテンツは自由なコンテンツクラスで定義

● コンテンツクラスはGUIで作れます

● コンテンツクラスは属性の組み合わせ

● 属性はデータタイプで定義できる

● ニーズあれば、カスタムデータタイプは作成できる(PHP)

Page 27: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

eZ Publishの最大特徴!コンテンツエンジン

● 「イベント」のコンテンツクラスを作りましょう!

– タイトル[テキスト]– 紹介文[XMLブロック]– 開催日時[日付と時刻]– 終了日時[日時と時刻]– 地図[Google Mapロケーション]

Page 28: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

eZ Publishの最大特徴!コンテンツエンジンのメリット

● 既存クラスに簡単にフィールドを追加できます

● DB、コーラムは一切気にしなくていい

● フィールドで絞り込み、検索できます

● コンテンツクラス別のテンプレート実装

● コンテンツクラス別のアクセス権限

● コンテンツレベルにロジック持たせる

Page 29: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

コンテンツクラス、コンテンツツリーオブジェクト、ノード

● コンテンツはコンテンツツリーに作ります

● コンテンツを作る際はコンテンツクラスのインスタンス、オブジェクトは作られます

● 同時にコンテンツツリーにノードが作られます

● ノードはオブジェクトの配置先と呼びます

● 一つのオブジェクトは複数のノードに公開されることができます

Page 30: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

コンテンツクラス、コンテンツツリーオブジェクト、ノード

ノードID:2オブジェクトID:3

ノードID:12オブジェクトID:15

ノードID:16オブジェクトID:25

ノードID:34オブジェクトID:25

オブジェクトID:3

オブジェクトID:15

オブジェクトID:3

オブジェクトID:25

コンテンツツリー オブジェクトプール

Page 31: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

ノード・オブジェクトの骨組み

ノード

オブジェクト

言語(日本語)

バージョン(5)

バージョン(4)

属性タイトル:ほげほげ

属性B

言語(英語)

バージョン(5)

バージョン(4)

属性タイトル:FOO

属性B

Page 32: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

コンテンツエンジン最後の一言

● 実際ノードとオブジェクトの境線は薄い

● ノード・オブジェクトの全属性をテンプレートからアクセスできます

● メディアリソースとユーザ管理もコンテンツツリーの一部

● コンテンツツリー内のノードのURLは属性で決めれます

Page 33: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

コンテンツエンジン

● イベントクラスコンテンツの作成

● ノードとオブジェクト関係の確認

● 配置先の確認

Page 34: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

しっかりとしたアクセス権限

● 行動別で権限を設定できます– 作成

– 編集

– 削除

● コンテンツ別で権限を設定できます– セクション別

– サブツリー別

– 言語別

– 作成ユーザのグループ別

Page 35: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

アクセス権限の骨組みポリシー、ロール、ユーザ

● ポリシーはひとつの権限となります– 例「日本語のイベントを作成できる」

● ポリシーは基本的にカーネルの一つのモジュールの一つのファンクションにアクセスを許可します

● ロールはポリシーの組み合わせ● ユーザ(又はユーザグループ)にロールを割り当

てれる● ロールを割り当てるときにコンテンツ制限(サブツ

リー又はセクション)をつけることができます

Page 36: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

アクセス権限の骨組みポリシー、ロール、ユーザ

ロールA

ポリシーA

ポリシーB

ロールC

ポリシーD

ポリシーE

ユーザグループ1

ユーザ2

ユーザ3

ロールとポリシー ユーザ管理

Page 37: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

アクセス権限最後の一言

● ユーザは普通のオブジェクト・ノードであります● ユーザアカウント属性を持つノーづはすべて有効ユーザとなります

● オブジェクトの複数配置先を利用すれば、同じユーザを数ユーザグループに入れることができます

● ロール割り当て制限をうまく使うとロールは簡単に再利用できます

Page 38: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

アクセス権限

● ユーザグループの作成● ユーザの作成● ロールの作成● ロールを割り当てる

Page 39: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

豊富な設定設定とサイトアクセス

● 基本の設定ファイルはsettingsフォルダー直下に入っています

● iniファイルとなっています

● ブロックとルールの組み合わせになります● 設定ファイルはたくさんあります!

● 一番重要な設定ファイルはsite.ini● 基本の設定は

– デフォルト設定: settings/直下– オーバーライド設定: settings/override/直下– サイトアクセス設定: settings/siteaccess/の下

● デフォルト以外は.ini.append.phpの拡張をつける(セキュリティのため)

Page 40: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

豊富な設定設定とサイトアクセス

● 設定の優先順位は– オーバーライド

– サイトアクセス

– デフォルト

● サイトアクセスは設定の組み合わせ● サイトアクセスは特別な条件で読み込まれる設定

– 特定なホスト名 www.site.com/– 特定なポート www.site.com:8080/– 特定なパス www.site.com/admin/

Page 41: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

設定で管理できるもの

● 利用するデザイン● 利用する言語

● 利用するDB● デバッグの有効● テンプレートの設定● イメージの自動リサイズパータン● など

Page 42: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

サイトアクセス

● サイトアクセスを利用することで– 多言語サイト

– 複数DBサイト

– 複数デザイン

– 管理画面(ただのデザイン)

– モバイルサイト(ただのデザイン)

– などの実装ができます

Page 43: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

エクステンションと設定

● エクステンションで設定を管理できる– デフォルト– サイトアクセス

● あわせて(優先順位で)– オーバーライド– デフォルトサイトアクセス– エクステンションサイトアクセス– エクステンションデフォルト– デフォルト

● の設定場所があります● 多くて混乱しやすいので、管理画面で確認しましょう!

(システム設定 > INIファイル)

Page 44: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

設定の変更

● オーバーライドでデバッグモードの有効/settings/override/site.ini.append.phpに##################### 開発設定####################

[ContentSettings]ViewCaching=disabled

[DebugSettings]DebugOutput=enabled

[TemplateSettings]Debug=enabledShowXHTMLCode=disabledTemplateCompile=disabledTemplateCache=disabledShowUsedTemplates=enabled

[OverrideSettings]Cache=disabled

● キャッシュの削除php bin/php/ezcache --clear-all

● 結果の確認

Page 45: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

デザインとは

● テンプレートはデザインでまとめます

● デザインは/design直下のフォルダーです

● デザインはテンプレート、CSS、JS、コンテンツでない画像などを含めます

● 一つのサイトアクセスは複数なデザインを利用します– メインデザイン– 追加デザイン(任意、複数可能)– デフォルトデザイン

● site.iniで管理されます

Page 46: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

デザインフォールバック

● メインデザインでリソースを見つけない場合には優先順位の次のデザインに探します

● 最終的に「standard」デザインに探します

● standardデザインはすべての基本テンプレートを含めます

● デザインフォールバックをうまく利用すれば、作るテンプレート量を減らすことができます

● デザインを抽象的な使い方もできます!

Page 47: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

デザインフォールバック

design/design3/templates/pagelayout.tpl

Page 48: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

デザインの抽象・例

Page 49: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

デザインの抽象・構造

● design/hospital– 基本の病院テンプレート

● design/ophthalmologist– 眼科の一般テンプレート

● design/dermatologist– 皮膚科の一般テンプレート

● design/dentist/– 歯科の一般テンプレート

● design/dermatologist_a– 皮膚科 A 特定の画像やテンプレート

Page 50: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

テンプレート

● 必ずデザインに入っています

● テンプレート言語はsmartyに似ている

● HTMLと{}で囲めたeZ Publishコード

● テンプレート言語を独自オペーレーターで拡張できる

● 一つのページには複数のテンプレートでできています

● テンプレートは2種類あります、レイアウトテンプレートとコンテンツテンプレート

Page 51: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

レイアウトテンプレートとコンテンツテンプレート

pagelayout.tpl(レイアウトテンプレート)

コンテンツテンプレート

ヘッダー

フッター

ナビゲーション

Page 52: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

ページで利用されるテンプレート

Page 53: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

2種類のコンテンツテンプレート

● ノードを表示する時の「ノードテンプレート」/company/news/blog

● カーネルの機能をアクセスする時の「システムテンプレート」/user/login/content/edit/モジュール名/ファンクション名

Page 54: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

システムテンプレート

● カーネルのインターフェースとなるテンプレート

● URLは/モジュール名/ビュー名

● 読み込まれるテンプレートファイルはモジュール名/ビュー名.tpluser/login.tpluser/logout.tpl

Page 55: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

ノードテンプレート

● コンテンツ(ノード)を表示する際に必ず利用されます

● URLはノードのコンテンツツリーの位置できまります

● システムURLでもアクセスできます/content/view/full/ノードID

● 読み込まれるテンプレートファイルは必ずnode/view/full.tpl

Page 56: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

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

● ノードテンプレートはすべて同じテンプレートを利用します● テンプレートオーバーライドを利用することで、好きな条件

で別なテンプレートを読み込むことができます– 特定なコンテンツクラスのインスタンス

– 特定なノードIDやオブジェクトID– 特定なセクションに入ってるノード– など

● どのテンプレートにオーバーライド使える!(利用できる条件は異なります)

● http://doc.ez.no/eZ-Publish/Technical-manual/4.x/Reference/Template-override-conditions

Page 57: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

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

● override.ini 設定ファイルで管理されます

● オーバーライドブロックをの組み合わせ● 順番でブロックが読み込まれて、最初マッチするも

のは利用されます● 一つのブロックで複数の条件を設定できます

(ANDとなります)

● オーバーライドブロックは下記のよう(基本)– 元のテンプレート

– 代わりに利用するテンプレート

– 条件

Page 58: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

オーバーライドブロック

[full_article]Source=node/view/full.tplMatchFile=full/article.tplSubdir=templatesMatch[class_identifier]=article

ブロックタイトル

元テンプレート

利用テンプレート

テンプレートフォルダー

条件

Page 59: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

テンプレートビューモード

● テンプレートのビューモードはオーバーライドブロックの元テンプレートの「node/view/ビューモード.tpl」

● デフォルトのビューモードは「full」となります

● ノードのURLはシステム的に/content/view/full/ノードID

● 一言で言いますとビューモードは求めるテンプレートです

● ビューモードにいろいろの可能性があります!/content/view/sitemap/ノードID

Page 60: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

デバッグで利用されているテンプレートオーバーライドの確認

Page 61: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

テンプレートの場所

● テンプレートはデザインに入ります– /design/デザイン名/templates 標準テンプレート

– /design/デザイン名/override/templates オーバーライドテンプレート

● テンプレートのパスは深くなりますので、間違いやすい(特にエクステンションを利用する際)

Page 62: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

テンプレート言語

● HTMLとeZ Publishコードの組み合わせ

● eZ Publishコードは{}で囲む

● eZ Publishコードでは

– 変数の定義と呼び出し

– オペーレーターによる処理

– ファンクションによる処理(フェッチ、インクルード等)

– ループ、IF等のブロック処理

● 独自オペーレーターで拡張できます

Page 63: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

テンプレート変数

● テンプレートで利用できる変数

● 「$」で始まる

● 2種類あります– モジュールが提供する変数

$nodeなど

– テンプレートで作る変数

● 変数のタイプは– 数字– 文字列– 配列– オブジェクト

– ブーリアン

Page 64: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

テンプレート変数

● {def}ファンクションで作れます{def $name='foo'}

● {set}ファンクションで変更できます{set $name='bar'}

● 各タイプの変数

– {set $a=3.14} 数字– {set $a='pi'} 文字列– {set $a=array(1.61, 3.14)} 配列– {set $a=hash('phi', 1.61, 'pi', 3.14)} ハッシュ

Page 65: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

$node変数

● ノードテンプレートで利用できます

● eZContentObjectTreeNodeオブジェクトのインスタンス

● $nodeから簡単に属性、オブジェクト、親ノード、子ノードなどの情報を習得できます

– {$node.parent} 親ノード

– {$node.data_map} 属性情報

– {$node.children} 子ノードの配列

– {$node.object} オブジェクト

– {$node.url_alias} ノードのURL

● http://doc.ez.no/eZ-Publish/Technical-manual/4.x/Reference/Objects/ezcontentobjecttreenode

Page 66: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

テンプレートオペレーター

● テンプレート内でロジックを実行できる特別なキーワード

● 基本的はインプットに対して、アウトプットを生成します

– {concat('hello',' world')} => 'hello world'

● 「|」でオペレーターを繋げれる

– {10|inc()|dec()} => 10● デフォルトで140オペーレーター以上があります

● PHPで独自オペーレーターが作れる

Page 67: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

テンプレートファンクション

● オペーレーターに似ていますが、インプットを渡すことができません

● 代表的に他のテンプレートの呼び出しとコンテンツを取得するフェッチを含めます

– {include uri='design:footer.html'}● フェッチファンクション以外、独自ファンクションは

あんまり作らない

Page 68: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

テンプレートブロック

● ブロックはIFロジック、ループなどを実行します{if eq($i,5)}<p>5 x 5 = {mul(5,5)}</p>{/if}

● ループの基本はforeach(forとwhileもあります){foreach $array as $item}<p>{$item}</p>{/foreach}{foreach $array as $key => $item}<p>{$key} - {$item}</p>{/foreach}

Page 69: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

eZ Publishのforeachは強力!

● reverse – 逆順でループする{foreach $array as $item reverse}

● max – 最大のループ数{foreach $array as $item max 3}

● offset – ループのスタートを決める{foreach $array as $item offset 3}

● sequence – ループする追加配列(CSSに便利){foreach $array as $item sequence array('light','dark') as $style}

Page 70: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

fetchファンクション

● fetchファンクションでモデルにクエリーを送れます(コンテンツの取得)

● モジュール毎に設定されています● 公式ドキュメントにほとんどドキュメントされていま

● 独自fetchファンクションを追加することができます

● 書き方は{fetch('モジュール名','fetchファンクション名',[パラメーター])}

Page 71: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

代表的fetchファンクション

● 主に使われるfetchファンクションは3つとなります

● 一つのノードをfetchする{fetch('content','node',hash('node_id',2))}

● 複数のノードをfetchする{fetch('content','list',hash('parent_node_id',2))}

● 現在のユーザをfetchする{fetch('user','current_user')}

Page 72: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

fetch – content, node

● 単独のノードをフェッチする● ノードオブジェクト

[eZContentObjectTreeNode]を戻す

● 使い方{def $node=fetch('content','node',hash(

'node_id', ノードID))}

● 追加パラメーター

– 'language-code' 特定な言語でフェッチする

Page 73: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

fetch – content, list● 複数のノードをフェッチする

● ノードオブジェクト[eZContentObjectTreeNode]の配列を戻す

● 使い方{def $nodes=fetch('content','list',hash(

'parent_node_id', ノードID))}

● 追加パラメーター

– 'sort_by' ソート順の設定 [配列]– 'limit' 戻すノードの数 [数字]– 'offset' 結果のスタート位置 [数字]– 'class_filter_type' コンテンツクラス絞り込みロジック ['include'|'exclude']– 'class_filter_array' コンテンツクラスの絞り込み [配列]– 'attribute_filter' 属性ベース絞り込み [配列]– 'depth' ツリーの深さ [数字]

Page 74: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

fetch – content, list例

● ページネーションの実装{def $nodes=fetch('content','list',hash(

'parent_node_id', ノードID,'offset', mul(sub($page_nb,1),

$items_per_page),'limit', $items_per_page

))}● フォルダーインスタンスコンテンツのfetch

{def $nodes=fetch('content','list',hash('parent_node_id', ノードID,'class_filter_type', 'include','class_filter_array', array('folder')

))}

Page 75: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

テンプレート呼び出し

● テンプレート内から、オーバーライドルールに従って、テンプレートを呼び出すことができます

● 最も使われるのは– ノードテンプレートを呼び出す

{node_view_gui}– 属性テンプレートを呼び出す

{attribute_view_gui}● テンプレート作成の最高の味方!

Page 76: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

node_view_gui● ノードをオーバーライドルールに合ったテンプレートを利用し

て、表示する● パラメーター

– content_node 表示したいノードオブジェクト[eZContentObjectTreeNode]

– view 利用するビューモード [文字列]view='line'

– カスタム変数 (任意)foo='bar'

● 例

{node_view_gui content_node=$a_node view='line'}

{node_view_gui content_node=$a_node view='line' foo='bar'}

Page 77: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

node_view_gui・例

● 子ノードを'line'ビューモードで表示する{foreach $node.children as $child}{node_view_gui content_node=$child view='line'}{/foreach}

● パンくずを生成する{node_view_gui content_node=$node view='breadcrumb'}

● node_view_guiをうまく使えば、綺麗なテンプレート、テンプレートの因数分解ができて、効率がどんどんアップ!

Page 78: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

attribute_view_gui● 属性をオーバーライドルールに合ったテンプレートを利用して、表示する

● パラメーター

– attribute表示したい属性オブジェクト[eZContentObjectAttribute]attribute=$node.data_map.title

– カスタム変数 (任意)foo='bar'

● 例

{attribute_view_gui attribute=$node.data_map.title}

{attribute_view_gui attribute=$node.data_map.image image_class='thumbnail'}

Page 79: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

テンプレートベストプラクティス

● 変数の中身を見たい時はattributeオペーレーターを使う{$var|attribute(show,1)}

● できるだけテンプレートの因数分解をして、数少ない、わかりやすいテンプレートを作りましょう

● テンプレート言語のスピードはやや遅い(PHPに比べれば)、できることが限られていますので、テンプレート言語で実装が難しいものはカスタムオペーレーターで実装

Page 80: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

例:簡単なニュース一覧の設計

● 下記の仕様にあったニュースの一覧を表示したい– 最新の10ニュースを表示する

– 最新のニュースはタイトル、概要テキストと画像

– 次の4ニュースタイトルと概要– 残りの5ニュースはタイトルのみ

● 3つのビューモードを利用します

– headline– detailed– line

Page 81: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

例:簡単なニュース一覧の設計

● ニュース一覧テンプレート

{def $viewmode=''}{foreach $news_list as $index => $news_item max 10} {if lt($index,1)} {set $viewmode='headline'} {elseif le($index,5)} {set $viewmode='detailed'} {else} {set $viewmode='line'} {/if} {node_view_gui content_node=$news_item view=$viewmode}{/foreach}

Page 82: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

例:簡単なニュース一覧の設計headlineテンプレート<div class=”news”><h3><a href={$node.url_alias|ez_url}>{attribute_view_gui attribute=node.data_map.title}</a></h3><p>{attribute_view_gui attribute=$node.data_map.image image_class='thumbnail'}{attribute_view_gui attribute=$node.data_map.short_text}</div>

detailedテンプレート<div class=”news”><h3><a href={$node.url_alias|ez_url}>{attribute_view_gui attribute=node.data_map.title}</a></h3><p>{attribute_view_gui attribute=$node.data_map.short_text}</p></div>

lineテンプレート<div class=”news”><p><a href={$node.url_alias|ez_url}>{attribute_view_gui attribute=node.data_map.title}</a></p></div>

Page 83: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

エクステンション

● 普段開発する際はエクステンションのみで行います

● 元のdesignと関わらなくて、まとまりもいい

● eZ Publishでエクステンションはほとんどの機能を実装できます– 設定・サイトアクセス– デザイン・テンプレート– テンプレートオペーレーター– 翻訳

– PHPクラス

– データタイプ

– カーネルオーバーライド

– 管理画面の拡張

Page 84: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

エクステンションベストプラクティス

● サイトアクセス、設定はすべてエクステンションに持っていく● オバーライドテンプレートは綺麗にまとめる

– コンテンツクラスベースオーバーライドは/extension/エステンション名/design/デザイン名/override/templates/classes/コンテンツクラス名/ビュー名.tpl

– ノードID・オブジェクトIDベースオーバーライドは/extension/エステンション名/design/デザイン名/override/templates/pages/ページの/パス.tpl

● テンプレートで5行以上の再利用できるロジックはオペーレーターにする

● オペーレーターのコードはできるだけPHPクラスに移す

● 実装が早い、デバッグは簡単、テンプレートはわかりやすい、可能性が広がる

Page 85: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

eZ Publishのここがすごい!eZ Components

● eZ Publishのライブラリーに含まれている/lib/ezc/

● PHP自体の開発に関わったDerick Rethansが生み出した高品質のPHPライブラリー

● 現在はApacheファンデーションでZeta Componentsに生まれ変わっています

● グラフとメールコンポーネントは特にすごい

● カスタムオペレーターで簡単にeZ Publishとインターフェースできる

● eZ Publish 5ではどんどんSymfonyに置き換えられる予定

Page 86: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

eZ Publishのここがすごい!オンラインエディター・eZ OE

● XMLブロックデータタイプを利用すると、編集画面にeZ OE、リッチテキストエディターが利用できます

● TinyMCEベース

● コンテンツをXML形式で保存する

● タグ毎にテンプレートを利用し、タグ毎のテンプレートをオーバーライドできる!

● カスタムタグの追加可能、既存タグのカスタマイす可能

● タグの属性タイプも準備されています

Page 87: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

eZ Publishのここがすごい!eZ Find

● 高機能検索エンジン

● JavaのSolrベース

● 日本語対応● 絞り込み検索「ファセット」● カスタマイズできて、属性の拡張できる

● 本来のfetchの代わりにもなれる

● 外部コンテンツ、複数eZ Publishを同時に検索可能

● パーフォーマンスはかなり早い

Page 88: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

eZ Publishの紹介は以上質問タイム

Page 89: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

日本コミュニティ作成のエクステンションEasy CMS

Page 90: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

Easy CMSの機能紹介

● メインの機能は2つ– フラグ機能

– テンプレート選択機能

● ライセンスはGPL3● 「フラグ絞り込み」データタイプの追加

● モジュールの追加「flag」と「template」

● fetchファンクションの追加

● https://bitbucket.org/ericsagnes/ez-easycms/ からダウンロードできます

Page 91: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

Easy CMSのユースケース

● カタログサイト

● 柔軟な運用が必要の場合

● デザインパターンが多いサイト

Page 92: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

テンプレート機能

● オーバーライドルールを書かずにテンプレートやビューモードを管理画面で選択できる

● 3種類のテンプレートが設定できる– ノードテンプレート

– 子ノードテンプレート

– ノードレイアウト

● テンプレートの設定は親子関係で継承されます● デフォルトでは2選択できます

– 継承 [選択されています]– デフォルト

Page 93: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

テンプレート機能インターフェース

Page 94: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

テンプレート機能ノードテンプレート

● 実際はノードテンプレートに利用されるビューモード

● easycms.ini設定ファイルで追加できます[Templates]viewmodes[]viewmodes[inherit]=継承するviewmodes[default]=デフォルト

● 仕組みはfullビューモードにfetchファンクションで設定されているビューモードを代わりに読み込みます

● 注意! override.iniのルールは「node/view/full.tpl」でなく、「node/view/default.tpl」と設定する必要があります

Page 95: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

テンプレート機能ノードレイアウト

● ページレイアウトを選択できます● 設定ファイルでできます

[Templates]layouts[]layouts[inherit]=継承するlayouts[default]=デフォルト

● 標準の「pagelayout.tpl」を「pagelayout_ノードレイアウト.tpl」に変更します

● 仕組みはpagelayout.tplからfetchでノードレイアウトを取得し、「pagelayout_ノードレイアウト.tpl」を読み込む

● 注意! pagelayout.tplベースオーバライドと一緒に利用できません

Page 96: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

テンプレート機能ユースケース

● 広告キャンペーン

● テーマ的な使い方

● デザインの運用が必要な場合

● サブサイト

Page 97: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

フラグ機能

● テンプレートコードを書かずにフェッチを実装できる● ノードを「コンテナー」と「コンテンツ」にわける● 「コンテンツ」と「コンテナー」の区別は設定ファイルで

できます● 「コンテナー」はフラグを持つことができます● 「コンテンツ」にフラグをつけることができます● 「コンテンツ」に付けれるフラグはノードのパスに含ま

れたコンテナーアイテムのみとなります● 「コンテナー」に「フラグ絞り込み」属性をつければ、

バーチャルフォルダーを実装できる

Page 98: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

フラグ機能・コンテナーインターフェース

Page 99: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

フラグ機能・コンテンツインターフェース

Page 100: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

フラグ機能・フラグ絞り込みインターフェース

Page 101: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

例:カタログ

● アイテムをすべて「アイテム一覧」フォルダーに作成

● 「アイテム一覧」フォルダーにフラグを作る、● 空フォルダーを作って、フラグ絞り込みのターゲッ

トを「アイテム一覧」にし、絞り込むフラグを選択します

● 自動的に絞り込みページができます● デモ

Page 102: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

インストール

● 多少複雑

● eZ Publishをインストール

● easy cmsをダウンロードgit clone [email protected]:ericsagnes/ez-easycms.git extension/easycms

● extension/easycms/doc/install.txt を参照

Page 103: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

課題

● インストールを簡単にする

● 全fetchファンクションをドキュメントする

● eZ Findと連動させる

● 機能を追加する 

Page 104: eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」

ご清聴ありがとうございました!