編集可能テンプレートが導入された目的は次のとおりです。
専門的な作成者がテンプレートを作成および編集できるようにすること。
template-authors
グループのメンバーである必要があります。テンプレートとそこから作成されたすべてのページとの間に動的接続が維持されるようにすること。これにより、テンプレートに加えた変更が各ページに反映されるようになります。
ページコンポーネントの汎用性を高め、核となるページコンポーネントをカスタマイズなしで使用できるようにすること。
編集可能テンプレートを使用すると、ページの構成要素がコンポーネント内で分離されます。UI で必要なコンポーネントの組み合わせを設定できるので、ページのバリエーションごとに新しいページコンポーネントを開発する必要はなくなります。
静的テンプレートも使用できます。
このドキュメントでは、
編集可能テンプレートの作成の概要
編集可能テンプレートの作成に必要な管理者/開発者のタスク
編集可能テンプレートの技術基盤
このドキュメントでは、テンプレートの作成と編集について既に理解していることを前提としています。オーサリングに関するドキュメントページテンプレートの作成を参照してください。ここでは、テンプレート作成者に公開されている編集可能テンプレートの機能について詳しく説明されています。
次のチュートリアルは、新しいプロジェクトで編集可能なページテンプレートを設定する場合にも役立つ場合があります。
AEM Sites の概要(パート 2)- ベースページとテンプレートの作成
編集可能テンプレートの作成は、主にテンプレート作成者が、テンプレートコンソールおよびテンプレートエディターを使用しておこないます。ここでは、そのプロセスの概要を示し、技術的なレベルでどのような処理が行われるかを説明します。
AEM プロジェクトで編集可能テンプレートを使用する方法について詳しくは、Lazybones を使用した AEM プロジェクトの作成を参照してください。
新しい編集可能テンプレートを作成する場合は、次の手順を実行します。
テンプレート用のフォルダーを作成します。これは必須ではありませんが、推奨されるベストプラクティスです。
テンプレートタイプを選択します。テンプレート定義を作成するために、このタイプがコピーされます。
様々なテンプレートタイプが標準で提供されています。必要に応じて、独自のサイト固有のテンプレートタイプを作成することもできます。
新しいテンプレートの構造、コンテンツポリシー、初期コンテンツおよびレイアウトを設定します。
構造
構造では、テンプレートのコンポーネントとコンテンツを定義できます。
テンプレート構造で定義されたコンポーネントは、結果ページに移動することも、結果ページから削除することもできません。
ページ作成者がコンポーネントを追加または削除するには、テンプレートに段落システムを追加する必要があります。
コンポーネントのロックを解除(再度ロックできます)して、初期コンテンツを定義できます。
テンプレート作成者が構造を定義する方法について詳しくは、ページテンプレートの作成を参照してください。
構造の技術的な詳細については、このドキュメントの構造を参照してください。
ポリシー
コンテンツポリシーでは、コンポーネントのデザインプロパティを定義します。
これらのポリシーは、テンプレートと、そのテンプレートを使用して作成されるページに適用されます。
テンプレート作成者がポリシーを定義する方法について詳しくは、ページテンプレートの作成を参照してください。
ポリシーの技術的な詳細については、このドキュメントのコンテンツポリシーを参照してください。
初期コンテンツ
テンプレート作成者が構造を定義する方法について詳しくは、ページテンプレートの作成を参照してください。
初期コンテンツの技術的な詳細については、このドキュメントの初期コンテンツを参照してください。
レイアウト
テンプレート作成者がテンプレートレイアウトを定義する方法について詳しくは、ページテンプレートの作成を参照してください。
テンプレートレイアウトの技術的な詳細については、このドキュメントのレイアウトを参照してください。
テンプレートを有効化し、特定のコンテンツツリーに対して許可します。
テンプレート作成者がテンプレートを有効にする方法について詳しくは、ページテンプレートの作成を参照してください。
テンプレートの有効化の技術的な詳細については、このドキュメントの使用するテンプレートの有効化と許可を参照してください。
テンプレートを使用してコンテンツページを作成します。
ページ作成者がテンプレートを使用してページを作成する方法について詳しくは、ページの作成と整理を参照してください。
編集可能テンプレートを使用したページ作成の技術的な詳細については、このドキュメントの作成されるコンテンツページを参照してください。
国際化する必要がある情報は、テンプレートに含めないでください。内部化のためには、コアコンポーネントのローカライゼーション機能の利用をお勧めします。
テンプレートは、ページ作成ワークフローを効率化する強力なツールです。ただし、テンプレートが多すぎると作成者が圧倒され、ページ作成がを混乱するおそれがあります。経験上、テンプレートの数を 100 未満に抑えるのがよいでしょう。
パフォーマンスに影響が及ぶ可能性があるので、1000 個を超えるテンプレートを用意することはお勧めしません。
エディタークライアントライブラリは、コンテンツページに cq.shared
名前空間が存在することを前提としています。名前空間が存在しない場合は、JavaScript エラー「Uncaught TypeError: Cannot read property 'shared' of undefined
」が発生します。
すべてのサンプルコンテンツページには cq.shared
が含まれているので、それらをベースとするコンテンツには自動的に cq.shared
が含められます。ただし、サンプルコンテンツをベースとせず、ゼロから独自のコンテンツページを作成する場合は、cq.shared
名前空間を含める必要があります。
詳しくは、クライアントサイドライブラリの使用を参照してください。
以下のフォルダーを使用してテンプレートを整理できます。
フォルダーはネストできますが、テンプレートコンソールで表示すると、フラット構造として表されます。
標準の AEM インスタンスでは、テンプレートコンソールに既にグローバルフォルダーが存在します。この中にデフォルトのテンプレートが格納されており、現在のフォルダーにポリシーやテンプレートタイプがない場合にはフォールバックとして機能します。このフォルダーにデフォルトのテンプレートを追加することも、新しいフォルダーを作成すること(推奨)もできます。
カスタマイズしたテンプレートを格納する新しいフォルダーを作成し、グローバルフォルダーは使用しないことをお勧めします。
フォルダーは、admin
権限を持つユーザーが作成する必要があります。
テンプレートのタイプやポリシーは、次の優先順位に従ってすべてのフォルダーに継承されます。
/conf/global
/apps
/libs
許可されたすべてのエントリのリストが表示されます。オーバーラップする設定がある場合(path
/label
)、現在のフォルダーに最も近いインスタンスがユーザーに表示されます。
新しいフォルダーを作成するには、次のいずれかの方法を使用できます。
インスタンスの新しいフォルダー(/conf の下)は、プログラムで自動的にまたは CRXDE Lite を使用して作成できます。
次の構造を使用する必要があります。
/conf
<your-folder-name> [sling:Folder]
settings [sling:Folder]
wcm [cq:Page]
templates [cq:Page]
policies [cq:Page]
その後、フォルダーのルートノードに次のプロパティを定義できます。
<your-folder-name> [sling:Folder]
名前:jcr:title
型:String
値:テンプレートコンソールに表示される(フォルダーの)タイトルです。
作成者が新しいフォルダーにテンプレートを作成できるようにするには、標準のオーサリング権限(content-authors
など)に加え、グループを割り当てて作成者に必要なアクセス権限(ACL)を定義する必要があります。
割り当てる必要があるデフォルトのグループは、template-authors
グループです。詳しくは、次の節ACL とグループを参照してください。
アクセス権限の管理および割り当てについて詳しくは、アクセス権限の管理を参照してください。
グローバルナビゲーション/ツール/設定ブラウザーに移動します。
グローバルフォルダーを含めた既存のフォルダーは左側に一覧表示されます。
「作成」をクリックします。
設定を作成ダイアログで、以下のフィールドを設定する必要があります。
「作成」をクリックします。
グローバルフォルダーにテンプレートを作成する場合は、設定ブラウザーでグローバルフォルダーを編集し、「編集可能なテンプレート」オプションをオンにします。ただし、これは推奨されるベストプラクティスではありません。
詳しくは、設定ブラウザーのドキュメントを参照してください。
(CRXDE または設定ブラウザーを使用して)テンプレートフォルダーが作成されたら、セキュリティを確保するために、テンプレートフォルダーの適切なグループに ACL を定義する必要があります。
例として、We.Retail 参照実装のテンプレートフォルダーを使用できます。
template-authors
グループは、テンプレートへのアクセスを管理するために使用されるグループで、AEM に標準で付属していますが空です。ユーザーは、プロジェクト/サイトのグループに追加する必要があります。
template-authors
グループは、新しいテンプレートを作成する必要があるユーザー専用です。
テンプレートの編集は非常に強力なので、正しく行わないと既存のテンプレートが壊れる場合があります。そのため、このロールには注意深く、ふさわしいユーザーだけを含めてください。
次の表に、テンプレートの編集に必要な権限の詳細を示します。
パス | ロール/グループ | 権限 |
説明 |
---|---|---|---|
/conf/<your-folder>/settings/wcm/templates |
テンプレート作成者 |
読み取り、書き込み、複製 | サイト固有の /conf スペースでテンプレートを作成、読み取り、更新、削除、複製するテンプレート作成者 |
匿名 Web ユーザー | 読み取り | 匿名 Web ユーザーは、ページのレンダリング中にテンプレートを読む必要があります | |
コンテンツ作成者 | 複製 | replicateContent 作成者は、ページをアクティブ化する際に、ページのテンプレートをアクティブ化する必要があります | |
/conf/<your-folder>/settings/wcm/policies |
Template Author |
読み取り、書き込み、複製 | サイト固有の /conf スペースでテンプレートを作成、読み取り、更新、削除、複製するテンプレート作成者 |
匿名 Web ユーザー | 読み取り | 匿名 Web ユーザーは、ページのレンダリング中にポリシーを読む必要があります | |
コンテンツ作成者 | 複製 | コンテンツ作成者は、ページをアクティブ化する際に、ページのテンプレートのポリシーをアクティブ化する必要があります | |
/conf/<site>/settings/template-types |
テンプレート作成者 | 読み取り | テンプレート作成者は、定義済みのテンプレートタイプの 1 つに基づいて新しいテンプレートを作成します。 |
匿名 Web ユーザー | なし | 匿名 Web ユーザーはテンプレートの種類にアクセスできません |
デフォルトの template-authors
グループは、プロジェクト設定のみに対応しています。この場合、template-authors
のすべてのメンバーは、すべてのテンプレートへのアクセスとそれらの作成が許可されています。より複雑な設定では、テンプレートに個別にアクセスするためにテンプレート作成者グループが複数必要になるので、さらに多くのカスタムテンプレート作成者グループを作成する必要があります。ただし、テンプレート作成者グループの権限は変わりません。
テンプレートは /conf/global
に格納されなくなりましたが、従来のインストールでは、まだこの場所にテンプレートが存在する場合があります。このような従来の場合のみ、次の /conf/global
パスを明示的に設定する必要があります。
パス | ロール/グループ | 権限 |
説明 |
---|---|---|---|
/conf/global/settings/wcm/templates |
テンプレート作成者 | 読み込み、書き込み、レプリケート | テンプレート作成者は、以下の場所でテンプレートを作成、読み取り、更新、削除、および複製します /conf/global |
匿名 Web ユーザー | 読み取り | 匿名 Web ユーザーは、ページのレンダリング中にテンプレートを読む必要があります | |
コンテンツ作成者 | 複製 | コンテンツ作成者は、ページをアクティブ化する際に、ページのテンプレートをアクティブ化する必要があります | |
/conf/global/settings/wcm/policies |
Template Author |
読み込み、書き込み、レプリケート | テンプレート作成者は、以下の場所でテンプレートを作成、読み取り、更新、削除、および複製します /conf/global |
匿名 Web ユーザー | 読み取り | 匿名 Web ユーザーは、ページのレンダリング中にポリシーを読む必要があります | |
コンテンツ作成者 | 複製 | コンテンツ作成者は、ページをアクティブ化する際に、ページのテンプレートのポリシーをアクティブ化する必要があります | |
/conf/global/settings/wcm/template-types |
テンプレート作成者 | 読み取り | テンプレート作成者は、定義済みのテンプレートタイプの 1 つに基づいて新しいテンプレートを作成します |
匿名 Web ユーザー | なし | 匿名 Web ユーザーはテンプレートの種類にアクセスできません |
新しいテンプレートの作成時には、テンプレートタイプを指定する必要があります。
テンプレートタイプは、テンプレートのためのテンプレートとなるものです。テンプレート作成時に選択したテンプレートタイプの構造と初期コンテンツに基づいて、新しいテンプレートが作成されます。
テンプレートタイプでは、以下の項目を定義できます。
AEM には、既製のテンプレートタイプがいくつか用意されています(HTML 5 ページ、アダプティブフォームページなど)。
テンプレートタイプは通常、開発者が定義します。
既製のテンプレートタイプは次のフォルダーに保存されています。
/libs/settings/wcm/template-types
/libs
パス内のものは一切変更しないでください。/libs
のコンテンツが、インスタンスを次回アップグレードする際に(場合によってはホットフィックスまたは機能パックを適用したとき)上書きされるからです。
サイト固有のテンプレートタイプは、以下に相当する場所に保存してください。
/apps/settings/wcm/template-types
カスタマイズしたテンプレートタイプの定義は、ユーザー定義フォルダー(推奨)または global
フォルダーに保存してください。次に例を示します。
/conf/<my-folder-01>/<my-folder-02>/settings/wcm/template-types
/conf/<my-folder>/settings/wcm/template-types
/conf/global/settings/wcm/template-types
テンプレートタイプの保存は、正しいフォルダー構造(/settings/wcm/...
)に従う必要があります。そうしないと、テンプレートタイプが見つからなくなります。
編集可能テンプレートで使用されるデバイスグループ(プロパティ cq:deviceGroups
の相対パスとして設定)によって、ページオーサリングのレイアウトモードのエミュレーターとして利用できるモバイルデバイスが決まります。この値は次の 2 つの場所で設定できます。
新しい編集可能テンプレートを作成すると、この値がテンプレートタイプから個々のテンプレートにコピーされます。値がタイプで設定されていない場合は、テンプレートで設定できます。テンプレートの作成後に、タイプからテンプレートに継承されることはありません。
cq:deviceGroups
の値は、/etc/mobile/groups/responsive
などの絶対パスとしてではなく、mobile/groups/responsive
などの相対パスとして設定する必要があります。
静的テンプレートでは、cq:deviceGroups
の値はサイトのルートに設定できます。
編集可能テンプレートでは、この値はテンプレートレベルで保管されるようになっており、ページのルートレベルではサポートされません。
他のテンプレートの基盤となるテンプレートを作成した場合、このテンプレートをテンプレートタイプとしてコピーできます。
templates
ノードからtemplate-types
テンプレートフォルダーの下の ノードにコピーします。templates
ノードから削除します。template-types
ノードの下にあるテンプレートのコピーで、すべての jcr:content
ノードから cq:template
および cq:templateType
プロパティをすべて削除します。また、GitHub で入手できる、編集可能テンプレートのサンプルを基盤として使用し、独自のテンプレートタイプを作成することもできます。
GitHub のコード
このページのコードは GitHub にあります
編集可能テンプレートの定義は、ユーザー定義フォルダー(推奨)または global
フォルダーに格納されます。次に例を示します。
/conf/<my-folder>/settings/wcm/templates
/conf/<my-folder-01>/<my-folder-02>/settings/wcm/templates
/conf/global/settings/wcm/templates
テンプレートのルートノードは、以下のスケルトン構造を持つ cq:Template
タイプです。
<template-name>
initial
jcr:content
root
<component>
...
<component>
jcr:content
@property status
policies
jcr:content
root
@property cq:policy
<component>
@property cq:policy
...
<component>
@property cq:policy
structure
jcr:content
root
<component>
...
<component>
cq:responsive
breakpoints
thumbnail.png
主な要素は以下のとおりです。
<template-name>
[initial](#initial-content)
jcr:content
[structure](#structure)
[policies](#policies)
thumbnail.png
このノードは、テンプレートのプロパティを保持します。
名前:jcr:title
名前:status
型:String
値:draft
、enabled
または disabled
作成されるページの構造を定義します。
新しいページの作成時に初期コンテンツ(/initial
)と統合されます。
構造に加えた変更は、そのテンプレートを使用して作成されたすべてのページに反映されます。
structure/jcr:content/root
(root
)ノードは、作成されたページで使用できるコンポーネントのリストを定義します。
テンプレート構造で定義されたコンポーネントは、作成されたページで移動することも、作成されたページから削除することもできません。
コンポーネントをロック解除すると、editable
プロパティが true
に設定されます。
既にコンテンツを含むコンポーネントをロック解除すると、このコンテンツは initial
ブランチに移動されます.
cq:responsive
ノードは、レスポンシブレイアウトの定義を保持します。
作成時に新しいページに表示される初期コンテンツを定義します。
jcr:content
ノードが含まれます。/structure
)と統合されます。root
ノードは、作成されたページで使用できるコンポーネントを定義する、コンポーネントのリストを保持します。テンプレートの編集時にレイアウトを定義できます。レイアウトは標準のレスポンシブレイアウトを使用し、必要に応じて設定することもできます。
コンテンツ(またはデザイン)ポリシーは、コンポーネントの可用性や最小/最大寸法など、コンポーネントのデザインプロパティを定義します。これらのポリシーは、テンプレートと、そのテンプレートを使用して作成されるページに適用されます。テンプレートエディターでコンテンツポリシーを作成して選択できます。
root
ノード上の cq:policy
プロパティ
/conf/<your-folder>/settings/wcm/templates/<your-template>/policies/jcr:content/root
ページの段落システムのコンテンツポリシーに対する相対参照を提供します。
root
の下のコンポーネントを明示的に示すノードの cq:policy
プロパティは、個々のコンポーネントのポリシーへのリンクを提供します。
実際のポリシー定義は、次の場所に保存されます。
/conf/<your-folder>/settings/wcm/policies/wcm/foundation/components
ポリシー定義のパスは、コンポーネントのパスによって異なります。cq:policy
は、設定自体への相対参照を保持します。
編集可能テンプレートから作成されたページの場合は、ページエディターでデザインモードが提供されません。
編集可能テンプレートの policies
ツリーは、次の場所にある静的テンプレートのデザインモード設定と同じ階層を持ちます。
/etc/designs/<my-site>/jcr:content/<component-name>
静的テンプレートのデザインモード設定は、ページコンポーネントごとに定義されたものです。
ページポリシーを使用して、テンプレートまたは作成されるページで、ページ(メインの parsys)のコンテンツポリシーを定義できます。
テンプレートの有効化
テンプレートは、次のどちらかの方法で有効化してからでなければ使用できません。
テンプレートコンソールからテンプレートを有効化する。
jcr:content
ノードの status プロパティを設定する。
例:
/conf/<your-folder>/settings/wcm/templates/<your-template>/jcr:content
プロパティの定義
enabled
許可されたテンプレート
cq:allowedTemplates
jcr:content
ノードに設定します。/conf/<your-folder>/settings/wcm/templates/.*
編集可能テンプレートから作成されるページには、次の特徴があります。
テンプレートの structure
と initial
を統合したサブツリーを使用して作成されます。
テンプレートおよびテンプレートタイプに保持されている情報への参照を保持します。これは、次のプロパティを持つ jcr:content
ノードを使用して行います。
cq:template
実際のテンプレートへの動的参照を提供します。テンプレートへの変更を実際のページに反映させることができます。
cq:templateType
テンプレートタイプへの参照を提供します。
上の図は、テンプレート、コンテンツおよびコンポーネントの相関関係を示したものです。
コントローラー - /content/<my-site>/<my-page>
テンプレートを参照した結果のページ。コンテンツがプロセス全体を制御します。定義に従って、適切なテンプレートとコンポーネントにアクセスします。
設定 - /conf/<my-folder>/settings/wcm/templates/<my-template>
テンプレートおよび関連するコンテンツポリシーがページ設定を定義します。
モデル - OSGi バンドル
OSGi バンドルが機能を実装します。
表示 - /apps/<my-site>/components
オーサー環境とパブリッシュ環境の両方で、コンテンツがコンポーネントによってレンダリングされます。
ページのレンダリング時
テンプレート:
cq:template
ノードの jcr:content
プロパティが、そのページに対応するテンプレートにアクセスするために参照されます。コンポーネント:
ページコンポーネントは、テンプレートの structure/jcr:content
ツリーとページの jcr:content
ツリーを統合します。
作成者は、ページコンポーネントを使用して、「編集可能」のフラグが設定されているテンプレート構造のノード(およびいずれかの子)を編集できるだけです。
ページ上にコンポーネントをレンダリングする際、そのコンポーネントの相対パスが jcr:content
ノードから取得されます。その後、テンプレートの policies/jcr:content
ノードの下の同じパスが検索されます。
このノードの cq:policy
プロパティは、実際のコンテンツポリシーを指します(すなわち、このプロパティは、そのコンポーネントのデザイン設定を保持しています)。
このため、同じコンテンツポリシー設定を再利用する複数のテンプレートを持つことができます。