AEM 6.2でページプロパティを継承するにはどうすればよいですか?

ハイホアン

AEM 6.2プロジェクトでは、1つのページでナビゲーションを構成する必要があるシナリオ(このホームページと呼びます)に遭遇しました。他のすべてのページでは、ホームナビゲーション構成を使用するか、独自のナビゲーション構成値を使用できます。

クローンページはリンクされたプロパティをいつでもキャンセルして独自の値を使用できるため、ライブコピーを使用することにしました。しかし、このアプローチには2つの問題があります。

  1. ナビゲーションはすべてのページで使用され、Webでは約5つ以上のテンプレートが使用されるため、ユーザーはjcr:content / sling:resourceTypeおよびjcr:content / cq:テンプレートを編集してクローンページのテンプレートを設定する必要があります。
  2. ライブコピーでは許可されていないクローンページはソースページの子です。しかし、私はこのようなウェブ構造を作る必要がありました:

    Home
       |_ Page 1
                |_ Page 1.1
       |_ Page 2
       |_ Page 3
    

ライブコピーはこの状況には適していない可能性があります。HTLを使用するように変更します${inheritedPageProperties}。これにより、テンプレートと構造の問題が解決されますが、2つの新しい問題が発生します。

  1. 子ページのプロパティ設定ダイアログの継承されたプロパティは空白になります(設定されておらず、経由で呼び出されないため${inheritedPageProperties}

  2. ユーザーが「ページ1」ページでプロパティを変更すると、「ページ1.1」(およびページ1.1.1など)はこれらの値を使用します(${inheritedPageProperties}値を取得するために上位ノードを検索するため)。

私たちのクライアントが望んでいるのは:

  • すべてのページは、ホームページまたは自分のページからのみナビゲーション設定を使用できます(デフォルトではホームページを使用します)。
  • ホームページのプロパティを使用する場合、これらの値は構成ダイアログに表示する必要があります。
  • CRXDELiteの構成テンプレートは避けてください
  • Webサイトは親子構造である必要があります

これらの要件をどのように達成できますか?

アーメド・ムサラム

これは、単純なSlingモデルとSlingのCompositeValueMapを使用して実現できます。

CompositeValueMapドキュメントの状態:

2つのValueMapに基づくValueMapの実装:-1つはプロパティを含み、もう1つはプロパティマップに値が含まれていない場合に使用するデフォルトを含みます。複数のリソースでプロパティが重複しないようにする場合は、CompositeValueMapを使用して、プロパティの連結マップを取得できます。

これを使用するには、子孫の値マップ(現在のページ)を指定してから、正しい祖先を見つけ、そのプロパティの値マップをデフォルトとして指定します。

この質問の目的のために、私は常にルートから2番目の子孫が常に祖先であると仮定します(あなたはあなたの要件に従ってあなたの祖先を見つけることができます)

package com.sample.helpers;
import com.day.cq.wcm.api.Page;
import com.day.cq.wcm.api.PageManager;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.api.wrappers.CompositeValueMap;
import org.apache.sling.models.annotations.Model;
import org.apache.sling.models.annotations.injectorspecific.OSGiService;
import org.apache.sling.models.annotations.injectorspecific.Self;

import javax.annotation.PostConstruct;

@Model(adaptables = Resource.class)
public class CustomInheritedPageProperties
{

    ValueMap inheritedProperties;

    @Self
    Resource currentResource;

    @OSGiService
    PageManager pageManager;

    @PostConstruct
    protected void init() {
        // get the current page, or the "descendant"
        Page descendant = pageManager.getContainingPage(currentResource);

        /* You have to add your custom logic to get the ancestor page.
         * for this question's purposes, I'm always assuming it's the 3rd decendant of root
         * more here: https://helpx.adobe.com/experience-manager/6-2/sites/developing/using/reference-materials/javadoc/com/day/cq/wcm/api/Page.html#getParent(int)
         */
        Page ancestor = descendant.getParent(2);

        // create a CompositeValueMap where the properties are descendant's and the defaults are ancestor's
        inheritedProperties = new CompositeValueMap(descendant.getProperties(), ancestor.getProperties());
    }

    public ValueMap getInheritedProperties()
    {
        return inheritedProperties;
    }
}

これで、これを次のように使用できます

<sly data-sly-use.propHelper="com.sample.helpers.CustomInheritedPageProperties">>/sly>
<!--/* someProp here refers to the property you wish to get (inherited, of course)*/-->
<h1>propHelper.inheritedProperties.someProp</h1>

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

AEM6.5およびECMAScript 6 / javascript 6で縮小化の問題を解決するにはどうすればよいですか?

分類Dev

AEM Granite UIパスブラウザに表示されるページをフィルタリングするにはどうすればよいですか?

分類Dev

プロジェクトでES6クラスの継承関係を確認するにはどうすればよいですか?

分類Dev

VB6で「CanRaiseEvent」プロパティを実装するにはどうすればよいですか?

分類Dev

Sightly(AEM6)からparsysにemptyTextを設定する

分類Dev

perl6プロジェクトに外部のサードパーティの依存関係を追加するにはどうすればよいですか?

分類Dev

AEM 6ワークフローパージはいつ実行されますか?

分類Dev

AEM 6.x:HTL変数をclientlib / JSに渡す方法は?

分類Dev

Umbraco 6.Xで継承されたメンバータイプを作成するにはどうすればよいですか?

分類Dev

Automapper 6でソースよりも少ないプロパティで宛先にマップするにはどうすればよいですか?

分類Dev

AEM 6.0で自分のサイトをプレビューするにはどうすればよいですか?

分類Dev

AEM6でのSSL構成の問題

分類Dev

aem-6-2-replication-issue-for-node-taining-invalid-jcr-names

分類Dev

Angular 6+で補間を使用してjson文字列のプロパティを表示するにはどうすればよいですか?

分類Dev

Angular 6のコンポーネント間でロジックを共有するときに、継承の代わりに構成を使用するにはどうすればよいですか?

分類Dev

角度6のmat-list-itemでdisabledプロパティを使用するにはどうすればよいですか?

分類Dev

Entity Framework 6で文字列プロパティのデフォルトの最大長を変更するにはどうすればよいですか?

分類Dev

LINQ Where句内でEF6コレクションプロパティをクエリするにはどうすればよいですか?

分類Dev

Ubuntuのインストール中に「SCSI2(0,0,0)(sda)のパーティション#6でのスワップスペースの作成に失敗しました」を修正するにはどうすればよいですか?

分類Dev

AEM6(CQ)は、テンプレートを介して変数をJavaScriptに視覚的に渡します

分類Dev

ES6クラスのプロパティにデフォルト値を提供するにはどうすればよいですか?

分類Dev

複数のプロパティをAngular6の配列にマッピングするにはどうすればよいですか?

分類Dev

R6を使用して、スーパークラスから継承するクラスとオブジェクトを見つけるにはどうすればよいですか?

分類Dev

サードパーティのフレームワークをXcode6にインポートする–プロジェクトに保存するにはどうすればよいですか?

分類Dev

Angular6アプリをHTMLページに埋め込むにはどうすればよいですか

分類Dev

Xcode 6で空のプロジェクトを作成するにはどうすればよいですか?

分類Dev

AEM6のページでJSTLコンポーネントとSightlyコンポーネントを組み合わせることができますか?

分類Dev

角度6の2つのパラメーターを持つオブジェクトをプッシュするにはどうすればよいですか?

分類Dev

AEM6のHTL / Sightlyで変更されたコンテンツ

Related 関連記事

  1. 1

    AEM6.5およびECMAScript 6 / javascript 6で縮小化の問題を解決するにはどうすればよいですか?

  2. 2

    AEM Granite UIパスブラウザに表示されるページをフィルタリングするにはどうすればよいですか?

  3. 3

    プロジェクトでES6クラスの継承関係を確認するにはどうすればよいですか?

  4. 4

    VB6で「CanRaiseEvent」プロパティを実装するにはどうすればよいですか?

  5. 5

    Sightly(AEM6)からparsysにemptyTextを設定する

  6. 6

    perl6プロジェクトに外部のサードパーティの依存関係を追加するにはどうすればよいですか?

  7. 7

    AEM 6ワークフローパージはいつ実行されますか?

  8. 8

    AEM 6.x:HTL変数をclientlib / JSに渡す方法は?

  9. 9

    Umbraco 6.Xで継承されたメンバータイプを作成するにはどうすればよいですか?

  10. 10

    Automapper 6でソースよりも少ないプロパティで宛先にマップするにはどうすればよいですか?

  11. 11

    AEM 6.0で自分のサイトをプレビューするにはどうすればよいですか?

  12. 12

    AEM6でのSSL構成の問題

  13. 13

    aem-6-2-replication-issue-for-node-taining-invalid-jcr-names

  14. 14

    Angular 6+で補間を使用してjson文字列のプロパティを表示するにはどうすればよいですか?

  15. 15

    Angular 6のコンポーネント間でロジックを共有するときに、継承の代わりに構成を使用するにはどうすればよいですか?

  16. 16

    角度6のmat-list-itemでdisabledプロパティを使用するにはどうすればよいですか?

  17. 17

    Entity Framework 6で文字列プロパティのデフォルトの最大長を変更するにはどうすればよいですか?

  18. 18

    LINQ Where句内でEF6コレクションプロパティをクエリするにはどうすればよいですか?

  19. 19

    Ubuntuのインストール中に「SCSI2(0,0,0)(sda)のパーティション#6でのスワップスペースの作成に失敗しました」を修正するにはどうすればよいですか?

  20. 20

    AEM6(CQ)は、テンプレートを介して変数をJavaScriptに視覚的に渡します

  21. 21

    ES6クラスのプロパティにデフォルト値を提供するにはどうすればよいですか?

  22. 22

    複数のプロパティをAngular6の配列にマッピングするにはどうすればよいですか?

  23. 23

    R6を使用して、スーパークラスから継承するクラスとオブジェクトを見つけるにはどうすればよいですか?

  24. 24

    サードパーティのフレームワークをXcode6にインポートする–プロジェクトに保存するにはどうすればよいですか?

  25. 25

    Angular6アプリをHTMLページに埋め込むにはどうすればよいですか

  26. 26

    Xcode 6で空のプロジェクトを作成するにはどうすればよいですか?

  27. 27

    AEM6のページでJSTLコンポーネントとSightlyコンポーネントを組み合わせることができますか?

  28. 28

    角度6の2つのパラメーターを持つオブジェクトをプッシュするにはどうすればよいですか?

  29. 29

    AEM6のHTL / Sightlyで変更されたコンテンツ

ホットタグ

アーカイブ