⇐ Funktionsgrundlagen | Server-seitige Anpassung imetall |
---|---|
SCF-Handlebars Helpers imetall |
Um das Erscheinungsbild und/oder Verhalten einer AEM Communities-Komponente Client-seitig anzupassen, gibt es mehrere Ansätze.
Zwei Hauptansätze sind das Überlagern oder Erweitern einer Komponente.
🔗 Durch das Überlagern einer Komponente wird die Standardkomponente geändert und jeder Verweis auf die Komponente wird beeinflusst.
🔗 Die Erweiterung einer Komponente, die eindeutig benannt ist, schränkt den Umfang der Änderungen ein. Der Begriff "Erweiterung"wird synonym mit "Überschreibung"verwendet.
Das Überlagern einer Komponente ist eine Methode, Änderungen an einer Standardkomponente vorzunehmen und alle Instanzen zu betreffen, die den Standard verwenden.
Die Überlagerung wird erreicht, indem eine Kopie der Standardkomponente im Verzeichnis /apps geändert wird, anstatt die Originalkomponente im Verzeichnis /libs zu ändern. Die Komponente wird mit einem identischen relativen Pfad erstellt, mit der Ausnahme, dass "libs"durch "apps"ersetzt wird.
Das Verzeichnis /apps ist der erste Ort, der zum Auflösen von Anforderungen gesucht wird. Wenn es nicht gefunden wird, wird die Standardversion im Verzeichnis /libs verwendet.
Die Standardkomponente im Verzeichnis /libs darf nie geändert werden, da zukünftige Patches und Upgrades das Verzeichnis /libs auf jede erforderliche Weise ändern können, während öffentliche Schnittstellen beibehalten werden.
Dies unterscheidet sich von Erweitern einer Standardkomponente, bei der Änderungen für einen bestimmten Zweck vorgenommen werden sollen, wobei ein eindeutiger Pfad zur Komponente erstellt wird und auf der Referenzierung der ursprünglichen Standardkomponente im Verzeichnis /libs als Superressourcentyp zurückgegriffen wird.
Ein kurzes Beispiel für das Überlagern der Kommentarkomponente finden Sie im Tutorial Überlagerungskommentkomponente.
Das Erweitern (Überschreiben) einer Komponente ist eine Methode, um Änderungen für einen bestimmten Verwendungszweck vorzunehmen, ohne dass sich dies auf alle Instanzen auswirkt, die den Standard verwenden. Die erweiterte Komponente ist eindeutig im Ordner /apps benannt und verweist auf die Standardkomponente im Ordner /libs . Daher werden das Standarddesign und -verhalten einer Komponente nicht geändert.
Dies unterscheidet sich von Überlagern der Standardkomponente, bei der die Art von Sling relative Verweise auf den Ordner apps/ auflöst, bevor die Suche im Ordner libs/ stattfindet. Daher wird das Design oder Verhalten einer Komponente global geändert.
Ein kurzes Beispiel für die Erweiterung der Kommentarkomponente finden Sie im Tutorial Kommentar-Komponente erweitern .
Das HBS-Skript für die Komponente muss an die JavaScript-Objekte, -Modelle und -Ansichten gebunden sein, die diese Funktion implementieren.
Der Wert des Attributs data-scf-component
kann der Standardwert sein, z. B. social/tally/components/hbs/rating
, oder eine erweiterte (angepasste) Komponente für benutzerdefinierte Funktionen wie weretail/components/hbs/rating.
Um eine Komponente zu binden, muss das gesamte Komponentenskript in ein <div> -Element mit den folgenden Attributen eingeschlossen sein:
data-component-id
="{{id}}"
wird aus dem Kontext in die ID-Eigenschaft aufgelöst
data-scf-component
="<resourceType>
Beispiel: von /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>
Beim Erweitern oder Überlagern einer Komponente können Eigenschaften zu einem geänderten Dialogfeld hinzugefügt werden.
Auf alle Eigenschaften einer Komponente/Ressource kann über die Eigenschaftenschlüssel in der Handlebars-Vorlage zugegriffen werden:
{{properties.<property_name>}}
Das Anpassen von Komponenten an das allgemeine Thema der Website kann durch eine "Skinning"-Änderung von Farben, Schriftarten, Bildern, Schaltflächen, Links, Abständen und sogar Positionierung in einem bestimmten Umfang erreicht werden.
Skinning kann durch selektives Überschreiben der Framework-Stile oder durch Schreiben völlig neuer Stylesheets erreicht werden. Die SCF-Komponenten definieren Namespace-, modulare und semantische CSS-Klassen, die sich auf die verschiedenen Elemente auswirken, aus denen eine Komponente besteht.
So erstellen Sie eine Komponente:
Identifizieren Sie die Elemente, die Sie ändern möchten (z. B. Komponentenbereich, Symbolleistenschaltflächen, Nachrichtenschriftart usw.).
Identifizieren Sie die CSS-Klasse(n), die sich auf diese Elemente auswirkt.
Erstellen Sie eine Stylesheet-Datei (.css).
Schließen Sie das Stylesheet in einen Client-Bibliotheksordner (clientlibs) für Ihre Site ein und stellen Sie sicher, dass es aus Ihren Vorlagen und Seiten mit ui:includeClientLib enthalten ist.
Definieren Sie die CSS-Klassen und Regeln, die Sie in Ihrem Stylesheet (#2) identifiziert haben, neu und fügen Sie Stile hinzu.
Die benutzerdefinierten Stile überschreiben jetzt die standardmäßigen Framework-Stile und die Komponente wird mit der neuen Skin gerendert.
Jeder CSS-Klassenname, dem scf-js
vorangestellt ist, hat eine bestimmte Verwendung im JavaScript-Code. Diese Klassen wirken sich auf den Status einer Komponente aus (z. B. Umschalten von ausgeblendet auf sichtbar) und sollten weder überschrieben noch entfernt werden.
Auch wenn die scf-js
-Klassen keine Auswirkungen auf Stile haben, können die Klassennamen in Stylesheets mit dem Vorbehalt verwendet werden, dass es, da sie die Status von Elementen steuern, möglicherweise Nebenwirkungen geben kann.
Um eine JavaScript-Implementierung der Komponenten zu erweitern, müssen Sie:
(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);
Skript-Tags sind ein wesentlicher Bestandteil des clientseitigen Frameworks. Sie sind der Kleber, der dazu beiträgt, das auf der Serverseite erzeugte Markup mit den Modellen und Ansichten auf der Clientseite zu binden.
Skript-Tags in SCF-Skripten sollten beim Überlagern oder Überschreiben von Komponenten nicht entfernt werden. SCF-Skript-Tags, die automatisch zum Einfügen von JSON in HTML erstellt werden, werden mit dem Attribut data-scf-json=true
identifiziert.
Die Verwendung von Client-seitigen Bibliotheken (clientlibs) bietet eine Möglichkeit, JavaScript und CSS, die zum Rendern von Inhalten auf dem Client verwendet werden, zu organisieren und zu optimieren.
Die clientlibs für SCF folgen einem sehr spezifischen Benennungsmuster für zwei Varianten, die nur durch das Vorhandensein von "author"im Kategorienamen variieren:
Clientlib-Variante | Muster für Kategorieneigenschaft |
---|---|
complete clientlib | cq.social.hbs.<component name=""> |
author clientlib | cq.social.author.hbs.<component name=""> |
Die vollständigen clientlibs (ohne Autoreninstanz) enthalten Abhängigkeiten und sind für die Verwendung mit ui:includeClientLib praktisch.
Diese Versionen finden Sie unter:
/etc/clientlibs/social/hbs/<component name>
Beispiel:
/etc/clientlibs/social/hbs/forum
cq.social.hbs.forum
Im Community Components-Handbuch werden die vollständigen clientlibs aufgelistet, die für jede SCF-Komponente erforderlich sind.
Clientlibs für Communities-Komponenten beschreiben, wie Client-Bibliotheken zu einer Seite hinzugefügt werden.
Die clientlibs für die Autorenversion werden auf das für die Implementierung der Komponente erforderliche JavaScript-Minimum reduziert.
Diese Client-seitigen Bibliotheken sollten niemals direkt eingeschlossen werden, sondern stehen stattdessen zur Einbettung in andere Client-Bibliotheken zur Verfügung, die für eine Site handgefertigt sind.
Diese Versionen befinden sich im Ordner "SCF libs":
/libs/social/<feature>/components/hbs/<component name>/clientlibs
Beispiel:
/libs/social/forum/hbs/forum/clientlibs
cq.social.author.hbs.forum
Hinweis: Während Client-Bibliotheken vom Typ Autor nie andere Bibliotheken einbetten, führen sie ihre Abhängigkeiten auf. Wenn sie in andere Bibliotheken eingebettet sind, werden die Abhängigkeiten nicht automatisch abgerufen und müssen auch eingebettet werden.
Die erforderlichen Autoren-Client-Bibliotheken können identifiziert werden, indem "author"in die clientlibs eingefügt wird, die für jede SCF-Komponente im Community Components Guide aufgelistet sind.
Jede Site verwaltet Client-Bibliotheken anders. Verschiedene Faktoren sind:
⇐ Funktionsgrundlagen | Server-seitige Anpassung imetall |
---|---|
SCF-Handlebars Helpers imetall |