Upload
ericsagnes
View
2.526
Download
1
Embed Size (px)
DESCRIPTION
Citation preview
CMSインサイドeZ Publishの構築を簡単に!
自己紹介
● サニエ エリック
● フランス人、2001年に来日
● 2008~2011 eZ Systems Japanでテクニカルコンサルタント
● 2011年より独立(eZ Publishを中心)
● eZ Publishコミュニティ活動・毎月にez Publishの勉強会
● [email protected]● @ericsagnes
eZ Publishの紹介
eZ Publish
● ノルウェー発のオープンソースCMS (GPL2)
● 2001年から開発
● eZ Systems社が開発の方針を決めます
● 開発と展開はヨーロッパ中心
2つのeZ Publish
● エンタープライズオープンソースCMS
● エンタープライズ版とオープンソース版
● オープンソースからエンタープライズは移行可能
● プロジェクトの規模とニーズに合わせて、バージョン決めれる
エンタープライズ版
● 有料
● サブスクリプション型
● 正式サポート
● 専用エクステンションマーケット
● ステーブルバージョン(1年2回リリース)
● 専用商用ライセンス
コミュニティ版
● エンタープライズ版とコードベースは一緒
● GPL2ライセンス
● 毎月のマイルストーンリリース
● エンタープライズほどステーブルでありません
● エンタープライズ版より最新機能を含んでいます
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)
eZ Publish 4
● 2007年12月にリリース
● PHP 5に対応したバージョン
● 独自のフレームワーク、eZ Componentsの利用
● 最終バージョンは4.7● 安定しています
eZ Publish 5
● 2012年9月にリリース
● Symfony 2ベース
● 新しいカーネル、カーネルAPI、テンプレート。。。
● eZ Publish 4.7を含んでいる
● 未完成なところもある● 変更点が多く、ドキュメントは現在に少ない● 開発者プレビューに近い● 可能性は広い!
eZ Publish 4環境
● LAMP環境
● PHP 5.2.14以上
● MySQL 5以上
● PostgreSQL 8以上でも動く
● IISでも動く
eZ Publish のインストール
● アーカイブのダウンロード(2012.8はおすすめ)
● アーカイブの解答
● DBの作成
● バーチャルホスト・ホストの設定● ブラウザからアクセスする● インストールを完成する● デモサイト、管理画面を確認する
eZ Publishの事例 海外
eZ Publishの事例 国内
eZ Publish の特徴
● 柔軟なコンテンツエンジン
● 豊富のデフォルト機能
● 開発の柔軟性
● 開発の速度・効率
デフォルト機能(一部)
● 柔軟なコンテンツエンジン● 多言語● バージョン管理● ブログ● 掲示板● 画像自動リサイズ● 他段階承認
● webdav● LDAP● オフィスファイルインポート・
エクスポート
● マルチドメイン● 細かいアクセス権限● マルチデータベース
● SSO● 高機能検索エンジン
● REST API● AJAX API● ファイルの一括アップロード● コンテンツ関連付け
● RSS自動生成
● サイトマップ自動生成
CMSとCMF
● CMSはコンテンツマネジメントシステム
● CMFはコンテンツマネジメントフレームワーク
● eZ PublishはCMFでありながら、CMSである
● と言いますと、eZ Componentsとコンテンツエンジンを使って、別なCMSを「簡単」に作れます
● 管理画面を簡単に置き換えれ、拡張できる
プラグインベースCMSとコアベースCMS
● プラグインベースCMS+ コミュニティが活発的
+ プラグインのチョイスが多い
ー バージョン依存が複雑になります
ー 品質がばらばら
ー コアが浅い
● コアベースCMS
+ バージョンの依存関係問題はほとんどない
+品質が統一されている
ー コミュニティ活動が静か
ー エクステンションは自作ですることが多い
eZ Publishに向いてる案件
● ニーズの高い案件● メディアサイト● マルチドメイン・横展開● カタログサイト
● コーポレートサイト (eZ Webin)● 成長可能性のあるサイト
夢のようなCMS?
● 機能があるだけハードルがやや高い● ドキュメンテーションが少ない、わかりにくい● サイトアクセス、ノード、オブジェクト、ビュー、モ
ジュール。。。初心者から掴みづらいCMS● でもなれると開発時間はかなり短縮できます● 機能の追加も簡単にできます
初心者向けの使い方
● WebInパッケージをインストール
● CSS変更
● コンテンツの調整● コーポレートサイトの出来上がり
eZ Publishを活用した案件
● 8ドメイン・10サイト
● 2つのデータベース● 多言語(日本語、英
語)
● 自動Twitter投稿● イベントの自動管理● クロスドメイン投稿
● 統合RSSフィード
● 承認ワークフロー● 未来公開● 複雑なアクセス権限● 関連付け(タグ)● 画像ギャラリー● 複雑なキャッシュ設定● テンプレート言語の拡
張
eZ Publishを活用した案件
それでも
● ひとつのeZ Publish● 元コードやテンプレートに一切の変更なし● 3つのエクステンションで実装● 〜150枚のテンプレート● 簡単に新規サブサイト・機能の追加可能
eZ Publishの技術紹介
eZ Publishの最大特徴!コンテンツエンジン
● コンテンツを無理矢理CMSに合わせるのではなく、CMSはコンテンツに自然に合う
● コンテンツは自由なコンテンツクラスで定義
● コンテンツクラスはGUIで作れます
● コンテンツクラスは属性の組み合わせ
● 属性はデータタイプで定義できる
● ニーズあれば、カスタムデータタイプは作成できる(PHP)
eZ Publishの最大特徴!コンテンツエンジン
● 「イベント」のコンテンツクラスを作りましょう!
– タイトル[テキスト]– 紹介文[XMLブロック]– 開催日時[日付と時刻]– 終了日時[日時と時刻]– 地図[Google Mapロケーション]
eZ Publishの最大特徴!コンテンツエンジンのメリット
● 既存クラスに簡単にフィールドを追加できます
● DB、コーラムは一切気にしなくていい
● フィールドで絞り込み、検索できます
● コンテンツクラス別のテンプレート実装
● コンテンツクラス別のアクセス権限
● コンテンツレベルにロジック持たせる
コンテンツクラス、コンテンツツリーオブジェクト、ノード
● コンテンツはコンテンツツリーに作ります
● コンテンツを作る際はコンテンツクラスのインスタンス、オブジェクトは作られます
● 同時にコンテンツツリーにノードが作られます
● ノードはオブジェクトの配置先と呼びます
● 一つのオブジェクトは複数のノードに公開されることができます
コンテンツクラス、コンテンツツリーオブジェクト、ノード
ノードID:2オブジェクトID:3
ノードID:12オブジェクトID:15
ノードID:16オブジェクトID:25
ノードID:34オブジェクトID:25
オブジェクトID:3
オブジェクトID:15
オブジェクトID:3
オブジェクトID:25
コンテンツツリー オブジェクトプール
ノード・オブジェクトの骨組み
ノード
オブジェクト
言語(日本語)
バージョン(5)
バージョン(4)
属性タイトル:ほげほげ
属性B
言語(英語)
バージョン(5)
バージョン(4)
属性タイトル:FOO
属性B
コンテンツエンジン最後の一言
● 実際ノードとオブジェクトの境線は薄い
● ノード・オブジェクトの全属性をテンプレートからアクセスできます
● メディアリソースとユーザ管理もコンテンツツリーの一部
● コンテンツツリー内のノードのURLは属性で決めれます
コンテンツエンジン
● イベントクラスコンテンツの作成
● ノードとオブジェクト関係の確認
● 配置先の確認
しっかりとしたアクセス権限
● 行動別で権限を設定できます– 作成
– 編集
– 削除
● コンテンツ別で権限を設定できます– セクション別
– サブツリー別
– 言語別
– 作成ユーザのグループ別
アクセス権限の骨組みポリシー、ロール、ユーザ
● ポリシーはひとつの権限となります– 例「日本語のイベントを作成できる」
● ポリシーは基本的にカーネルの一つのモジュールの一つのファンクションにアクセスを許可します
● ロールはポリシーの組み合わせ● ユーザ(又はユーザグループ)にロールを割り当
てれる● ロールを割り当てるときにコンテンツ制限(サブツ
リー又はセクション)をつけることができます
アクセス権限の骨組みポリシー、ロール、ユーザ
ロールA
ポリシーA
ポリシーB
ロールC
ポリシーD
ポリシーE
ユーザグループ1
ユーザ2
ユーザ3
ロールとポリシー ユーザ管理
アクセス権限最後の一言
● ユーザは普通のオブジェクト・ノードであります● ユーザアカウント属性を持つノーづはすべて有効ユーザとなります
● オブジェクトの複数配置先を利用すれば、同じユーザを数ユーザグループに入れることができます
● ロール割り当て制限をうまく使うとロールは簡単に再利用できます
アクセス権限
● ユーザグループの作成● ユーザの作成● ロールの作成● ロールを割り当てる
豊富な設定設定とサイトアクセス
● 基本の設定ファイルはsettingsフォルダー直下に入っています
● iniファイルとなっています
● ブロックとルールの組み合わせになります● 設定ファイルはたくさんあります!
● 一番重要な設定ファイルはsite.ini● 基本の設定は
– デフォルト設定: settings/直下– オーバーライド設定: settings/override/直下– サイトアクセス設定: settings/siteaccess/の下
● デフォルト以外は.ini.append.phpの拡張をつける(セキュリティのため)
豊富な設定設定とサイトアクセス
● 設定の優先順位は– オーバーライド
– サイトアクセス
– デフォルト
● サイトアクセスは設定の組み合わせ● サイトアクセスは特別な条件で読み込まれる設定
– 特定なホスト名 www.site.com/– 特定なポート www.site.com:8080/– 特定なパス www.site.com/admin/
設定で管理できるもの
● 利用するデザイン● 利用する言語
● 利用するDB● デバッグの有効● テンプレートの設定● イメージの自動リサイズパータン● など
サイトアクセス
● サイトアクセスを利用することで– 多言語サイト
– 複数DBサイト
– 複数デザイン
– 管理画面(ただのデザイン)
– モバイルサイト(ただのデザイン)
– などの実装ができます
エクステンションと設定
● エクステンションで設定を管理できる– デフォルト– サイトアクセス
● あわせて(優先順位で)– オーバーライド– デフォルトサイトアクセス– エクステンションサイトアクセス– エクステンションデフォルト– デフォルト
● の設定場所があります● 多くて混乱しやすいので、管理画面で確認しましょう!
(システム設定 > INIファイル)
設定の変更
● オーバーライドでデバッグモードの有効/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
● 結果の確認
デザインとは
● テンプレートはデザインでまとめます
● デザインは/design直下のフォルダーです
● デザインはテンプレート、CSS、JS、コンテンツでない画像などを含めます
● 一つのサイトアクセスは複数なデザインを利用します– メインデザイン– 追加デザイン(任意、複数可能)– デフォルトデザイン
● site.iniで管理されます
デザインフォールバック
● メインデザインでリソースを見つけない場合には優先順位の次のデザインに探します
● 最終的に「standard」デザインに探します
● standardデザインはすべての基本テンプレートを含めます
● デザインフォールバックをうまく利用すれば、作るテンプレート量を減らすことができます
● デザインを抽象的な使い方もできます!
デザインフォールバック
design/design3/templates/pagelayout.tpl
デザインの抽象・例
デザインの抽象・構造
● design/hospital– 基本の病院テンプレート
● design/ophthalmologist– 眼科の一般テンプレート
● design/dermatologist– 皮膚科の一般テンプレート
● design/dentist/– 歯科の一般テンプレート
● design/dermatologist_a– 皮膚科 A 特定の画像やテンプレート
テンプレート
● 必ずデザインに入っています
● テンプレート言語はsmartyに似ている
● HTMLと{}で囲めたeZ Publishコード
● テンプレート言語を独自オペーレーターで拡張できる
● 一つのページには複数のテンプレートでできています
● テンプレートは2種類あります、レイアウトテンプレートとコンテンツテンプレート
レイアウトテンプレートとコンテンツテンプレート
pagelayout.tpl(レイアウトテンプレート)
コンテンツテンプレート
ヘッダー
フッター
ナビゲーション
ページで利用されるテンプレート
2種類のコンテンツテンプレート
● ノードを表示する時の「ノードテンプレート」/company/news/blog
● カーネルの機能をアクセスする時の「システムテンプレート」/user/login/content/edit/モジュール名/ファンクション名
システムテンプレート
● カーネルのインターフェースとなるテンプレート
● URLは/モジュール名/ビュー名
● 読み込まれるテンプレートファイルはモジュール名/ビュー名.tpluser/login.tpluser/logout.tpl
ノードテンプレート
● コンテンツ(ノード)を表示する際に必ず利用されます
● URLはノードのコンテンツツリーの位置できまります
● システムURLでもアクセスできます/content/view/full/ノードID
● 読み込まれるテンプレートファイルは必ずnode/view/full.tpl
テンプレートオーバーライド
● ノードテンプレートはすべて同じテンプレートを利用します● テンプレートオーバーライドを利用することで、好きな条件
で別なテンプレートを読み込むことができます– 特定なコンテンツクラスのインスタンス
– 特定なノードIDやオブジェクトID– 特定なセクションに入ってるノード– など
● どのテンプレートにオーバーライド使える!(利用できる条件は異なります)
● http://doc.ez.no/eZ-Publish/Technical-manual/4.x/Reference/Template-override-conditions
テンプレートオーバーライド
● override.ini 設定ファイルで管理されます
● オーバーライドブロックをの組み合わせ● 順番でブロックが読み込まれて、最初マッチするも
のは利用されます● 一つのブロックで複数の条件を設定できます
(ANDとなります)
● オーバーライドブロックは下記のよう(基本)– 元のテンプレート
– 代わりに利用するテンプレート
– 条件
オーバーライドブロック
[full_article]Source=node/view/full.tplMatchFile=full/article.tplSubdir=templatesMatch[class_identifier]=article
ブロックタイトル
元テンプレート
利用テンプレート
テンプレートフォルダー
条件
テンプレートビューモード
● テンプレートのビューモードはオーバーライドブロックの元テンプレートの「node/view/ビューモード.tpl」
● デフォルトのビューモードは「full」となります
● ノードのURLはシステム的に/content/view/full/ノードID
● 一言で言いますとビューモードは求めるテンプレートです
● ビューモードにいろいろの可能性があります!/content/view/sitemap/ノードID
デバッグで利用されているテンプレートオーバーライドの確認
テンプレートの場所
● テンプレートはデザインに入ります– /design/デザイン名/templates 標準テンプレート
– /design/デザイン名/override/templates オーバーライドテンプレート
● テンプレートのパスは深くなりますので、間違いやすい(特にエクステンションを利用する際)
テンプレート言語
● HTMLとeZ Publishコードの組み合わせ
● eZ Publishコードは{}で囲む
● eZ Publishコードでは
– 変数の定義と呼び出し
– オペーレーターによる処理
– ファンクションによる処理(フェッチ、インクルード等)
– ループ、IF等のブロック処理
● 独自オペーレーターで拡張できます
テンプレート変数
● テンプレートで利用できる変数
● 「$」で始まる
● 2種類あります– モジュールが提供する変数
$nodeなど
– テンプレートで作る変数
● 変数のタイプは– 数字– 文字列– 配列– オブジェクト
– ブーリアン
テンプレート変数
● {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)} ハッシュ
$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
テンプレートオペレーター
● テンプレート内でロジックを実行できる特別なキーワード
● 基本的はインプットに対して、アウトプットを生成します
– {concat('hello',' world')} => 'hello world'
● 「|」でオペレーターを繋げれる
– {10|inc()|dec()} => 10● デフォルトで140オペーレーター以上があります
● PHPで独自オペーレーターが作れる
テンプレートファンクション
● オペーレーターに似ていますが、インプットを渡すことができません
● 代表的に他のテンプレートの呼び出しとコンテンツを取得するフェッチを含めます
– {include uri='design:footer.html'}● フェッチファンクション以外、独自ファンクションは
あんまり作らない
テンプレートブロック
● ブロックは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}
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}
fetchファンクション
● fetchファンクションでモデルにクエリーを送れます(コンテンツの取得)
● モジュール毎に設定されています● 公式ドキュメントにほとんどドキュメントされていま
す
● 独自fetchファンクションを追加することができます
● 書き方は{fetch('モジュール名','fetchファンクション名',[パラメーター])}
代表的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')}
fetch – content, node
● 単独のノードをフェッチする● ノードオブジェクト
[eZContentObjectTreeNode]を戻す
● 使い方{def $node=fetch('content','node',hash(
'node_id', ノードID))}
● 追加パラメーター
– 'language-code' 特定な言語でフェッチする
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' ツリーの深さ [数字]
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')
))}
テンプレート呼び出し
● テンプレート内から、オーバーライドルールに従って、テンプレートを呼び出すことができます
● 最も使われるのは– ノードテンプレートを呼び出す
{node_view_gui}– 属性テンプレートを呼び出す
{attribute_view_gui}● テンプレート作成の最高の味方!
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'}
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をうまく使えば、綺麗なテンプレート、テンプレートの因数分解ができて、効率がどんどんアップ!
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'}
テンプレートベストプラクティス
● 変数の中身を見たい時はattributeオペーレーターを使う{$var|attribute(show,1)}
● できるだけテンプレートの因数分解をして、数少ない、わかりやすいテンプレートを作りましょう
● テンプレート言語のスピードはやや遅い(PHPに比べれば)、できることが限られていますので、テンプレート言語で実装が難しいものはカスタムオペーレーターで実装
例:簡単なニュース一覧の設計
● 下記の仕様にあったニュースの一覧を表示したい– 最新の10ニュースを表示する
– 最新のニュースはタイトル、概要テキストと画像
– 次の4ニュースタイトルと概要– 残りの5ニュースはタイトルのみ
● 3つのビューモードを利用します
– headline– detailed– line
例:簡単なニュース一覧の設計
● ニュース一覧テンプレート
{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}
例:簡単なニュース一覧の設計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>
エクステンション
● 普段開発する際はエクステンションのみで行います
● 元のdesignと関わらなくて、まとまりもいい
● eZ Publishでエクステンションはほとんどの機能を実装できます– 設定・サイトアクセス– デザイン・テンプレート– テンプレートオペーレーター– 翻訳
– PHPクラス
– データタイプ
– カーネルオーバーライド
– 管理画面の拡張
エクステンションベストプラクティス
● サイトアクセス、設定はすべてエクステンションに持っていく● オバーライドテンプレートは綺麗にまとめる
– コンテンツクラスベースオーバーライドは/extension/エステンション名/design/デザイン名/override/templates/classes/コンテンツクラス名/ビュー名.tpl
– ノードID・オブジェクトIDベースオーバーライドは/extension/エステンション名/design/デザイン名/override/templates/pages/ページの/パス.tpl
● テンプレートで5行以上の再利用できるロジックはオペーレーターにする
● オペーレーターのコードはできるだけPHPクラスに移す
● 実装が早い、デバッグは簡単、テンプレートはわかりやすい、可能性が広がる
eZ Publishのここがすごい!eZ Components
● eZ Publishのライブラリーに含まれている/lib/ezc/
● PHP自体の開発に関わったDerick Rethansが生み出した高品質のPHPライブラリー
● 現在はApacheファンデーションでZeta Componentsに生まれ変わっています
● グラフとメールコンポーネントは特にすごい
● カスタムオペレーターで簡単にeZ Publishとインターフェースできる
● eZ Publish 5ではどんどんSymfonyに置き換えられる予定
eZ Publishのここがすごい!オンラインエディター・eZ OE
● XMLブロックデータタイプを利用すると、編集画面にeZ OE、リッチテキストエディターが利用できます
● TinyMCEベース
● コンテンツをXML形式で保存する
● タグ毎にテンプレートを利用し、タグ毎のテンプレートをオーバーライドできる!
● カスタムタグの追加可能、既存タグのカスタマイす可能
● タグの属性タイプも準備されています
eZ Publishのここがすごい!eZ Find
● 高機能検索エンジン
● JavaのSolrベース
● 日本語対応● 絞り込み検索「ファセット」● カスタマイズできて、属性の拡張できる
● 本来のfetchの代わりにもなれる
● 外部コンテンツ、複数eZ Publishを同時に検索可能
● パーフォーマンスはかなり早い
eZ Publishの紹介は以上質問タイム
日本コミュニティ作成のエクステンションEasy CMS
Easy CMSの機能紹介
● メインの機能は2つ– フラグ機能
– テンプレート選択機能
● ライセンスはGPL3● 「フラグ絞り込み」データタイプの追加
● モジュールの追加「flag」と「template」
● fetchファンクションの追加
● https://bitbucket.org/ericsagnes/ez-easycms/ からダウンロードできます
Easy CMSのユースケース
● カタログサイト
● 柔軟な運用が必要の場合
● デザインパターンが多いサイト
テンプレート機能
● オーバーライドルールを書かずにテンプレートやビューモードを管理画面で選択できる
● 3種類のテンプレートが設定できる– ノードテンプレート
– 子ノードテンプレート
– ノードレイアウト
● テンプレートの設定は親子関係で継承されます● デフォルトでは2選択できます
– 継承 [選択されています]– デフォルト
テンプレート機能インターフェース
テンプレート機能ノードテンプレート
● 実際はノードテンプレートに利用されるビューモード
● easycms.ini設定ファイルで追加できます[Templates]viewmodes[]viewmodes[inherit]=継承するviewmodes[default]=デフォルト
● 仕組みはfullビューモードにfetchファンクションで設定されているビューモードを代わりに読み込みます
● 注意! override.iniのルールは「node/view/full.tpl」でなく、「node/view/default.tpl」と設定する必要があります
テンプレート機能ノードレイアウト
● ページレイアウトを選択できます● 設定ファイルでできます
[Templates]layouts[]layouts[inherit]=継承するlayouts[default]=デフォルト
● 標準の「pagelayout.tpl」を「pagelayout_ノードレイアウト.tpl」に変更します
● 仕組みはpagelayout.tplからfetchでノードレイアウトを取得し、「pagelayout_ノードレイアウト.tpl」を読み込む
● 注意! pagelayout.tplベースオーバライドと一緒に利用できません
テンプレート機能ユースケース
● 広告キャンペーン
● テーマ的な使い方
● デザインの運用が必要な場合
● サブサイト
フラグ機能
● テンプレートコードを書かずにフェッチを実装できる● ノードを「コンテナー」と「コンテンツ」にわける● 「コンテンツ」と「コンテナー」の区別は設定ファイルで
できます● 「コンテナー」はフラグを持つことができます● 「コンテンツ」にフラグをつけることができます● 「コンテンツ」に付けれるフラグはノードのパスに含ま
れたコンテナーアイテムのみとなります● 「コンテナー」に「フラグ絞り込み」属性をつければ、
バーチャルフォルダーを実装できる
フラグ機能・コンテナーインターフェース
フラグ機能・コンテンツインターフェース
フラグ機能・フラグ絞り込みインターフェース
例:カタログ
● アイテムをすべて「アイテム一覧」フォルダーに作成
● 「アイテム一覧」フォルダーにフラグを作る、● 空フォルダーを作って、フラグ絞り込みのターゲッ
トを「アイテム一覧」にし、絞り込むフラグを選択します
● 自動的に絞り込みページができます● デモ
インストール
● 多少複雑
● eZ Publishをインストール
● easy cmsをダウンロードgit clone [email protected]:ericsagnes/ez-easycms.git extension/easycms
● extension/easycms/doc/install.txt を参照
課題
● インストールを簡単にする
● 全fetchファンクションをドキュメントする
● eZ Findと連動させる
● 機能を追加する
ご清聴ありがとうございました!