Stile für AEM CIF-Kernkomponenten festlegen style-aem-cif-core-components
Das CIF VeniaProjekt ist eine Referenz-Code-Basis für die Verwendung von CIF-Kernkomponenten. In diesem Tutorial sehen Sie sich das Venia-Referenzprojekt an und erfahren, wie CSS und JavaScript, die von AEM CIF-Kernkomponenten verwendet werden, organisiert sind. Außerdem erstellen Sie mithilfe von CSS einen Stil, um den Standardstil der Komponente Produkt-Teaser zu aktualisieren.
Was Sie erstellen werden what-you-will-build
In diesem Tutorial wird ein neuer Stil für die Produkt-Teaser-Komponente implementiert, der einer Karte ähnlich ist. Das im Tutorial erworbene Wissen kann auf andere CIF-Kernkomponenten angewendet werden.
Voraussetzungen prerequisites
Zum Absolvieren dieses Tutorials ist eine lokale Entwicklungsumgebung erforderlich. Diese Umgebung umfasst eine laufende Instanz von AEM, die konfiguriert und mit einer Adobe Commerce-Instanz verbunden ist. Überprüfen Sie die Anforderungen und Schritte zum Einrichten einer lokalen Entwicklungsumgebung mit AEM as a Cloud Service SDK.
Klonen des Venia-Projekts clone-venia-project
Sie klonen das Venia-Projekt überschreiben dann die Standardstile.
-
Führen Sie den folgenden Git-Befehl aus, damit Sie das Projekt klonen können:
code language-shell $ git clone git@github.com:adobe/aem-cif-guides-venia.git -
Erstellen Sie das Projekt und stellen Sie es in einer lokalen Instanz von AEM bereit:
code language-shell $ cd aem-cif-guides-venia/ $ mvn clean install -PautoInstallPackage,cloud -
Fügen Sie die erforderlichen OSGi-Konfigurationen hinzu, um so Ihre AEM-Instanz mit einer Adobe Commerce-Instanz zu verbinden, oder fügen Sie die Konfigurationen zum erstellten Projekt hinzu.
-
An diesem Punkt sollten Sie über eine funktionierende Version einer Storefront verfügen, die mit einer Adobe Commerce-Instanz verbunden ist. Navigieren Sie zur Seite
US>Homeunter: http://localhost:4502/editor.html/content/venia/us/en.html.Sie sollten sehen, dass die Storefront derzeit im Venia-Design erscheint. Wenn Sie das Hauptmenü der Storefront erweitern, sollten verschiedene Kategorien angezeigt werden, was darauf hinweist, dass die Verbindung mit Adobe Commerce funktioniert.
Client-Bibliotheken und ui.frontend-Modul introduction-to-client-libraries
Die CSS- und JavaScript-Dateien, die für das Rendern der Designs/Stile der Storefront verantwortlich sind, werden in AEM von einer Client-Bibliothek (kurz „clientlibs“) verwaltet. Client-Bibliotheken bieten ein Verfahren zum Organisieren von CSS- und JavaScript-Dateien im Code eines Projekts und zum anschließenden Bereitstellen auf der Seite.
Markenspezifische Stile können auf AEM CIF-Kernkomponenten angewendet werden, indem das von diesen Client-Bibliotheken verwaltete CSS hinzugefügt und überschrieben wird. Kenntnisse dazu, wie Client-Bibliotheken strukturiert sind und auf der Seite eingeschlossen werden, sind von entscheidender Bedeutung.
Das ui.frontend ist ein dediziertes webpack-Projekt für die Verwaltung aller Frontend-Assets eines Projekts. Mit diesem webppack können Frontend-Entwicklerinnen und -Entwickler eine beliebige Zahl von Sprachen und Technologien wie TypeScript, Sass und vieles mehr nutzen.
Das ui.frontend-Modul ist ebenfalls ein Maven-Modul und mit dem größeren Projekt durch Einsatz eines NPM-Moduls (dem aem-clientlib-generator) integriert. Während eines Builds kopiert der aem-clientlib-generator die kompilierten CSS- und JavaScript-Dateien im ui.apps-Modul in eine Client-Bibliothek.
Kompilierte CSS- und JavaScript-Dateien werden bei einem Maven-Build aus dem ui.frontend-Modul als Client-Bibliothek in das ui.apps-Modul kopiert.
Teaser-Stil aktualisieren ui-frontend-module
Nehmen Sie als Nächstes eine kleine Änderung am Teaser-Stil vor, um zu sehen, wie das ui.frontend-Modul und die Client-Bibliotheken funktionieren. Verwenden Sie eine IDE Ihrer Wahl, um das Venia-Projekt zu importieren. Screenshots stammen von der Visual Studio Code-IDE.
-
Navigieren Sie zum Modul ui.frontend und erweitern Sie es. Erweitern Sie dann die Ordnerhierarchie zu:
ui.frontend/src/main/styles/commerce:
Beachten Sie, dass sich unter dem Ordner mehrere Sass-Dateien (
.scss) befinden. Diese Dateien sind Commerce-spezifische Stile für die einzelnen Commerce-Komponenten. -
Öffnen Sie die Datei
_productteaser.scss. -
Aktualisieren Sie die
.item__image-Regel und ändern Sie die Rahmenregel:code language-scss .item__image { border: #ea00ff 8px solid; /* <-- modify this rule */ display: block; grid-area: main; height: auto; opacity: 1; transition-duration: 512ms; transition-property: opacity, visibility; transition-timing-function: ease-out; visibility: visible; width: 100%; }Mit der obigen Regel sollte der Produkt-Teaser-Komponente ein dicker rosa Rahmen hinzugefügt werden.
-
Öffnen Sie ein neues Terminal-Fenster und navigieren Sie zum Ordner
ui.frontend:code language-shell $ cd <project-location>/aem-cif-guides-venia/ui.frontend -
Führen Sie folgenden Maven-Befehl aus:
code language-shell $ mvn clean install ... [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 29.497 s [INFO] Finished at: 2020-08-25T14:30:44-07:00 [INFO] ------------------------------------------------------------------------Prüfen Sie die Terminal-Ausgabe. Beachten Sie, dass der Maven-Befehl mehrere NPM-Skripte ausgeführt hat, darunter
npm run build. Dernpm run build-Befehl wird in derpackage.json-Datei definiert und kompiliert das webpack-Projekt und die Trigger der Client-Bibliothekserstellung. -
Prüfen Sie die Datei
ui.frontend/dist/clientlib-site/site.css:
Die Datei ist die kompilierte und minimierte Version aller Sass-Dateien in dem Projekt.
note note NOTE Dateien wie diese werden von der Quell-Code-Verwaltung ignoriert, da sie während der Build-Zeit erstellt werden sollten. -
Prüfen Sie die Datei
ui.frontend/clientlib.config.js.code language-js /* clientlib.config.js*/ ... // Config for `aem-clientlib-generator` module.exports = { context: BUILD_DIR, clientLibRoot: CLIENTLIB_DIR, libs: [ { ...libsBaseConfig, name: 'clientlib-site', categories: ['venia.site'], dependencies: ['venia.dependencies', 'aem-core-cif-react-components'], assets: { ...Dies ist die Konfigurationsdatei für aem-clientlib-generator und bestimmt, wo und wie die kompilierten CSS- und JavaScript-Dateien in eine AEM-Client-Bibliothek umgewandelt werden.
-
Überprüfen Sie im
ui.apps-Modul die Datei:ui.apps/src/main/content/jcr_root/apps/venia/clientlibs/clientlib-site/css/site.css:
Bei dieser Datei handelt es sich um
site.css, die in dasui.apps-Projekt kopiert ist. Sie ist jetzt Teil einer Client-Bibliothek namensclientlib-sitemit der Kategorievenia.site. Sobald die Datei Teil desui.apps-Moduls ist, kann sie in AEM bereitgestellt werden.note note NOTE Dateien wie diese werden von der Quell-Code-Verwaltung ebenfalls ignoriert, da sie zur Build-Zeit erstellt werden sollten. -
Überprüfen Sie anschließend die anderen vom Projekt erstellten Client-Bibliotheken:
Diese Client-Bibliotheken werden nicht vom
ui.frontend-Modul verwaltet. Stattdessen enthalten sie CSS- und JavaScript-Abhängigkeiten, die von Adobe bereitgestellt werden. Die Definitionen für diese Client-Bibliotheken befinden sich in der.content.xml-Datei unter dem jeweiligen Ordner.clientlib-base - Eine leere Client-Bibliothek, die einfach die erforderlichen Abhängigkeiten von AEM-Kernkomponenten einbettet. Die Kategorie ist
venia.base.clientlib-cif - Eine leere Client-Bibliothek, die einfach die erforderlichen Abhängigkeiten von AEM CIF-Kernkomponenten einbettet. Die Kategorie ist
venia.cif.clientlib-grid: Umfasst die CSS, die zur Aktivierung der Funktion „Responsives Raster“ von AEM erforderlich ist. Durch Verwendung des AEM-Rasters wird der Layout-Modus im AEM-Editor aktiviert und Inhaltsautorinnen und -autoren erhalten die Möglichkeit, die Größe von Komponenten zu ändern. Die Kategorie lautet
venia.gridund ist in dervenia.base-Bibliothek eingebettet. -
Überprüfen Sie die Dateien
customheaderlibs.htmlundcustomfooterlibs.htmlunterui.apps/src/main/content/jcr_root/apps/venia/components/page:
Diese Skripte enthalten die Bibliotheken venia.base und venia.cif als Bestandteil aller Seiten.
note note NOTE Nur die Basisbibliotheken sind als Teil der Seitenskripte „hartkodiert“. venia.siteist nicht in diesen Dateien enthalten, sondern für mehr Flexibilität Bestandteil der Seitenvorlage. Dieser Prozess wird später überprüft. -
Erstellen Sie das gesamte Projekt aus dem Terminal und stellen Sie es in einer lokalen Instanz von AEM bereit:
code language-shell $ cd aem-cif-guides-venia/ $ mvn clean install -PautoInstallPackage,cloud
Produkt-Teaser erstellen author-product-teaser
Nachdem die Code-Aktualisierungen bereitgestellt wurden, fügen Sie mit den AEM-Authoring-Tools der Startseite der Site eine Instanz der Produkt-Teaser-Komponente hinzu. Auf diese Weise können wir die aktualisierten Stile anzeigen.
-
Öffnen Sie eine neue Browser-Registerkarte und navigieren Sie zur Startseite der Website: http://localhost:4502/editor.html/content/venia/us/en.html.
-
Erweitern Sie die Asset-Suche (die Seitenleiste) im Modus Bearbeitung. Wechseln Sie im Asset-Filter zu Produkte.
-
Ziehen Sie ein neues Produkt auf die Startseite im Haupt-Layout-Container:
Sie sollten sehen, dass der Produkt-Teaser nun einen rosa Rahmen hat, der auf der zuvor erstellten CSS-Regeländerung basiert.
Client-Bibliotheken auf der Seite überprüfen verify-client-libraries
Überprüfen Sie dann, ob die Client-Bibliotheken auf der Seite enthalten sind.
-
Navigieren Sie zur Startseite der Website: http://localhost:4502/editor.html/content/venia/us/en.html.
-
Wählen Sie das Menü Seiteninformationen und klicken Sie auf Als veröffentlicht anzeigen:
Die Seite wird geöffnet, ohne dass das AEM-Author-JavaScript geladen wird (so, wie die Seite auf der veröffentlichten Site angezeigt würde). Beachten Sie, dass an die URL der Abfrageparameter
?wcmmode=disabledangehängt ist. Bei der Entwicklung von CSS und JavaScript ist es eine gute Idee, diesen Parameter zur Vereinfachung der Seite zu verwenden (ohne Elemente von AEM Author). -
Wenn Sie die Seitenquelle anzeigen, sollten Sie in der Lage sein, mehrere enthaltene Client-Bibliotheken zu identifizieren:
code language-html <!DOCTYPE html> <html lang="en-US"> <head> ... <link rel="stylesheet" href="/etc.clientlibs/venia/clientlibs/clientlib-base.min.css" type="text/css"> <link rel="stylesheet" href="/etc.clientlibs/venia/clientlibs/clientlib-site.min.css" type="text/css"> </head> ... <script type="text/javascript" src="/etc.clientlibs/venia/clientlibs/clientlib-site.min.js"></script> <script type="text/javascript" src="/etc.clientlibs/core/wcm/components/commons/site/clientlibs/container.min.js"></script> <script type="text/javascript" src="/etc.clientlibs/venia/clientlibs/clientlib-base.min.js"></script> <script type="text/javascript" src="/etc.clientlibs/core/cif/clientlibs/common.min.js"></script> <script type="text/javascript" src="/etc.clientlibs/venia/clientlibs/clientlib-cif.min.js"></script> </body> </html>Client-Bibliotheken, die auf der Seite bereitgestellt werden, sind mit dem Präfix
/etc.clientlibsversehen und werden über einen Proxy bereitgestellt, um zu verhindern, dass in/appsoder/libsvertrauliche Daten angezeigt werden.Achten Sie auf
venia/clientlibs/clientlib-site.min.cssundvenia/clientlibs/clientlib-site.min.js. Diese Dateien sind die kompilierten CSS- und JavaScript-Dateien, die vomui.frontend-Modul abgeleitet wurden.
Einschließen von Client-Bibliotheken mit Seitenvorlagen client-library-inclusion-pagetemplates
Es gibt mehrere Optionen zum Einschließen einer Client-seitigen Bibliothek. Überprüfen Sie als Nächstes, wie das generierte Projekt die clientlib-site Bibliotheken über Seitenvorlagen.
-
Navigieren Sie zur Startseite der Site im AEM-Editor: http://localhost:4502/editor.html/content/venia/us/en.html.
-
Wählen Sie das Menü Seiteninformationen und klicken Sie auf Vorlage bearbeiten:
Die Landingpage-Vorlage, auf der die Startseite basiert, wird geöffnet.
note note NOTE Um alle verfügbaren Vorlagen aus dem AEM-Startbildschirm anzuzeigen, navigieren Sie zu Tools > Allgemein > Vorlagen. -
Wählen Sie in der oberen linken Ecke das Symbol Seiteninformationen und klicken Sie auf Seitenrichtlinie.
-
Die Seitenrichtlinie für die Landingpage-Vorlage wird geöffnet:
Auf der rechten Seite sehen Sie eine Liste mit Kategorien von Client-Bibliotheken, die auf allen Seiten, die diese Vorlage nutzen, enthalten sind.
venia.dependencies: Stellt beliebige Anbieterbibliotheken bereit, auf dievenia.siteangewiesen ist.venia.site: Die Kategorie fürclientlib-site, die dasui.frontend-Modul generiert.
Beachten Sie, dass andere Vorlagen die gleiche Richtlinie verwenden: Inhaltsseite, Landingpage usw. Durch die Wiederverwendung derselben Richtlinie wird sichergestellt, dass auf allen Seiten dieselben Client-Bibliotheken enthalten sind.
Der Vorteil einer Nutzung von Vorlagen und Seitenrichtlinien zur Verwaltung des Einschließens von Client-Bibliotheken besteht darin, dass Sie die Richtlinie je nach Vorlage ändern können. Möglicherweise verwalten Sie zwei verschiedene Marken innerhalb derselben AEM-Instanz. Jede Marke weist ihren eigenen Stil oder ihr eigenes Design auf, doch die Basisbibliotheken und der Code sind identisch. Ein weiteres Beispiel: Wenn Sie über eine größere Client-Bibliothek verfügen, die Sie nur auf bestimmten Seiten anzeigen möchten, können Sie eine Einzelseitenrichtlinie nur für diese Vorlage erstellen.
Lokale Webpack-Entwicklung local-webpack-development
In der vorherigen Übung wurde an einer Sass-Datei im ui.frontend-Modul eine Aktualisierung vorgenommen. Nach dem Erstellen eines Maven-Builds werden die Änderungen dann in AEM bereitgestellt. Als Nächstes sehen Sie sich die Verwendung eines webpack-dev-Servers an, um die Frontend-Stile schnell zu entwickeln.
Der webpack-Dev-Server dient als Proxy für Bilder und einige der CSS/JavaScript-Dateien aus der lokalen Instanz von AEM, erlaubt es dem Entwickler jedoch, die Stile und JavaScript im ui.frontend-Modul zu ändern.
-
Navigieren Sie im Browser zur Seite Startseite und Als veröffentlicht anzeigen: http://localhost:4502/content/venia/us/en.html?wcmmode=disabled.
-
Zeigen Sie den Quell-Code der Seite an und kopieren Sie den rohen HTML-Code der Seite.
-
Kehren Sie zur IDE Ihrer Wahl zurück und öffnen Sie unter dem
ui.frontend-Modul die folgende Datei:ui.frontend/src/main/static/index.html.
-
Überschreiben Sie den Inhalt von
index.htmlund fügen Sie den im vorherigen Schritt kopierten HTML-Code ein. -
Suchen Sie nach den Einbeziehungen für
clientlib-site.min.csssowieclientlib-site.min.jsund entfernen Sie diese.code language-html <head> <!-- remove this link --> <link rel="stylesheet" href="/etc.clientlibs/venia/clientlibs/clientlib-base.min.css" type="text/css"> ... </head> <body> ... <!-- remove this link --> <script type="text/javascript" src="/etc.clientlibs/venia/clientlibs/clientlib-site.min.js"></script> </body>Diese Einbeziehungen werden entfernt, da sie die kompilierte Version der vom
ui.frontend-Modul generierten CSS- und JavaScript-Dateien darstellen. Bearbeiten Sie die anderen Client-Bibliotheken nicht, da sie von der laufenden AEM-Instanz als Proxy übermittelt werden. -
Öffnen Sie ein neues Terminal-Fenster und navigieren Sie zum Ordner
ui.frontend. Führen Sie den Befehlnpm startaus:code language-shell $ cd ui.frontend $ npm startDieser Befehl startet den webpack-dev-server auf http://localhost:8080/.
note caution CAUTION Wenn Sie einen Sass-bezogenen Fehler erhalten, stoppen Sie den Server und führen Sie den Befehl npm rebuild node-sassaus; wiederholen Sie dann die oben genannten Schritte. Dieser Fehler kann auftreten, wenn Sie eine andere Version vonnpmundnodehaben, als im Projektaem-cif-guides-venia/pom.xmlangegeben. -
Navigieren Sie in einer neuen Registerkarte mit demselben Browser einer angemeldeten Instanz von AEM zum :8080http://localhost/. Über den webpack-Dev-Server sollte die Venia-Startseite angezeigt werden:
Lassen Sie den webpack-Dev-Server laufen. Er wird in der nächsten Übung erneut verwendet.
Kartenstil für den Produkt-Teaser implementieren update-css-product-teaser
Ändern Sie anschließend die Sass-Dateien im ui.frontend-Modul, um für den Produkt-Teaser einen kartenähnlichen Stil zu implementieren. Der webpack-dev-Server dient dazu, die Änderungen schnell anzuzeigen.
Kehren Sie zur IDE und zum erstellten Projekt zurück.
-
Öffnen Sie im Modul ui.frontend erneut die Datei
_productteaser.scssunterui.frontend/src/main/styles/commerce/_productteaser.scss. -
Nehmen Sie folgende Änderungen am Rahmen des Produkt-Teasers vor:
code language-diff .item__image { - border: #ea00ff 8px solid; + border-bottom: 1px solid #c0c0c0; display: block; grid-area: main; height: auto; opacity: 1; transition-duration: 512ms; transition-property: opacity, visibility; transition-timing-function: ease-out; visibility: visible; width: 100%; }Speichern Sie die Änderungen. Der webpack-Dev-Server sollte mit den neuen Stilen automatisch aktualisiert werden.
-
Fügen Sie dem Produkt-Teaser einen Schlagschatten sowie abgerundete Ecken hinzu.
code language-scss .item__root { position: relative; box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2); transition: 0.3s; border-radius: 5px; float: left; margin-left: 12px; margin-right: 12px; } .item__root:hover { box-shadow: 0 8px 16px 0 rgba(0,0,0,0.2); } -
Aktualisieren Sie den Produktnamen so, dass er unten im Teaser angezeigt wird, und ändern Sie die Textfarbe.
code language-css .item__name { color: #000; display: block; float: left; font-size: 22px; font-weight: 900; line-height: 1em; padding: 0.75em; text-transform: uppercase; width: 75%; } -
Aktualisieren Sie den Produktpreis so, dass er ebenfalls unten im Teaser angezeigt wird, und ändern Sie die Textfarbe.
code language-css .price { color: #000; display: block; float: left; font-size: 18px; font-weight: 900; padding: 0.75em; padding-bottom: 2em; width: 25%; ... -
Aktualisieren Sie die Medienabfrage unten, damit Sie den Namen und den Preis in Bildschirmen, die kleiner als 992 Pixel sind, stapeln können.
code language-css @media (max-width: 992px) { .productteaser .item__name { font-size: 18px; width: 100%; } .productteaser .item__price { font-size: 14px; width: 100%; } }Der Kartenstil sollte sich nun im webpack-Dev-Server widerspiegeln:
Die Änderungen wurden jedoch noch nicht in AEM bereitgestellt. Sie können die Lösungsdatei hier herunterladen.
-
Stellen Sie Aktualisierungen mithilfe Ihrer Maven-Kenntnisse über ein Befehlszeilen-Terminal in AEM bereit:
code language-shell $ cd aem-cif-guides-venia/ $ mvn clean install -PautoInstallPackage,cloudnote note NOTE Es gibt zusätzliche IDE-Einstellungen und -Tools, die Projektdateien direkt mit einer lokalen AEM-Instanz synchronisieren können, ohne dass ein vollständiger Maven-Build erforderlich ist.
Aktualisierten Produkt-Teaser anzeigen view-updated-product-teaser
Nachdem der Code für das Projekt in AEM bereitgestellt wurde, sollten Sie die Änderungen am Produkt-Teaser nun sehen können.
-
Kehren Sie zu Ihrem Browser zurück und aktualisieren Sie die Homepage: http://localhost:4502/editor.html/content/venia/us/en.html. Der aktualisierte Produkt-Teaser-Stil sollte angezeigt werden.
-
Experimentieren Sie, indem Sie zusätzliche Produkt-Teaser hinzufügen. Mit dem Layout-Modus können Sie die Breite und den Versatz der Komponenten ändern, um mehrere Teaser in einer Zeile anzuzeigen.
Fehlerbehebung troubleshooting
Sie können in CRXDE-Lite überprüfen, ob die aktualisierte CSS-Datei bereitgestellt wurde: http://localhost:4502/crx/de/index.jsp#/apps/venia/clientlibs/clientlib-site/css/site.css
Bei der Bereitstellung neuer CSS-, JavaScript-Dateien, oder beiden, muss sichergestellt werden, dass der Browser keine veralteten Dateien bereitstellt. Sie können dieses potenzielle Problem vermeiden, indem Sie den Browsercache leeren oder eine neue Browser-Sitzung starten.
Außerdem versucht AEM, Client-Bibliotheken für höhere Leistung zwischenzuspeichern. Gelegentlich werden nach einer Code-Implementierung die älteren Dateien bereitgestellt. Sie können den Client-Bibliotheks-Cache von AEM mithilfe des Tools Client-Bibliotheken neu erstellen“ manuell ungültig machen. Invalidieren von Caches ist die bevorzugte Methode, wenn Sie vermuten, dass AEM eine alte Version einer Client-Bibliothek zwischengespeichert hat. Die Neuerstellung von Bibliotheken ist ineffizient und zeitaufwendig.
Herzlichen Glückwunsch congratulations
Sie haben den Stil Ihrer ersten AEM CIF-Kernkomponente festgelegt und dafür einen webpack-Entwicklungs-Server verwendet.
Bonusaufgabe bonus-challenge
Verwenden Sie das AEM-Stilsystem, um zwei Stile einzurichten, die von einer Inhaltsautorin bzw. einem Inhaltsautor aktiviert bzw. deaktiviert werden können. Entwickeln mit dem Stilsystem umfasst detaillierte Schritte und Informationen dazu, wie Sie dabei vorgehen.