用戶端自訂

‹功能基本工具 伺服器端自訂‹
SCF Handlepers ‡

若要自訂用戶端上AEM Communities元件的外觀和/或行為,有數種方法。

兩種主要方式是覆蓋或延伸元件。

覆蓋 元件會變更預設元件,並影響元件的每個參照。

展元件(其名稱唯一)會限制變更範圍。術語「extend」與「override」可互換使用。

覆蓋

覆蓋元件是對預設元件進行修改並影響所有使用預設元件的實例的方法。

覆蓋是通過修改/apps​目錄中的預設元件副本而完成的,而不是修改/libs​目錄中的原始元件來完成的。 元件是使用相同的相對路徑建構的,但「libs」會取代為「apps」。

首先搜尋/apps目錄來解決請求,如果找不到,則會使用位於/libs目錄中的預設版本。

不得修改/libs目錄中的預設元件,因為以後的修補程式和升級可以在維護公共介面的同時,以任何必要的方式自由更改/libs目錄。

這與extending的預設元件不同,該預設元件是希望對特定用途進行修改,建立到該元件的唯一路徑,並依賴在/libs目錄中引用原始預設元件作為超級資源類型。

如需覆蓋注釋元件的快速範例,請試用覆蓋注釋元件教學課程

副檔名

擴充(覆寫)元件是一種修改特定用途的方法,不會影響使用預設值的所有例項。 擴充元件在/apps資料夾中具有唯一名稱,且會參照/libs資料夾中的預設元件,因此不會修改元件的預設設計和行為。

這與overlaying預設元件不同,其中Sling的性質會先解析apps/資料夾的相對參照,再在libs/資料夾中搜尋,如此元件的設計或行為就會全域修改。

有關擴展注釋元件的快速示例,請試用擴展注釋元件教程

Javascript系結

元件的HBS指令碼必須系結至實作此功能的JavaScript物件、模型和檢視。

data-scf-component屬性的值可以是預設值,例如​social/tally/components/hbs/rating,或是用於自訂功能的擴充(自訂)元件,例如​weretail/components/hbs/rating

要綁定元件,必須將整個元件指令碼包含在<div>元素中,並包含以下屬性:

  • data-component-id="{{id}}"

    從內容解析至id屬性

  • data-scf-component="<resourcetype>

例如,從/apps/weretail/components/hbs/rating/rating.hbs:

<div class="we-Rating" data-component-id="{{id}}" data-scf-component="weretail/components/hbs/rating">

     <!-- HTML with HBS accessing the rating component -->

</div>

自訂屬性

延伸或覆蓋元件時,可將屬性新增至已修改的對話方塊。

通過引用車把模板中的屬性鍵,可以訪問元件/資源上設定的所有屬性:

{{properties.<property_name>}}

設定CSS外觀

自訂元件以符合網站的整體主題,可透過「外觀設定」來達成——在一定程度上變更顏色、字型、影像、按鈕、連結、間距甚至定位。

您可以選擇性覆寫架構樣式,或撰寫全新的樣式表,來設定外觀。 SCF元件定義了命名空間、模組化和語義CSS類,這些類會影響組成元件的各種元素。

設定元件外觀:

  1. 識別您要變更的元素(例如,編譯器區域、工具列按鈕、訊息字型等)。

  2. 識別影響這些元素的CSS類別/規則。

  3. 建立樣式表檔案(.css)。

  4. 將樣式表包含在您網站的用戶端程式庫資料夾(clientlibs)中,並確保它包含在範本和具有ui:includeClientLib的頁面中。

  5. 重新定義您在樣式表中識別(#2)的CSS類別和規則,並新增樣式。

自訂樣式現在會覆寫預設的架構樣式,而元件會以新的外觀呈現。

注意

前置​scf-js-&ast;​的任何CSS類別名稱在javascript程式碼中都有特定用途。 這些類會影響元件的狀態(例如,從隱藏切換為可見),且不應覆蓋或移除。

而scf-js-&ast;類不影響樣式,類名可以在樣式表中使用,但須注意,由於它們控制了元素的狀態,可能會有副作用。

擴充Javascript

若要擴充元件Javascript實作,您只需

  1. 為應用程式建立元件,並將jcr:resourceSuperType設為延伸元件的jcr:resourceType值,例如social/forum/components/hbs/forum
  2. 檢查預設SCF元件的Javascript以確定哪些方法需要使用SCF.registerComponent()進行註冊
  3. 複製延伸元件的Javascript或從頭開始
  4. 擴充方法
  5. 使用SCF.registerComponent()註冊所有具有預設值或自定義對象和視圖的方法。

forum.js:論壇的擴展示例- HBS

(function($CQ, _, Backbone, SCF) {
    "use strict";
    var GMForumView = SCF.ForumView.extend({
        viewName: "GMForum",
        showComposer: function(e) {
            SCF.ForumView.prototype.toggleComposer.apply(this);
            var cancel = this.$el.find('.cancel-new-topic');
            cancel.toggle();
        },
        hideComposer: function(e) {
            SCF.ForumView.prototype.toggleComposer.apply(this);
            var cancel = this.$el.find('.cancel-new-topic');
            cancel.toggle();
        }
    });

    SCF.registerComponent('social/forum/components/hbs/post', SCF.Post, SCF.PostView);
    SCF.registerComponent('social/forum/components/hbs/topic', SCF.Topic, SCF.TopicView);
    SCF.registerComponent('social/forum/components/hbs/forum', SCF.Forum, GMForumView );
})($CQ, _, Backbone, SCF);

指令碼標籤

指令碼標籤是用戶端架構的固有部分。 它們可協助將伺服器端產生的標籤與用戶端的模型和檢視系結在一起。

在覆蓋或覆蓋元件時,不應刪除SCF指令碼中的指令碼標籤。 自動為在HTML中注入JSON而建立的SCF指令碼標籤會以屬性data-scf-json=true來識別。

SCF的Clientlibs

使用用戶端程式庫(clientlibs),可組織並最佳化用於在用戶端上呈現內容的Javascript和CSS。

SCF的clientlibs遵循兩個變體的非常特定命名模式,只有在類別名稱中出現'author'時不同:

Clientlib變體 類別的模式屬性
完整的clientlib cq.social.hbs.<component name="">
author clientlib cq.social.author.hbs.<component name="">

完成Clientlibs

完整(非作者)的clientlibs包含相依性,並方便與ui:includeClientLib一起加入。

這些版本位於:

  • /etc/clientlibs/social/hbs/<component name>

例如:

  • 客戶端資料夾節點:/etc/clientlibs/social/hbs/forum
  • 類別屬性:cq.social.hbs.forum

社區元件指南列出了每個SCF元件所需的完整客戶端。

Clientlibs for Communities Components說明如何將clientlibs新增至頁面。

作者Clientlibs

作者版本clientlib會清除至實作元件所需的最小Javascript。

這些clientlib永遠不應直接包含在內,但可嵌入為網站手工製作的其他clientlib。

這些版本位於SCF libs資料夾中:

  • /libs/social/<feature>/components/<component name>/clientlibs

例如:

  • 客戶端資料夾節點:/libs/social/forum/hbs/forum/clientlibs
  • 類別屬性:cq.social.author.hbs.forum

注意:雖然作者clientlibs從不嵌入其他程式庫,但是他們確實會列出其相依性。 嵌入到其他庫時,不會自動提取從屬關係,也必須嵌入。

通過在社區元件指南中為每個SCF元件列出的clientlibs中插入"author",可以標識所需的作者clientlibs。

使用注意事項

每個網站在管理用戶端程式庫的方式上都不同。 各種因素包括:

  • 整體速度:可能是希望網站能夠回應,但是第一個頁面載入速度稍微慢一點,是可以接受的。 如果許多頁面使用相同的Javascript,則可將各種Javascript內嵌至一個clientlib,並從第一頁參考以載入。 此次下載中的Javascript會維持快取狀態,將後續頁面的資料下載量減至最少。
  • 第一頁的簡短時間:可能是希望第一頁能快速載入。 在這種情況下,Javascript位於多個小檔案中,只有在需要時才會參考。
  • 第一頁載入與後續下載之間的平衡。
‹功能基本工具 伺服器端自訂‹
SCF Handlepers ‡

本頁內容

Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
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