在AEM中使用Sling Resource Merger

用途

Sling Resource Merger提供存取和合併資源的服務。 它為兩者提供差異(差異)機制:

  • 使 用已設定的搜尋路徑 覆蓋資源

  • 使 用資源類型階層(透過屬性cq:dialog),覆寫啟用觸控的UI()的元件對話 sling:resourceSuperType框。

透過Sling Resource Merger,覆蓋/覆寫資源及/或屬性會與原始資源/屬性合併:

  • 自訂定義的內容具有比原始定義更高的優先順序(即​覆蓋​或​覆蓋)。

  • 如有必要,在自訂中定義屬性,指出如何使用與原始內容合併的內容。

注意

Sling Resource Merger和相關方法僅能與Granite搭配使用。 這也表示它僅適用於標準的觸控式使用者介面;尤其是,以此方式定義的覆蓋僅適用於元件的觸控式對話框。

其他區域的覆蓋/覆寫(包括可觸控元件或傳統UI的其他方面)包括將適當的節點和結構從原始節點複製到定義自訂的位置。

AEM的目標

在AEM中使用Sling Resource Merger的目標為:

  • 請確定未在/libs中進行自訂變更。

  • 減少從/libs複製的結構。

    使用Sling Resource Mergare時,不建議從/libs複製整個結構,因為這會導致自訂中保留太多資訊(通常為/apps)。 在以任何方式升級系統時,重複資訊會不必要地增加問題的可能性。

注意

覆蓋不依賴於搜索路徑,它們使用屬性sling:resourceSuperType建立連接。

不過,覆寫通常在/apps下定義,因為AEM的最佳實務是在/apps下定義自訂;這是因為您不得變更/libs下的任何項目。

注意

您​必須​不要變更/libs路徑中的任何項目。

這是因為下次升級實例時會覆寫/libs的內容(套用修補程式或功能套件時,很可能會覆寫)。

配置和其他更改的建議方法為:

  1. /apps下重新建立所需項目(如/libs中所存在)

  2. /apps中進行任何更改

屬性

資源合併提供以下屬性:

  • sling:hideProperties ( StringString[])

    指定要隱藏的屬性或屬性清單。

    萬用字元*會隱藏全部。

  • sling:hideResource ( Boolean)

    指出資源是否應完全隱藏,包括其子項。

  • sling:hideChildren ( StringString[])

    包含要隱藏的子節點或子節點清單。 節點的屬性將被保留。

    萬用字元*會隱藏全部。

  • sling:orderBefore ( String)

    包含當前節點應位於前面的同級節點的名稱。

這些屬性會影響覆蓋/覆寫(通常在/apps中)使用對應/原始資源/屬性(來自/libs)的方式。

建立結構

若要建立覆蓋或覆寫,您必須在目標(通常為/apps)下,以等同結構重新建立原始節點。 例如:

  • 覆蓋

    • Sites控制台的導覽項目定義,如邊欄中所示,定義於:

      /libs/cq/core/content/nav/sites/jcr:title

    • 若要覆蓋此節點,請建立下列節點:

      /apps/cq/core/content/nav/sites

      然後視需要更新屬性jcr:title

  • 覆寫

    • 「文本」(Texts)控制台的「啟用觸控」(touch-enabled)對話框的定義定義如下:

      /libs/foundation/components/text/cq:dialog

    • 要覆蓋此節點,請建立以下節點——例如:

      /apps/the-project/components/text/cq:dialog

要建立其中一種,只需重新建立骨架結構。 為了簡化結構的重建,所有中間節點都可以是nt:unstructured類型(它們不必反映原始節點類型;例如,在/libs中。

因此,在上述覆蓋範例中,需要下列節點:

/apps
  /cq
    /core
      /content
        /nav
          /sites
注意

使用Sling Resource Merger(即處理標準的觸控式UI)時,不建議從/libs複製整個結構,因為這會導致在/apps中保存太多資訊。 這在系統以任何方式升級時都可能造成問題。

使用案例

這些功能與標準功能搭配使用,可讓您:

  • 新增屬性

    屬性不存在於/libs定義中,但是在/apps覆蓋/覆蓋中是必需的。

    1. /apps中建立相應的節點
    2. 在此節點「」上建立新屬性
  • 重新定義屬性(非自動建立的屬性)

    屬性定義在/libs中,但在/apps覆蓋/覆寫中需要新值。

    1. /apps中建立相應的節點

    2. 在此節點上建立匹配屬性(在/ apps下)

      • 屬性會根據Sling Resource Resolver組態有優先順序。

      • 支援變更屬性類型。

        如果您使用與/libs中使用的屬性類型不同的屬性類型,則會使用您定義的屬性類型。

    注意

    支援變更屬性類型。

  • 重新定義自動建立的屬性

    依預設,自動建立的屬性(例如jcr:primaryType)不受覆蓋/覆寫的約束,以確保目前/libs下的節點類型受到尊重。 若要套用覆蓋/覆寫,您必須在/apps中重新建立節點,請明確隱藏屬性並重新定義它:

    1. 使用所需的jcr:primaryType/apps下建立相應節點

    2. 在該節點上建立屬性sling:hideProperties,其值設定為自動建立屬性的值;例如,jcr:primaryType

      此屬性(定義在/apps下)現在將優先於在/libs下定義的屬性

  • 重新定義節點及其子項

    節點及其子項在/libs中定義,但在/apps覆蓋/覆蓋中需要新配置。

    1. 結合下列動作:

      1. 隱藏節點的子項(保留節點的屬性)
      2. 重新定義屬性/屬性
  • 隱藏屬性

    屬性定義在/libs中,但在/apps覆蓋/覆寫中不是必要的。

    1. /apps中建立相應的節點

    2. 建立類型StringString[]sling:hideProperties屬性。 使用此選項可指定要隱藏/忽略的屬性。 也可使用萬用字元。 例如:

      • *
      • ["*"]
      • jcr:title
      • ["jcr:title", "jcr:description"]
  • 隱藏節點及其子項

    節點及其子項定義在/libs中,但在/apps覆蓋/覆蓋中不是必要項。

    1. 在/apps下建立對應的節點

    2. 建立屬性sling:hideResource

      • 類型: Boolean
      • 值: true
  • 隱藏節點的子代(同時保留節點的屬性)

    節點、其屬性及其子項在/libs中定義。 在/apps覆蓋/覆蓋中需要節點及其屬性,但在/apps覆蓋/覆蓋中不需要部分或全部子節點。

    1. /apps下建立相應節點

    2. 建立屬性sling:hideChildren:

      • 類型: String[]
      • 值:要隱藏/忽略的子節點清單(如/libs中定義)

      通配符*可用於隱藏/忽略所有子節點。

  • 重新排序節點

    節點及其同級在/libs中定義。 需要新位置,因此在/apps覆蓋/覆蓋中重新建立節點,其中新位置在參考/libs中的相應同級節點時定義。

    • 使用sling:orderBefore屬性:

      1. /apps下建立相應節點

      2. 建立屬性sling:orderBefore:

        這指定了當前節點應放在以下位置之前的節點(如/libs中):

        • 類型: String
        • 值: <before-SiblingName>

從您的程式碼叫用Sling Resource Merger

Sling Resource Merger包含兩個自訂資源提供者——一個用於覆蓋,另一個用於覆蓋。 您可以使用裝載點,在程式碼中叫用這些項目:

注意

訪問資源時,建議使用適當的裝載點。

這可確保呼叫Sling Resource Merger並傳回完全合併的資源(減少需要從/libs複製的結構)。

  • 覆蓋:

    • 目的:根據其搜索路徑合併資源

    • 裝載點:/mnt/overlay

    • 用法:mount point + relative path

    • 範例:

      • getResource('/mnt/overlay' + '<relative-path-to-resource>');
  • 覆寫:

    • 目的:根據超類型合併資源

    • 裝載點:/mnt/overide

    • 用法:mount point + absolute path

    • 範例:

      • getResource('/mnt/override' + '<absolute-path-to-resource>');

使用範例

其中包含一些範例:

本頁內容

Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now