コンテンツのブロックが見出しの下に保持され、一度に 1 つの見出ししか表示されない単純なアコーディオンのコンポーネントを作成しようとしています。私の推奨する実装では、2 つのコンポーネントを使用します。1 つはアコーディオン全体を表し、2 番目のコンポーネントは単一のエントリを表します。
コンテンツの作成者は、サイドキックからアコーディオンをプルして、1 つまたは複数のアコーディオン アイテムをアコーディオンにドロップできますが、他のコンポーネントをここにドロップすることはできません。アコーディオン アイテムは、アコーディオン コンポーネントにのみドロップできる必要があり、他の parsys 内にはドロップできません。
私の問題は、現在、他のコンテンツをアコーディオンに追加し、アコーディオンの外側にアコーディオン アイテムを追加できることです。
これを解決するための最初の試みは次のとおりです。
foobar/components/accordion
foobar/components/accordion/accordion.jsp
foobar/components/accordion/cq:editConfig
foobar/components/accordion/dialog
foobar/components/accordion/accordionitem
foobar/components/accordion/accordionitem/accordionitem.jsp
foobar/components/accordion/accordionitem/cq:editConfig
foobar/components/accordion/accordionitem/dialog
これらは、これからの構成ファイルです。
アコーディオン/.content.xml
<jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0"
xmlns:cq="http://www.day.com/jcr/cq/1.0"
xmlns:jcr="http://www.jcp.org/jcr/1.0"
cq:isContainer="{Boolean}true"
jcr:primaryType="cq:Component"
jcr:title="Accordion"
sling:resourceSuperType="foundation/components/parbase"
allowedChildren="[*/accordion/accordionitem]"
allowedParents="[*/parsys]"
componentGroup="General"/>
アコーディオン/_cq_editConfig.xml
<jcr:root xmlns:cq="http://www.day.com/jcr/cq/1.0"
xmlns:jcr="http://www.jcp.org/jcr/1.0"
cq:actions="[-,edit,-,delete]"
cq:layout="editbar"
jcr:primaryType="cq:EditConfig">
<cq:listeners
jcr:primaryType="cq:EditListenersConfig"
aftercopy="REFRESH_PAGE"
afterdelete="REFRESH_PAGE"
afterinsert="REFRESH_PAGE"/>
</jcr:root>
ダイアログは空白で、コンポーネントがサイドキックに表示されるようにするためだけに存在します。
accordion.jsp には、基礎となる parsys が含まれているだけです。
アコーディオン/accordionitem/.content.xml
<jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0"
xmlns:cq="http://www.day.com/jcr/cq/1.0"
xmlns:jcr="http://www.jcp.org/jcr/1.0"
jcr:primaryType="cq:Component"
jcr:title="Accordion Item"
sling:resourceSuperType="foundation/components/parbase"
allowedParents="[*/accordion]"
componentGroup="General"/>
アコーディオン項目ダイアログはタイトルを受け取ります。editConfig はツールバーを追加するだけで、リスナーは追加しません。
accordionitem.jsp は、ダイアログから取得したタイトルを出力し、parsys を持っています。
私の問題は、parsys が accordion および accordionitem コンポーネントのルールを使用していないことです。代わりに、上書きされない限り、代わりに次の parsys から継承するように見えます。
ページで編集モードを使用して適切なコンポーネントを選択することでコンポーネントを正しく設定できますが、それではテンプレートに対して情報が設定されるため、すべてのページ テンプレートに対して同じ構成を実行する必要があります。私が望むのは、それが一度存在するように、代わりにコンポーネント定義で定義することです。
最初にコンポーネントを書いた後、まったく同じシーンを説明しているこのブログを見つけました: http://jenikya.com/blog/2012/03/cq5-accordion-component.html
それを参照して、代わりに accordion.jsp 内で使用する parsys の拡張機能を追加してみました。これはコードに違いをもたらさなかったので、私のカスタム parsys でさえ、アコーディオン項目以外のコンポーネントを追加することができました。
何が間違っているのか、または他のアプローチを取るべきかについてのガイダンスは大歓迎です。