2013-05-21 15 views
6

単純なアコーディオンのコンポーネントを作成しようとしています。コンテンツのブロックは見出しの下にあり、見出しは一度に1つしか表示されません。私の好みの実装では、2つのコンポーネント、1つはアコーディオン全体を表し、もう1つはコンポーネントを1つのコンポーネントとして表します。Adob​​e CQ子コンポーネントを制限するコンポーネント

アイデアは、コンテンツ作成者はその後、アコーディオンに一つ以上のアコーディオンのアイテムをドロップ、相棒からアコーディオンを引くが、任意の他のコンポーネントがここにドロップできるようにすることができないということです。アコーディオンアイテムは、アコーディオンコンポーネントにのみドロップすることができ、他のパーサーにはドロップできません。

私の問題は、現在、アコーディオンに他のコンテンツを追加し、アコーディオンの外にアコーディオンアイテムを追加することが可能であるということです。

これを解決する最初の試みがされた:

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には、基本パースが含まれています。

アコーディオン/ 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コンポーネントのルールを使用していないことが原因と思われます。代わりに、上書きされない限り、代わりに次の構文解析から継承するように見えます。

私は、ページ上で編集モードを使用して、適切なコンポーネントを選択することにより、正しくコンポーネントを設定することができますが、それは私がすべてのページテンプレートに同じ設定を行う必要が意味し、テンプレートに対する情報を設定します。私が欲しいのは、それがかつて存在しているように、それは代わりにコンポーネント定義で定義されていることです。 Iが基準として、私が代わりにaccordion.jsp内で使用するparsysの拡張を追加しようとした使用http://jenikya.com/blog/2012/03/cq5-accordion-component.html

:最初の私は正確に同じのscenerio説明このブログを発見コンポーネントを書き込んだ後

。これはコードには何の差もなく、私のカスタムパーツでさえ、アコーデオンアイテム以外のコンポーネントを追加することができました。

取るために何が間違っているか、他の方法のいずれか上の任意のガイダンスは非常に高く評価されます。

答えて

0

ここでの解決策は、parsysを使用して、コンポジットコンポーネントを構築して、アコーデオンのコンテンツをコンポーネントのセットのみに限定することです(ブログエントリで説明しています)。

dam/components/asseteditor/thumbnailコンポーネントでもこの手法を使用しているhttp://localhost:4502/content/geometrixx/en/company/press/asseteditor.htmlをご覧ください。

0

これはAEMの非常に一般的な問題文です。それを処理するにはいくつかの方法がありますが、ビジネス上のニーズとデザインでどのようにマッピングするかによって異なります。私はこのために2つの解決策を提案できます: 1.あなたのアコーディオンコンポーネントにテンプレートレベルのデザイン制限を適用します。つまり、あなたはアコーデオンのコンポーネントを落としてから、ページのデザインモードに進み、アコーディオンパーセレクトのアコーディオンアイテムコンポーネントに行きます。これは1回のみのアクティビティです。

私はオプション#2をお勧めします: 2.アコーディオンのコンポーネントダイアログでは、マルチリストを使ってアコーディオンアイテムを追加するよう作者に依頼してください。 - 新しい項目を追加するには、accordionダイアログを開いてマルチリストに項目を追加し、accordion idを入力します。 - アイテムを削除するには、ダイアログを開いてマルチリストからアイテムを削除します - 位置を変更するには、マルチリストでアイテムを再配置します。 Accordionダイアログで著者が入力したマルチリストアイテムの数に基づいて、アコーディオンアイテムコンポーネントを静的に含め、作成者がマルチリストで入力したコンポーネントIDを与えます。

- アコーディオンのコンポーネントを簡単に制限することができます。 - サイドキック内の1つのコンポーネント(アコーディオンアイテム)を減らす - ページ上の1つのパーサーを減らす(多くのパーサーがオーサリングパフォーマンスを犠牲にする)

+0

取得後にコンポーネントをコンポーネントに追加する方法の詳細については、あなたのmultifieldからの値ですか? –

関連する問題