Erstellen einer vollständigen Website (JSP) create-a-fully-featured-website-jsp

CAUTION
AEM 6.4 hat das Ende der erweiterten Unterstützung erreicht und diese Dokumentation wird nicht mehr aktualisiert. Weitere Informationen finden Sie in unserer technische Unterstützung. Unterstützte Versionen suchen here.
CAUTION
In diesem Artikel wird beschrieben, wie Sie eine Website mit JSP erstellen und auf der klassischen Benutzeroberfläche basieren. Adobe empfiehlt, die neuesten AEM-Technologien für Ihre Websites zu nutzen, wie ausführlich im Artikel Erste Schritte bei der Entwicklung von AEM Sites beschrieben.

In diesem Tutorial können Sie eine Website mit vollem Funktionsumfang mit Adobe Experience Manager (AEM) erstellen. Die Website basiert auf einer generischen Website und ist in erster Linie auf Webentwickler ausgerichtet. Die gesamte Entwicklung erfolgt in einer Autorenumgebung.

In diesem Tutorial wird Folgendes beschrieben:

  1. Installieren Sie AEM.

  2. Zugreifen auf CRXDE Lite (die Entwicklungsumgebung)

  3. Einrichten der Projektstruktur in CRXDE Lite

  4. Erstellen Sie die Vorlage, die Komponente und die Skripte, die als Grundlage für die Erstellung von Inhaltsseiten verwendet werden.

  5. Erstellen Sie die Stammseite für Ihre Website und dann Inhaltsseiten.

  6. Erstellen der folgenden Komponenten zur Verwendung auf den Seiten

    • topnav (Navigation oben)
    • listchildren (Untergeordnete Elemente auflisten)
    • Logo
    • Bild
    • textimage (Textbild)
    • Suchen
  7. Fügen Sie verschiedene Foundation-Komponenten ein.

Nachdem Sie alle Schritte ausgeführt haben, sehen Ihre Seiten wie folgt aus:

chlimage_1-99

Endergebnis herunterladen

Laden Sie website-1.0.zip herunter, um dem Tutorial anstatt der Übungen zu folgen. Diese Datei ist ein AEM Inhaltspaket, das die Ergebnisse dieses Tutorials enthält. Verwendung Package Manager , um das Paket in Ihrer Autoreninstanz zu installieren.

NOTE
Durch die Installation dieses Pakets werden alle Ressourcen in Ihrer Authoring-Instanz überschrieben, die Sie mithilfe dieses Tutorials erstellt haben.

Website-Inhaltspaket

Datei laden

Installieren von Adobe Experience Manager installing-adobe-experience-manager

Um eine AEM-Instanz für die Entwicklung Ihrer Website zu installieren, folgen Sie den Anweisungen zum Einrichten einer Implementierungsumgebung mit Erstellungs- und Veröffentlichungsinstanzen oder nehmen Sie eine allgemeine Installation vor. Im Zuge einer allgemeinen Installation laden Sie die Quickstart-JAR-Datei von AEM herunter und speichern die Datei license.properties im selben Verzeichnis wie die JAR-Datei. Anschließend doppelklicken Sie auf die JAR-Datei.

Nachdem Sie AEM installiert haben, greifen Sie auf die CRXDE Lite-Entwicklungsumgebung zu, indem Sie auf der Begrüßungsseite auf den Link für CRXDE Lite klicken:

chlimage_1-100

NOTE
Die URL der CRXDE Lite für eine AEM Authoring-Instanz, die lokal mit dem Standardport installiert wird, lautet http://localhost:4502/crx/de/.

Einrichten der Projektstruktur in CRXDE Lite setting-up-the-project-structure-in-crxde-lite

Verwenden Sie die CRXDE Lite, um die Anwendungsstruktur von mywebsite im Repository zu erstellen:

  1. Klicken Sie in der Baumstruktur links in CRXDE Lite mit der rechten Maustaste auf den Ordner /apps  und klicken Sie dann auf  Erstellen > Ordner erstellen. Geben Sie im Dialogfeld Ordner erstellen als Ordnernamen mywebsite ein und klicken Sie auf OK.

  2. Klicken Sie mit der rechten Maustaste auf den Ordner /apps/mywebsite und klicken Sie auf Erstellen > Ordner erstellen. Geben Sie im Dialogfeld Ordner erstellen als Ordnernamen components ein und klicken Sie auf OK.

  3. Klicken Sie mit der rechten Maustaste auf den Ordner /apps/mywebsite und klicken Sie auf Erstellen > Ordner erstellen. Geben Sie im Dialogfeld Ordner erstellen als Ordnernamen templates ein und klicken Sie auf OK.

    Die Struktur im Baum sollte nun in etwa so aussehen:

    chlimage_1-101

  4. Klicken Sie auf Alle speichern.

Einrichten des Designs setting-up-the-design

In diesem Abschnitt erstellen Sie das Design für Ihre Anwendung mit dem Designer-Tool. Das Design stellt CSS- und Bildressourcen für Ihre Website bereit.

NOTE
Klicken Sie auf den folgenden Link zum Herunterladen mywebsite.zip. Das Archiv enthält die static.css- und Bilddateien für Ihr Design.

Beispieldatei static.css und Bilder

Datei laden

  1. Klicken Sie auf der AEM-Begrüßungsseite auf Tools. (http://localhost:4502/libs/cq/core/content/welcome.html)

    chlimage_1-102

  2. Wählen Sie in der Ordnerbaumstruktur den Ordner Designs aus und klicken Sie dann auf Neu > Neue Seite. Geben Sie mywebsite als Titel ein und klicken Sie auf Erstellen.

  3. Wenn das Element „mywebsite“ nicht in der Tabelle aufgeführt wird, aktualisieren Sie die Baumansicht bzw. die Tabelle.

  4. Verwenden von WebDAV Zugriff auf die URL unter http://localhost:4502, kopieren Sie das Beispiel static.css Datei und images Ordner aus der heruntergeladenen Datei mywebsite.zip in /etc/designs/mywebsite Ordner.

    chlimage_1-103

Erstellen der contentpage-Vorlage, -Komponente und des Skripts creating-the-contentpage-template-component-and-script

In diesem Abschnitt erstellen Sie Folgendes:

  • Die contentpage-Vorlage, die zum Erstellen von Inhaltsseiten in der Beispiel-Website verwendet wird
  • Die contentpage-Komponente, die zum Rendern von Inhaltsseiten verwendet wird
  • contentpage-Skript

Erstellen der contentpage-Vorlage creating-the-contentpage-template

Erstellen Sie eine Vorlage, die als Grundlage für die Webseiten Ihrer Site verwendet werden soll.

Eine Vorlage definiert den Standardinhalt einer neuen Seite. Komplexe Websites können mehrere Vorlagen verwenden, um die verschiedenen Seitentypen auf der Site zu erstellen. In dieser Übung basieren alle Seiten auf einer einfachen Vorlage.

  1. Klicken Sie in der Ordnerbaumstruktur von CRXDE Lite mit der rechten Maustaste auf /apps/mywebsite/templates. Klicken Sie dann auf Erstellen > Vorlage erstellen.

  2. Geben Sie im Dialogfeld Vorlage erstellen die folgenden Werte ein und klicken Sie auf Nächste:

    • Titel: contentpage
    • Titel: My Website Content Page Template
    • Beschreibung: Dies ist meine Website-Inhaltsseitenvorlage
    • Ressourcentyp: mywebsite/components/contentpage

    Verwenden Sie den Standardwert für die Eigenschaft „Rangfolge“.

    chlimage_1-104

    Der Ressourcentyp identifiziert die Komponente, die die Seite rendert. In diesem Fall werden alle Seiten, die mithilfe der contentpage-Vorlage erstellt wurden, von der Komponente mywebsite/components/contentpage gerendert.

  3. Um die Pfade der Seiten anzugeben, die diese Vorlage verwenden können, klicken Sie auf die Schaltfläche mit dem Pluszeichen und geben Sie in das daraufhin angezeigte Textfeld /content(/.*)? ein. Klicken Sie dann auf Weiter.

    chlimage_1-105

    Beim Wert der Eigenschaft „Zugelassene Pfade“ handelt es sich um einen regulären Ausdruck. Seiten mit einem Pfad, der dem Ausdruck entspricht, können die Vorlage verwenden. In diesem Fall stimmt der reguläre Ausdruck mit dem Pfad der /content und allen Unterseiten.

    Wenn ein Autor eine Seite unten erstellt /content, die contentpage in einer Liste der zu verwendenden Vorlagen angezeigt.

  4. Klicken Nächste im Zugelassene übergeordnete Elemente und Zugelassene Kinder Bedienfelder und klicken OK. Klicken Sie in CRXDE Lite auf Alle speichern.

    chlimage_1-106

Erstellen der contentpage-Komponente creating-the-contentpage-component

Erstellen Sie die component definiert den Inhalt und rendert die Seiten, die die contentpage-Vorlage verwenden. Der Speicherort der Komponente muss mit dem Wert der Eigenschaft "Ressourcentyp"der contentpage-Vorlage übereinstimmen.

  1. Klicken Sie in CRXDE Lite mit der rechten Maustaste auf /apps/mywebsite/components und klicken Sie auf  Erstellen > Komponente.

  2. Geben Sie im Dialogfeld Komponente erstellen die folgenden Eigenschaftswerte ein:

    • Titel: contentpage
    • Titel: My Website Content Page Component
    • Beschreibung: Dies ist meine Website-Inhaltsseitenkomponente

    chlimage_1-107

    Der Speicherort der neuen Komponente ist /apps/mywebsite/components/contentpage. Dieser Pfad entspricht dem Ressourcentyp der contentpage-Vorlage (ohne den ersten Teil /apps/ des Pfads).

    Diese Entsprechung verbindet die Vorlage mit der Komponente und ist entscheidend für die ordnungsgemäße Funktionsweise der Website.

  3. Klicken Sie auf  Weiter, bis das Bedienfeld „Zugelassene untergeordnete Elemente“ angezeigt wird. Klicken Sie dann auf OK. Klicken Sie in CRXDE Lite auf Alle speichern.

    Die Struktur sieht nun wie folgt aus:

    chlimage_1-108

Entwickeln des Skripts für contentpage-Komponenten developing-the-contentpage-component-script

Fügen Sie dem Skript contentpage.jsp Code hinzu, um den Seiteninhalt zu definieren.

  1. Öffnen Sie in CRXDE Lite die Datei contentpage.jsp unter /apps/mywebsite/components/contentpage. Die Datei enthält standardmäßig den folgenden Code:

    code language-java
    <%--
    
      My Website Content Page Component component.
    
      This is My Website Content Page Component.
    
    --%><%
    %><%@include file="/libs/foundation/global.jsp"%><%
    %><%@page session="false" %><%
    %><%
        /* TODO add you code here */
    %>
    
  2. Kopieren Sie den folgenden Code und fügen Sie ihn in contentpage.jsp nach dem Standardcode ein:

    code language-java
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "https://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>My title</title>
    </head>
    <body>
    <div>My body</div>
    </body>
    </html>
    
  3. Klicken Sie auf Alle speichern, um Ihre Änderungen zu speichern.

Erstellen von Website-Seiten und Inhaltsseiten creating-your-website-page-and-content-pages

In diesem Abschnitt wird erläutert, wie Sie die folgenden Seiten erstellen, die alle die contentpage-Vorlage verwenden: „Meine Website“, „Englisch“, „Produkte“, „Services“ und „Kunden“.

  1. Auf der AEM Begrüßungsseite (http://localhost:4502/libs/cq/core/content/welcome.html), klicken Sie auf Websites.

    chlimage_1-109

  2. Wählen Sie in der Ordnerbaumstruktur den Ordner Websites aus und klicken Sie dann auf Neu > Neue Seite.

  3. Geben Sie im Fenster Seite erstellen Folgendes ein:

    • Titel: My Website
    • Name: mywebsite
    • Wählen Sie die My Website Content Page Template

    chlimage_1-110

  4. Klicken Sie auf Erstellen. Wählen Sie in der Ordnerstruktur die /Websites/My Website Seite und klicken Sie auf Neu > Neue Seite.

  5. Geben Sie im Dialogfeld Seite erstellen  die folgenden Eigenschaftswerte ein und klicken Sie dann auf Erstellen:

    • Titel: englisch
    • Name: en
    • Wählen Sie die My Website Content Page Template
  6. Wählen Sie in der Ordnerstruktur die /Websites/My Website/English Seite und klicken Sie auf Neu > Neue Seite.

  7. Geben Sie im Dialogfeld Seite erstellen  die folgenden Eigenschaftswerte ein und klicken Sie dann auf  Erstellen:

    • Titel: Produkte
    • Wählen Sie die My Website Content Page Template
  8. Wählen Sie in der Ordnerstruktur die /Websites/My Website/English Seite und klicken Sie auf Neu > Neue Seite.

  9. Geben Sie im Dialogfeld Seite erstellen  die folgenden Eigenschaftswerte ein und klicken Sie dann auf  Erstellen:

    • Titel: Dienste
    • Wählen Sie die My Website Content Page Template
  10. Wählen Sie in der Ordnerstruktur die /Websites/My Website/English Seite und klicken Sie auf Neu > Neue Seite.

  11. Geben Sie im Dialogfeld Seite erstellen  die folgenden Eigenschaftswerte ein und klicken Sie dann auf  Erstellen:

    • Titel: Kunden
    • Wählen Sie die My Website Content Page Template

    Ihre Struktur sieht nun wie folgt aus:

    chlimage_1-111

  12. Um Ihre Seiten mit dem mywebsite-Design zu verknüpfen, wählen Sie in CRXDE Lite den Knoten /content/mywebsite/en/jcr:content aus. Im Eigenschaften -Registerkarte die folgenden Werte für eine neue Eigenschaft eingeben und auf Hinzufügen klicken:

    • Name: cq:designPath
    • Typ: Zeichenfolge
    • Wert: /etc/designs/mywebsite

    chlimage_1-112

  13. Öffnen Sie in einem neuen Webbrowser-Tab oder -Fenster http://localhost:4502/content/mywebsite/en/products.html um die Seite Produkte anzuzeigen:

    chlimage_1-113

Verbessern des contentpage-Skripts enhancing-the-contentpage-script

In diesem Abschnitt wird beschrieben, wie Sie das contentpage-Skript mithilfe der AEM Foundation-Komponentenskripte verbessern und eigene Skripte schreiben.

Die Seite Produkte sieht nun wie folgt aus:

chlimage_1-4

Verwenden von Foundation-Seitenskripten using-the-foundation-page-scripts

In dieser Übung konfigurieren Sie Ihre Seitenkomponente so, dass ihr Supertyp die AEM Seitenkomponente ist. Da Komponenten die Eigenschaften ihres Supertyps erben, erbt Ihre pagecontent-Komponente die Skripte und Eigenschaften der Seitenkomponente.

Beispielsweise können Sie im JSP-Code der Komponente so auf die Skripte verweisen, die den Supertyp der Komponente bereitstellen, als wären sie in Ihrer Komponente enthalten.

  1. Fügen Sie in CRXDE Lite eine Eigenschaft zum Knoten /apps/mywebsite/components/contentpage hinzu.

    1. Wählen Sie den Knoten /apps/mywebsite/components/contentpage aus.

    2. Geben Sie unten auf der Registerkarte „Eigenschaften“ die folgenden Eigenschaftswerte ein und klicken Sie dann auf „Hinzufügen“:

      • Name: sling:resourceSuperType
      • Typ: Zeichenfolge
      • Wert: foundation/components/page
    3. Klicken Sie auf Alle speichern.

  2. Öffnen Sie die Datei contentpage.jsp unter /apps/mywebsite/components/contentpage und ersetzen Sie den vorhandenen Code durch den folgenden Code:

    code language-xml
    <%@include file="/libs/foundation/global.jsp"%><%
    %><%@page session="false" contentType="text/html; charset=utf-8" %><%
    %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "https://www.w3.org/TR/html4/strict.dtd">
    <html>
    <cq:include script="head.jsp"/>
    <cq:include script="body.jsp"/>
    </html>
    
  3. Speichern Sie Ihre Änderungen.

  4. Laden Sie in Ihrem Browser die Seite Produkte neu. Sie sieht wie folgt aus:

    chlimage_1-5

    Öffnen Sie die Seitenquelle, um die JavaScript- und HTML-Elemente anzuzeigen, die von den Skripten head.jsp und body.jsp generiert wurden. Das folgende Skriptfragment öffnet den Sidekick, wenn Sie die Seite öffnen:

    code language-java
    CQ.WCM.launchSidekick("/content/mywebsite/en/products",
                {propsDialog: "/libs/foundation/components/page/dialog",
                   locked: false locked: false
                 });
    

Verwenden eigener Skripte using-your-own-scripts

In diesem Abschnitt erstellen Sie mehrere Skripte, die jeweils einen Teil des Seitentextes generieren. Anschließend erstellen Sie die Datei body.jsp in der Komponente pagecontent , um die Datei body.jsp der AEM Seitenkomponente zu überschreiben. In der Datei body.jsp fügen Sie Ihre Skripte ein, die die verschiedenen Teile des Seitentextes generieren.

Tipp: Wenn eine Komponente eine Datei enthält, die denselben Namen und denselben relativen Speicherort wie eine Datei im Supertyp der Komponente aufweist, wird dies als Überlagerung bezeichnet.

  1. Erstellen Sie in CRXDE Lite die Datei left.jsp unter /apps/mywebsite/components/contentpage:

    1. Rechtsklick auf den Knoten /apps/mywebsite/components/contentpage, wählen Sie Erstellen then Datei erstellen.
    2. Geben Sie im Fenster left.jsp als "Name"und klicken Sie auf OK.
  2. Bearbeiten Sie die Datei left.jsp, um den vorhandenen Inhalt zu entfernen und durch den folgenden Code zu ersetzen:

    code language-java
    <%@include file="/libs/foundation/global.jsp"%><%
    %><div class="left">
    <div>logo</div>
    <div>newslist</div>
    <div>search</div>
    </div>
    
  3. Speichern Sie die Änderungen.

  4. Erstellen Sie in CRXDE Lite die Datei center.jsp unter /apps/mywebsite/components/contentpage:

    1. Klicken Sie mit der rechten Maustaste auf den Knoten /apps/mywebsite/components/contentpage, wählen Sie dann die Option Erstellen und anschließend die Option Datei erstellen aus.
    2. Geben Sie im Dialogfeld center.jsp as Name und klicken Sie auf OK.
  5. Bearbeiten Sie die Datei center.jsp, um den vorhandenen Inhalt zu entfernen und durch den folgenden Code zu ersetzen:

    code language-java
    <%@include file="/libs/foundation/global.jsp"%><%
    %><div class="center">
    <div>trail</div>
    <div>title</div>
    <div>parsys</div>
    </div>
    
  6. Speichern Sie die Änderungen.

  7. Erstellen Sie in CRXDE Lite die Datei right.jsp unter /apps/mywebsite/components/contentpage:

    1. Klicken Sie mit der rechten Maustaste auf den Knoten /apps/mywebsite/components/contentpage, wählen Sie dann die Option Erstellen und anschließend die Option Datei erstellen aus.
    2. Geben Sie im Dialogfeld in das Feld right.jspName den Dateinamen ein und klicken Sie auf OK.
  8. Bearbeiten Sie die Datei right.jsp, um den vorhandenen Inhalt zu entfernen und durch den folgenden Code zu ersetzen:

    code language-java
    <%@include file="/libs/foundation/global.jsp"%><%
    %><div class="right">
    <div>iparsys</div>
    </div>
    
  9. Speichern Sie die Änderungen.

  10. Erstellen Sie in CRXDE Lite die Datei body.jsp unter /apps/mywebsite/components/contentpage:

  11. Bearbeiten Sie die Datei body.jsp, um den vorhandenen Inhalt zu entfernen und durch den folgenden Code zu ersetzen:

    code language-java
    <%@include file="/libs/foundation/global.jsp"%><%
    %><body>
    <div id="CQ">
    <div class="topnav">topnav</div>
    <div class="content">
    <cq:include script="left.jsp" />
    <cq:include script="center.jsp" />
    <cq:include script="right.jsp" />
    </div>
    <div class="footer">
    <div class="toolbar">toolbar</div>
    </div>
    </div>
    </body>
    
  12. Speichern Sie die Änderungen.

  13. Laden Sie in Ihrem Browser die Seite Produkte neu. Sie sieht wie folgt aus:

    chlimage_1-6

Erstellen der Komponente für die obere Navigationsleiste creating-the-top-navigation-component

In diesem Abschnitt erstellen Sie eine Komponente, die Links zu allen Seiten der obersten Ebene der Website anzeigt, um die Navigation zu vereinfachen. Dieser Komponenteninhalt wird oben auf allen Seiten angezeigt, die mit der contentpage-Vorlage erstellt wurden.

In der ersten Version der oberen Navigationskomponente (topnav) sind die Navigationselemente nur Textlinks. In der zweiten Version implementieren Sie topnav mit Links zur Bildnavigation.

Die Navigation oben sieht wie folgt aus:

chlimage_1-114

Erstellen von topnav-Komponenten creating-the-top-navigation-component-1

  1. Klicken Sie in CRXDE Lite mit der rechten Maustaste auf /apps/mywebsite/components, wählen Sie dann die Option Erstellen und anschließend die Option Komponente erstellen aus.

  2. Geben Sie im Fenster Komponente erstellen Folgendes ein:

    • Bezeichnung: topnav
    • Titel: My Top Navigation Component
    • Beschreibung: This is My Top Navigation Component
  3. Klicken Nächste bis Sie zum letzten Fenster kommen, in dem Sie auf OK. Speichern Sie Ihre Änderungen.

Fügen Sie das Rendering-Skript zu topnav hinzu, um Textlinks zu untergeordneten Seiten zu generieren:

  1. Öffnen Sie in CRXDE Lite die Datei topnav.jsp unter /apps/mywebsite/components/topnav.

  2. Ersetzen Sie den vorhandenen Code durch Kopieren und Einfügen des folgenden Codes:

    code language-xml
    <%@include file="/libs/foundation/global.jsp"%><%
    %><%@ page import="java.util.Iterator,
            com.day.text.Text,
            com.day.cq.wcm.api.PageFilter, com.day.cq.wcm.api.Page" %><%
        /* get starting point of navigation */
        Page navRootPage = currentPage.getAbsoluteParent(2);
        if (navRootPage == null && currentPage != null) {
        navRootPage = currentPage;
        }
        if (navRootPage != null) {
            Iterator<Page> children = navRootPage.listChildren(new PageFilter(request));
            while (children.hasNext()) {
                Page child = children.next();
                %><a href="<%= child.getPath() %>.html"><%=child.getTitle() %></a><%
            }
        }
    %>
    

Einbinden der obersten Navigation in die contentpage-Komponente including-top-navigation-in-the-contentpage-component

So fügen Sie topnav in Ihre contentpage-Komponente ein:

  1. Öffnen Sie in CRXDE Lite die Datei body.jsp unter /apps/mywebsite/components/contentpage und ersetzen Sie:

    code language-xml
    <div class="topnav">topnav</div>
    

    durch:

    code language-xml
    <cq:include path="topnav" resourceType="mywebsite/components/topnav" />
    
  2. Speichern Sie die Änderungen.

  3. Laden Sie in Ihrem Browser die Produkte Seite. Die obere Navigation wird wie folgt angezeigt:

    chlimage_1-115

Verbessern von Seiten mit Untertiteln enhancing-pages-with-subtitles

Die Seite -Komponente definiert Eigenschaften, mit denen Sie Untertitel für Seiten bereitstellen können. Fügen Sie Untertitel hinzu, die Informationen zum Seiteninhalt bereitstellen.

  1. Öffnen Sie in Ihrem Browser die Seite Produkte.

  2. Klicken Sie im Sidekick auf der Registerkarte Seite  auf  Seiteneigenschaften.

  3. Im Allgemein Registerkarte des Dialogfelds, erweitern Weitere Titel und Beschreibungen und für Untertitel Eigenschaft, Typ what we do. Klicken Sie auf OK.

  4. Wiederholen Sie die vorherigen Schritte, um den Untertitel Über unsere Services zur Seite Services hinzuzufügen.

  5. Wiederholen Sie die vorherigen Schritte, um den Untertitel Warum Sie uns vertrauen können zur Seite Kunden hinzuzufügen.

    Tipp: Wählen Sie in CRXDE Lite den Knoten /content/mywebsite/en/products/jcr:content aus, um zu sehen, dass die Eigenschaft "subtitle"hinzugefügt wird.

Verbessern Sie das Rendering-Skript der topnav-Komponente, sodass für die Navigationssteuerelemente Bild-Links anstelle von Hypertext verwendet werden. Das Bild enthält den Titel und den Untertitel des Link-Ziels.

Diese Übung zeigt Verarbeitung von Sling-Anforderungen. Das Skript topnav.jsp wird geändert, um ein Skript aufzurufen, das dynamisch Bilder generiert, die für die Seitennavigationslinks verwendet werden. In dieser Übung analysiert Sling die URL der Bildquelldateien, um das Skript zu bestimmen, das zum Rendern der Bilder verwendet werden soll.

Beispielsweise könnte die Quelle für den Bild-Link zur Produktseite http://localhost:4502/content/mywebsite/en/products.navimage.png lauten. Sling analysiert diese URL, um den Ressourcentyp und das Skript zum Rendern der Ressource zu bestimmen:

  1. Sling bestimmt /content/mwebysite/en/products.png. als Pfad der Ressource.

  2. Sling ordnet diesen Pfad dem Knoten /content/mywebsite/en/products zu.

  3. Sling bestimmt sling:resourceType als mywebsite/components/contentpage dieses Knotens.

  4. Sling findet das Skript in dieser Komponente, das die größte Übereinstimmung mit der URL-Auswahl (navimage) und der Dateinamenerweiterung (png) aufweist.

Im Rahmen dieser Übung ordnet Sling diese URLs dem Skript /apps/mywebsite/components/contentpage/navimage.png.java zu, das Sie erstellen.

  1. Öffnen Sie in CRXDE Lite die Datei topnav.jsp unter /apps/mywebsite/components/topnav.. Suchen Sie den Inhalt des Ankerelements (Zeile 14):

    code language-xml
    <%=child.getTitle() %>
    
  2. Ersetzen Sie den Ankerinhalt durch den folgenden Code:

    code language-xml
    <img alt="<%= child.getTitle() %>" src="<%= child.getPath() %>.navimage.png">
    
  3. Speichern Sie die Änderungen.

  4. Klicken Sie mit der rechten Maustaste auf den Knoten /apps/mywebsite/components/contentpage und klicken Sie auf Erstellen > Datei erstellen.

  5. Geben Sie im Fenster Datei erstellen in das Feld Name  navimage.png.java ein.

    Die Dateinamenerweiterung „.java“ gibt für Sling an, dass das Modul „Apache Sling Scripting Java Support“ verwendet werden muss, um das Skript zu kompilieren und ein Servlet zu erstellen.

  6. Kopieren Sie den folgenden Code nach navimage.png.java.. Der Code erweitert die Klasse „AbstractImageServlet“:

    • AbstractImageServlet erstellt ein ImageContext -Objekt, das die Eigenschaften der aktuellen Ressource speichert.
    • Die übergeordnete Seite der Ressource wird aus dem ImageContext-Objekt extrahiert. Dann werden der Seitentitel und der Untertitel abgerufen.
    • ImageHelper wird verwendet, um das Bild aus der Datei "navimage_bg.jpg"des Site-Designs, dem Seitentitel und dem Seitentitel zu generieren.
    code language-java
    package apps.mywebsite.components.contentpage;
    
    import java.awt.Color;
    import java.awt.Paint;
    import java.awt.geom.Rectangle2D;
    
    import java.io.IOException;
    import javax.jcr.RepositoryException;
    
    import com.day.cq.wcm.api.Page;
    import com.day.cq.wcm.api.PageManager;
    import com.day.cq.wcm.api.components.Component;
    import com.day.cq.wcm.api.designer.Designer;
    
    import com.day.cq.commons.SlingRepositoryException;
    import com.day.cq.wcm.commons.WCMUtils;
    import com.day.cq.wcm.commons.AbstractImageServlet;
    import com.day.cq.commons.ImageHelper;
    
    import com.day.image.Font;
    import com.day.image.Layer;
    
    import org.apache.sling.api.SlingHttpServletRequest;
    import org.apache.sling.api.SlingHttpServletResponse;
    import org.apache.sling.api.resource.Resource;
    import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
    
    /**
      * Renders the navigation image
      */
    public class navimage_png extends AbstractImageServlet {
    
          protected Layer createLayer(ImageContext ctx)
                 throws RepositoryException, IOException {
             PageManager pageManager = ctx.resolver.adaptTo(PageManager.class);
             Page currentPage = pageManager.getContainingPage(ctx.resource);
    
             /* constants for image appearance */
             int scale = 6;
             int paddingX = 24;
             int paddingY = 24;
             Color bgColor = new Color(0x004a565c, true);
    
             /* obtain the page title */
             String title = currentPage.getTitle();
             if (title == null) {
                 title = currentPage.getName();
             }
    
             /* format the title text */
             title = title.toUpperCase();
             Paint titleColor = Color.WHITE;
             Font titleFont = new Font("Myriad Pro", 10 * scale, Font.BOLD);
             int titleBase = 10 * scale;
    
             /* obtain and format the page subtitle */
             String subtitle = currentPage.getProperties().get("subtitle", "");
             Paint subtitleColor = new Color(0xffa9afb1, true);
             Font subTitleFont = new Font("Tahoma", 7);
             int subTitleBase = 20;
    
             /* create a layer that contains the background image from the mywebsite design */
             Designer dg = ctx.resolver.adaptTo(Designer.class);
             String imgPath = new String(dg.getDesignPath(currentPage)+"/images/navimage_bg.jpg");
             Layer bg = ImageHelper.createLayer(ctx.resolver.resolve(imgPath));
    
             /* draw the title text (4 times bigger) */
             Rectangle2D titleExtent = titleFont.getTextExtent(0, 0, 0, 0, title, Font.ALIGN_LEFT, 0, 0);
             Rectangle2D subtitleExtent = subTitleFont.getTextExtent(0, 0, 0, 0, subtitle, Font.ALIGN_LEFT, 0, 0);
    
             /* ensure subtitleExtent is wide enough */
             if ( subtitle.length() > 0 ) {
                 int titleWidth = (int)titleExtent.getWidth() / scale;
                 if ( subtitleExtent.getWidth() > titleWidth && subtitleExtent.getWidth() + 2 * paddingX >
     bg.getWidth() ) {
                     int charWidth = (int)subtitleExtent.getWidth() / subtitle.length();
                     int maxWidth = (bg.getWidth() > titleWidth + 2  * paddingX ? bg.getWidth() - 2 * paddingX : titleWidth);
                     int len = (maxWidth - ( 2 * charWidth) ) / charWidth;
                     subtitle = subtitle.substring(0, len) + "...";
                     subtitleExtent = subTitleFont.getTextExtent(0, 0, 0, 0, subtitle, Font.ALIGN_LEFT, 0, 0);
                 }
             }
             int width = Math.max((int) titleExtent.getWidth(), (int) subtitleExtent.getWidth());
            /* create the text layer */
             Layer text = new Layer(width, (int) titleExtent.getHeight() + 40, new Color(0x01ffffff, true));
             text.setPaint(titleColor);
             text.drawText(0, titleBase, 0, 0, title, titleFont, Font.ALIGN_LEFT | Font.ALIGN_BASE, 0, 0);
             text.resize(text.getWidth() / scale, text.getHeight() / scale);
             text.setX(0);
             text.setY(0);
    
             if (subtitle.length() > 0) {
                 /* draw the subtitle normal sized */
                 text.setPaint(subtitleColor);
                 text.drawText(0, subTitleBase, 0, 0, subtitle, subTitleFont, Font.ALIGN_LEFT | Font.ALIGN_BASE, 0, 0);
             }
    
             /* merge the image and text layers */
             text.setY(paddingY);
             text.setX(paddingX);
             text.setBackgroundColor(bgColor);
    
             int bgWidth = bg.getWidth();
             if ( text.getWidth() + 2 * paddingX > bgWidth ) {
                 bgWidth = text.getWidth() + 2 * paddingX;
                 bg.resize(bgWidth, bg.getHeight());
             }
             bg.merge(text);
    
             return bg;
         }
     }
    
  7. Speichern Sie die Änderungen.

  8. Laden Sie in Ihrem Browser die Seite Produkte neu. Die obere Navigation wird jetzt wie folgt angezeigt:

    screen_shot_2012-03-07at10047pm

Erstellen der Komponente "List Children" creating-the-list-children-component

Erstellen Sie die listchildren-Komponente, die eine Liste von Seitenlinks generiert, die den Titel, die Beschreibung und das Datum der Seiten enthalten (z. B. Produktseiten). Die Links zielen auf die untergeordneten Seiten der aktuellen Seite oder einer Stammseite ab, die im Komponentendialogfeld angegeben ist.

chlimage_1-116

Erstellen von Produktseiten creating-product-pages

Erstellen Sie zwei Seiten unter dem Produkte Seite. Für jede Seite, die zwei spezifische Produkte beschreibt, legen Sie einen Titel, eine Beschreibung und ein Datum fest.

  1. Im Ordnerbaum der Websites Seite, wählen Sie die Websites/Meine Website/Englisch/Produkte Element und klicken Sie auf Neu > Neue Seite.

  2. Geben Sie im Dialogfeld die folgenden Eigenschaftswerte ein und klicken Sie auf Erstellen:

    • Titel: Produkt 1.
    • Name: product1.
    • Auswählen My Website Content Page Template
  3. Erstellen Sie eine weitere Seite unter „Produkte“ mit den folgenden Eigenschaftswerten:

    • Titel: Produkt 2
    • Name: product2
    • Auswählen My Website Content Page Template
  4. Legen Sie in CRXDE Lite eine Beschreibung und ein Datum für die Seite „Product 1“ fest:

    1. Wählen Sie den Knoten /content/mywebsite/en/products/product1/jcr:content aus.

    2. Geben Sie auf der Registerkarte Eigenschaften die folgenden Werte ein:

      • Name: jcr:description
      • Typ: String
      • Wert: This is a description of the Product 1!.
    3. Klicken Sie auf Hinzufügen.

    4. Im Eigenschaften erstellen Sie eine weitere Eigenschaft mit den folgenden Werten:

      • Name: date
      • Typ: Zeichenfolge
      • Wert: 14.02.2008
      • Klicken Sie auf Hinzufügen.
    5. Klicken Sie auf Alle speichern.

  5. Legen Sie in CRXDE Lite eine Beschreibung und ein Datum für die Seite „Product 2“ fest:

    1. Wählen Sie den Knoten /content/mywebsite/en/products/product2/jcr:content aus.

    2. Geben Sie auf der Registerkarte Eigenschaften die folgenden Werte ein:

      • Name: jcr:description
      • Typ: Zeichenfolge
      • Wert: Dies ist eine Beschreibung des Produkts 2!.
    3. Klicken Sie auf Hinzufügen.

    4. Ersetzen Sie in denselben Textfeldern die vorherigen Werte durch die folgenden Werte:

      • Name: date
      • Typ: Zeichenfolge
      • Wert: 11. Mai 2012
      • Klicken Sie auf Hinzufügen.
    5. Klicken Sie auf Alle speichern.

Erstellen der Komponente "List Children" creating-the-list-children-component-1

So erstellen Sie die listchildren-Komponente:

  1. Klicken Sie in CRXDE Lite mit der rechten Maustaste auf /apps/mywebsite/components, wählen Sie dann die Option Erstellen und anschließend die Option Komponente erstellen aus.

  2. Geben Sie im Dialogfeld die folgenden Eigenschaftswerte ein und klicken Sie auf Nächste:

    • Titel: listchildren
    • Titel: Meine Listchildren-Komponente.
    • Beschreibung: Dies ist die Komponente Meine Listchildren .
  3. Weiter klicken Nächste bis zum Zugelassene Kinder wird angezeigt und klicken Sie dann auf OK.

Erstellen des untergeordneten Listenskripts creating-the-list-children-script

Entwickeln Sie das Skript für die listchildren-Komponente.

  1. Öffnen Sie in CRXDE Lite die Datei listchildren.jsp unter /apps/mywebsite/components/listchildren.

  2. Ersetzen Sie den Standardcode durch den folgenden Code:

    code language-xml
    <%@include file="/libs/foundation/global.jsp"%><%
    %><%@ page import="java.util.Iterator,
             com.day.cq.wcm.api.PageFilter"%><%
         /* Create a new Page object using the path of the current page */
          String listroot = properties.get("listroot", currentPage.getPath());
         Page rootPage = pageManager.getPage(listroot);
         /* iterate through the child pages and gather properties */
         if (rootPage != null) {
             Iterator<Page> children = rootPage.listChildren(new PageFilter(request));
             while (children.hasNext()) {
                 Page child = children.next();
                 String title = child.getTitle() == null ? child.getName() : child.getTitle();
                 String date = child.getProperties().get("date","");
                 %><div class="item">
                 <a href="<%= child.getPath() %>.html"><b><%= title %></b></a>
                 <span><%= date %></span><br>
                 <%= child.getProperties().get("jcr:description","") %><br>
                 </div><%
             }
         }
     %>
    
  3. Speichern Sie die Änderungen.

Erstellen des Dialogfelds "Untergeordnete Listen" creating-the-list-children-dialog

Erstellen Sie das Dialogfeld, das zum Konfigurieren der listchildren-Komponenteneigenschaften verwendet wird.

  1. Erstellen Sie den Dialogknoten unter der listchildren-Komponente:

    1. Klicken Sie in CRXDE Lite mit der rechten Maustaste auf den Knoten /apps/mywebsite/components/listchildren und klicken Sie dann auf  Erstellen > Dialogfeld erstellen.

    2. Geben Sie im Dialogfeld die folgenden Eigenschaftswerte ein und klicken Sie dann auf „OK“:

      • Bezeichnung: dialog
      • Titel: Edit Component und klicken Sie auf OK.

    screen_shot_2012-03-07at45818pm

    Mit den folgenden Eigenschaften:

    screen_shot_2012-03-07at50415pm

  2. Wählen Sie den Knoten /apps/mywebsite/components/listchildren/dialog/items/items/tab1 aus.

  3. Im Eigenschaften Registerkarte ändern Sie den Wert der title Eigenschaft auf List Children

    chlimage_1-117

  4. Wählen Sie die tab1 Knoten und klicken Sie auf Erstellen > Knoten erstellen, geben Sie die folgenden Eigenschaftswerte ein und klicken Sie auf OK:

    • Name: items
    • Typ: cq:WidgetCollection

    screen_shot_2012-03-07at51018pm

  5. Erstellen Sie einen Knoten unter dem Knoten items mit den folgenden Eigenschaftswerten:

    • Name: listroot
    • Typ: cq:Widget

    screen_shot_2012-03-07at51031pm

  6. Fügen Sie Eigenschaften für den Knoten „listroot“ hinzu, um ihn als Textfeld zu konfigurieren. Jede Zeile in der folgenden Tabelle stellt eine Eigenschaft dar. Klicken Sie abschließend auf Alle speichern.

    table 0-row-3 1-row-3 2-row-3 3-row-3
    Name Typ Wert
    fieldLabel Zeichenfolge Pfad des Listenstammverzeichnisses
    name Zeichenfolge ./listroot
    xtype Zeichenfolge textfield

    screen_shot_2012-03-07at51433pm

Einschließen von Listenuntergründen in die contentpage-Komponente including-list-children-in-the-contentpage-component

Um die listchildren-Komponente in Ihre contentpage-Komponente einzubeziehen, gehen Sie wie folgt vor:

  1. Öffnen Sie in CRXDE Lite die Datei left.jsp unter /apps/mywebsite/components/contentpage und suchen Sie den folgenden Code (Zeile 4):

    code language-xml
    <div>newslist</div>
    
  2. Ersetzen Sie diesen Code durch den folgenden Code:

    code language-xml
    <cq:include path="newslist" resourceType="mywebsite/components/listchildren" />
    
  3. Speichern Sie die Änderungen.

Anzeigen von untergeordneten Listen auf einer Seite viewing-list-children-in-a-page

Um sämtliche Vorgänge im Zusammenhang mit dieser Komponente einzusehen, können Sie die Seite „Produkte“ anzeigen:

  • wenn die übergeordnete Seite ("Pfad des Listenstamms") nicht definiert ist.
  • wenn die übergeordnete Seite ("Pfad des Listenstamms") definiert ist.
  1. Laden Sie in Ihrem Browser die Seite Produkte neu. Die listchildren-Komponente wird wie folgt angezeigt:

    chlimage_1-118

  2. chlimage_1-119

  3. Geben Sie im Feld „Pfad des Listenstammverzeichnisses“ /content/mywebsite/en ein. Klicken Sie auf OK. Die listchildren-Komponente auf Ihrer Seite sieht nun wie folgt aus:

    chlimage_1-120

Erstellen der Logokomponente creating-the-logo-component

Erstellen Sie eine Komponente, die das Firmenlogo anzeigt und einen Link zur Startseite der Site bereitstellt. Die Komponente enthält ein Dialogfeld für den Designmodus, sodass Eigenschaftswerte im Site-Design (https://experienceleague.adobe.com/etc/designs/mywebsite?lang=de) gespeichert werden:

  • Die Eigenschaftswerte gelten für alle Instanzen der Komponente, die zu Seiten hinzugefügt werden, die das Design verwenden.
  • Die Eigenschaften können mit jeder Instanz der Komponente konfiguriert werden, die sich auf einer Seite befindet, die das Design verwendet.

Ihr Dialogfeld für den Designmodus enthält Eigenschaften zum Festlegen des Bildes und des Linkpfads. Die logo-Komponente wird auf der linken oberen Seite aller Seiten der Website platziert.

Sie sieht wie folgt aus:

chlimage_1-121

NOTE
Adobe Experience Manager bietet eine logo-Komponente mit umfassenderem Funktionsumfang ( /libs/foundation/components/logo).

Erstellen des Knotens der logo-Komponente creating-the-logo-component-node

Gehen Sie wie folgt vor, um die logo-Komponente zu erstellen:

  1. Klicken Sie in CRXDE Lite mit der rechten Maustaste auf /apps/mywebsite/components, wählen Sie dann die Option Erstellen und anschließend die Option Komponente erstellen aus.

  2. Geben Sie im Dialogfeld „Komponente erstellen“ die folgenden Eigenschaftswerte ein und klicken Sie dann auf „Weiter“:

    • Bezeichnung: logo.
    • Titel: My Logo Component.
    • Beschreibung: This is My Logo Component.
  3. Klicken Sie auf Weiter , bis Sie zum letzten Bedienfeld des Dialogfelds gelangen, und klicken Sie dann auf OK.

Erstellen eines Logoskripts creating-the-logo-script

In diesem Abschnitt wird beschrieben, wie Sie das Skript erstellen, um das Logo-Bild mit einem Link zur Homepage anzuzeigen.

  1. Öffnen Sie in CRXDE Lite die Datei logo.jsp unter /apps/mywebsite/components/logo.

  2. Mit dem folgenden Code wird ein Link zur Homepage der Website erstellt und einen Verweis auf das Logobild hinzufügt. Kopieren Sie den Code und fügen Sie ihn in logo.jsp ein:

    code language-xml
    <%@include file="/libs/foundation/global.jsp"%><%
    %><%@ page import="com.day.text.Text,
                       com.day.cq.wcm.foundation.Image,
                       com.day.cq.commons.Doctype" %><%
        /* obtain the path for home */
        long absParent = currentStyle.get("absParent", 2L);
        String home = Text.getAbsoluteParent(currentPage.getPath(), (int) absParent);
        /* obtain the image */
        Resource res = currentStyle.getDefiningResource("imageReference");
        if (res == null) {
            res = currentStyle.getDefiningResource("image");
        }
        /* if no image use text link, otherwise draw the image */
        %>
    <a href="<%= home %>.html"><%
        if (res == null) {
            %>Home<%
        } else {
            Image img = new Image(res);
            img.setItemName(Image.NN_FILE, "image");
            img.setItemName(Image.PN_REFERENCE, "imageReference");
            img.setSelector("img");
            img.setDoctype(Doctype.fromRequest(request));
            img.setAlt("Home");
            img.draw(out);
        }
        %></a>
    
  3. Speichern Sie die Änderungen.

Erstellen des Dialogfelds "Logo Design" creating-the-logo-design-dialog

Erstellen Sie das Dialogfeld zum Konfigurieren Ihrer logo-Komponente im Designmodus. Knoten für Designmodus-Dialogfelder müssen design_dialog benannt werden.

  1. Erstellen Sie den Knoten „dialog“ unter der logo-Komponente:

    1. Klicken Sie mit der rechten Maustaste auf den Knoten /apps/mywebsite/components/logo und klicken Sie dann auf  Erstellen > Dialogfeld erstellen.

    2. Geben Sie die folgenden Eigenschaftswerte ein und klicken Sie auf OK:

      • Bezeichnung design_dialog
      • Titel Logo (Design)
  2. Klicken Sie mit der rechten Maustaste auf den Knoten tab1 im Zweig design_dialog und klicken Sie auf Löschen. Klicken Sie auf Alle speichern.

  3. Erstellen Sie unter dem Knoten design_dialog/items/items einen neuen Knoten namens img des Typs cq:Widget. Fügen Sie die folgenden Eigenschaften hinzu und klicken Sie auf Alle speichern:

    table 0-row-3 1-row-3 2-row-3 3-row-3 4-row-3 5-row-3
    Name Typ Wert
    fileNameParameter Zeichenfolge ./imageName
    fileReferenceParameter Zeichenfolge ./imageReference
    name Zeichenfolge ./image
    title Zeichenfolge Bild
    xtype Zeichenfolge html5smartimage

    chlimage_1-122

Erstellen des Renderskripts für das Logo creating-the-logo-render-script

Erstellen Sie das Skript, das das Logo-Bild abruft und auf die Seite schreibt.

  1. Klicken Sie mit der rechten Maustaste auf den Knoten der logo-Komponente und klicken Sie auf Erstellen > Datei erstellen , um die Skriptdatei mit dem Namen img.GET.java zu erstellen.
  2. Öffnen Sie die Datei, kopieren Sie den folgenden Code in die Datei und klicken Sie auf Alle speichern:
package apps.mywebsite.components.logo;

import java.io.IOException;
import java.io.InputStream;

import javax.jcr.RepositoryException;
import javax.jcr.Property;
import javax.servlet.http.HttpServletResponse;

import com.day.cq.wcm.foundation.Image;
import com.day.cq.wcm.commons.RequestHelper;
import com.day.cq.wcm.commons.WCMUtils;
import com.day.cq.wcm.commons.AbstractImageServlet;
import com.day.cq.commons.SlingRepositoryException;
import com.day.image.Layer;
import org.apache.commons.io.IOUtils;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;

/**
 * Renders an image
 */
public class img_GET extends AbstractImageServlet {

    protected Layer createLayer(ImageContext c)
            throws RepositoryException, IOException {
        /* don't create the layer yet. handle everything later */
        return null;
    }

    protected void writeLayer(SlingHttpServletRequest req,
                              SlingHttpServletResponse resp,
                              ImageContext c, Layer layer)
            throws IOException, RepositoryException {

        Image image = new Image(c.resource);
        image.setItemName(Image.NN_FILE, "image");
        image.setItemName(Image.PN_REFERENCE, "imageReference");
        if (!image.hasContent()) {
            resp.sendError(HttpServletResponse.SC_NOT_FOUND);
            return;
        }
        /* get pure layer */
        layer = image.getLayer(false, false, false);

        /* do not re-encode layer, just spool */
        Property data = image.getData();
        InputStream in = data.getStream();
        resp.setContentLength((int) data.getLength());
        String contentType = image.getMimeType();
        if (contentType.equals("application/octet-stream")) {
            contentType=c.requestImageType;
        }
        resp.setContentType(contentType);
        IOUtils.copy(in, resp.getOutputStream());
        in.close();

        resp.flushBuffer();
    }
}

Hinzufügen der logo-Komponente zur contentpage-Komponente adding-the-logo-component-to-the-contentpage-component

  1. Öffnen Sie in CRXDE Lite die Datei left.jsp unter /apps/mywebsite/components/contentpage file und suchen Sie die folgende Codezeile:

    code language-xml
    <div>logo</div>
    
  2. Ersetzen Sie diesen Code durch die folgende Codezeile:

    code language-xml
    <cq:include path="logo" resourceType="mywebsite/components/logo" />
    
  3. Speichern Sie die Änderungen.

  4. Laden Sie in Ihrem Browser die Seite Produkte neu. Das Logo sieht nun wie folgt aus, zeigt aber zurzeit nur den zugrundeliegenden Link:

    chlimage_1-123

Festlegen des Logobilds auf einer Seite setting-the-logo-image-in-a-page

In diesem Abschnitt wird beschrieben, wie Sie ein Bild mithilfe des Dialogfelds "Designmodus"als Logo festlegen.

  1. Mit dem Produkte in Ihrem Browser öffnen, klicken Sie auf das Design Schaltfläche unten im Sidekick zur Eingabe Design -Modus.

  2. Klicken Sie in der Symbolleiste "Design"auf Bearbeiten , um das Dialogfeld zu verwenden, um die Einstellungen für die logo-Komponente zu bearbeiten.

  3. Klicken Sie im Dialogfeld im Bereich des Bild Registerkarte, suchen Sie nach der logo.png Bild, das Sie aus dem mywebsite.zip und klicken Sie auf OK.

    chlimage_1-124

  4. Klicken Sie auf das Dreieck in der Titelleiste des Sidekick, um zu Bearbeiten -Modus.

    chlimage_1-7

  5. Wechseln Sie in CRXDE Lite zum folgenden Knoten, um die gespeicherten Eigenschaftswerte anzuzeigen:

    /etc/designs/mywebsite/jcr:content/contentpage/logo

Einschließen der Breadcrumb-Komponente including-the-breadcrumb-component

In diesem Abschnitt schließen Sie die Breadcrumb-Komponente (Pfad) ein, die eine der Foundation-Komponenten ist.

  1. Navigieren Sie in CRXDE Lite zu /apps/mywebsite/components/contentpage, öffnen Sie die Datei center.jsp und ersetzen Sie:

    code language-java
    <div>trail</div>
    

    durch:

    code language-xml
    <cq:include path="trail" resourceType="foundation/components/breadcrumb" />
    
  2. Speichern Sie die Änderungen.

  3. Laden Sie in Ihrem Browser die Seite Produkte 1 neu. Die Trail-Komponente sieht wie folgt aus:

    chlimage_1-125

Einschließen der Titelkomponente including-the-title-component

In diesem Abschnitt schließen Sie die title-Komponente ein, die eine der Foundation-Komponenten ist.

  1. Navigieren Sie in CRXDE Lite zu /apps/mywebsite/components/contentpage, öffnen Sie die Datei center.jsp und ersetzen Sie:

    code language-xml
    <div>title</div>
    

    durch:

    code language-xml
    <cq:include path="title" resourceType="foundation/components/title" />
    
  2. Speichern Sie die Änderungen.

  3. Laden Sie in Ihrem Browser die Seite Produkte neu. Die title-Komponente sieht nun wie folgt aus:

    chlimage_1-126

NOTE
Sie können unter Bearbeiten -Modus.

Einschließen der Absatzsystemkomponente including-the-paragraph-system-component

Das Absatzsystem (parsys) ist ein wichtiger Teil einer Website, da es eine Liste von Absätzen verwaltet. Sie ermöglicht es Autoren, Absatzkomponenten zur Seite hinzuzufügen, und bietet eine Struktur.

Fügen Sie die parsys-Komponente (eine der Foundation-Komponenten) zu Ihrer contentpage-Komponente hinzu.

  1. Navigieren Sie in CRXDE Lite zu /apps/mywebsite/components/contentpage, öffnen Sie die Datei center.jsp und suchen Sie die folgende Codezeile:

    code language-xml
    <div>parsys</div>
    
  2. Ersetzen Sie diese Codezeile durch den folgenden Code und speichern Sie die Änderungen:

    code language-xml
    <cq:include path="par" resourceType="foundation/components/parsys" />
    
  3. Aktualisieren Sie im Browser die Produkte Seite. Sie verfügt jetzt über die parsys-Komponente, die wie folgt aussieht:

    chlimage_1-127

Erstellen der Bildkomponente creating-the-image-component

Erstellen Sie eine Komponente, die ein Bild im Absatzsystem anzeigt. Um Zeit zu sparen, wird die Bildkomponente als Kopie der logo-Komponente mit einigen Eigenschaftsänderungen erstellt.

NOTE
Adobe Experience Manager bietet eine image-Komponente mit umfassenderen Funktionsumfang (/libs/foundation/components/image).

Erstellen von image-Komponenten creating-the-image-component-1

  1. Klicken Sie mit der rechten Maustaste auf /apps/mywebsite/components/logo Knoten und klicken Sie auf Kopieren.

  2. Klicken Sie mit der rechten Maustaste auf die /apps/mywebsite/components Knoten und klicken Sie auf Einfügen.

  3. Klicken Sie mit der rechten Maustaste auf den Knoten Copy of logo, klicken Sie auf „Umbenennen“, löschen Sie den vorhandenen Text und geben Sie image ein.

  4. Wählen Sie den Komponentenknoten image aus und ändern Sie die folgenden Eigenschaftswerte:

    • jcr:title: Meine image-Komponente.
    • jcr:description: Dies ist meine image-Komponente.
  5. Fügen Sie zum Knoten image eine Eigenschaft mit den folgenden Eigenschaftswerten hinzu:

    • Name: componentGroup
    • Typ: Zeichenfolge
    • Wert: MyWebsite
  6. Benennen Sie den Knoten image unter dem Knoten design_dialog in dialog um.

  7. Umbenennen von logo.jsp in image.jsp.

  8. Öffnen Sie img.GET.java und ändern Sie das Paket in apps.mywebsite.components.image.

chlimage_1-128

Erstellen des Bildskripts creating-the-image-script

In diesem Abschnitt wird beschrieben, wie Sie das Bildskript erstellen.

  1. Öffnen Sie /apps/mywebsite/components/image/ image.jsp

  2. Ersetzen Sie den vorhandenen Code durch den folgenden Code und speichern Sie dann die Änderungen:

    code language-xml
    <%@include file="/libs/foundation/global.jsp"%><%
    %><%@ page import="com.day.cq.commons.Doctype,
                        com.day.cq.wcm.foundation.Image,
                        com.day.cq.wcm.api.components.DropTarget,
                        com.day.cq.wcm.api.components.EditConfig,
                        com.day.cq.wcm.commons.WCMUtils" %><%
     /* global.jsp provides access to the current resource through the resource object */
            Image img = new Image(resource);
            img.setItemName(Image.NN_FILE, "image");
            img.setItemName(Image.PN_REFERENCE, "imageReference");
            img.setSelector("img");
            img.setDoctype(Doctype.fromRequest(request));
            img.setAlt("Home");
            img.draw(out); %>
    
  3. Speichern Sie die Änderungen.

Erstellen des Knotens "Image cq:editConfig" creating-the-image-cq-editconfig-node

Über den Knoten cq:editConfig können Sie bestimmte Verhaltensweisen von Komponenten konfigurieren, indem Sie ihre Eigenschaften bearbeiten.

In diesem Abschnitt verwenden Sie einen Knoten cq:editConfig , mit dem Sie Assets aus dem Content Finder in Ihre Bildkomponente ziehen können.

  1. Erstellen Sie in CRXDE Lite unter dem Knoten /apps/mywebsite/components/image einen neuen Knoten wie folgt:

    • Name: cq:editConfig.
    • Typ: cq:EditConfig.
  2. Erstellen Sie unter dem Knoten cq:editConfig einen neuen Knoten wie folgt:

    • Name: cq:dropTargets.
    • Typ: cq:DropTargetConfig.
  3. Erstellen Sie unter dem Knoten cq:dropTargets einen neuen Knoten wie folgt:

    • Name: Bild.
    • Typ: nt:unstructured.
  4. Legen Sie in CRXDE die Eigenschaften wie folgt fest:

Name
Typ
Wert
Akzeptieren der Bedingungen
Zeichenfolge
image/(gif
Gruppen
Zeichenfolge
media
propertyName
Zeichenfolge
./imageReference

chlimage_1-129

Symbol hinzufügen adding-the-icon

In diesem Abschnitt fügen Sie das Symbol hinzu, das neben der Bildkomponente angezeigt werden soll, wenn sie im Sidekick aufgeführt wird:

  1. Klicken Sie in CRXDE Lite mit der rechten Maustaste auf die Datei. /libs/foundation/components/image/icon.png und wählen Sie Kopieren.
  2. Klicken Sie mit der rechten Maustaste auf den Knoten /apps/mywebsite/components/image und klicken Sie dann auf Einfügen und anschließend auf Alle speichern.

Verwenden von image-Komponenten using-the-image-component

In diesem Abschnitt zeigen Sie die Seite Produkte an und fügen Ihre image-Komponente zum Absatzsystem hinzu.

  1. Laden Sie in Ihrem Browser die Seite Produkte neu.

  2. Klicken Sie im Sidekick auf die Designmodus Symbol.

  3. Klicken Sie auf Bearbeiten Schaltfläche zum Bearbeiten des Designdialogfelds von par.

  4. Im Dialogfeld wird eine Liste von Zugelassene Komponenten angezeigt wird; navigieren zu MyWebsite, wählen Sie die My Image Component und klicken Sie auf OK.

  5. Zurück zu Bearbeitungsmodus.

  6. Doppelklicken Sie auf den Rahmen parsys (auf Komponenten oder Assets hierher ziehen). Die Neue Komponente einfügen und Sidekick Selektoren sehen wie folgt aus:

    chlimage_1-8

Einschließen der Toolbar-Komponente including-the-toolbar-component

In diesem Abschnitt fügen Sie die Symbolleistenkomponente ein, die eine der Foundation-Komponenten ist.

Sie haben mehrere Optionen im Bearbeitungsmodus sowie im Designmodus.

  1. Navigieren Sie in CRXDE Lite zu /apps/mywebsite/components/contentpage, öffnen Sie die Datei body.jsp und suchen Sie nach dem folgenden Code:

    code language-java
    <div class="toolbar">toolbar</div>
    
  2. Ersetzen Sie diesen Code durch den folgenden Code und speichern Sie die Änderungen:

    code language-java
    <cq:include path="toolbar" resourceType="foundation/components/toolbar"/>
    
  3. Wählen Sie im Ordnerbaum der Seite AEM Websites die Option Websites/My Website/EnglishKlicken Sie auf Neu > Neue Seite. Geben Sie die folgenden Eigenschaftswerte an und klicken Sie auf Erstellen:

    • Titel: Symbolleiste
    • Auswählen My Website Content Page Template
  4. Klicken Sie in der Liste der Seiten mit der rechten Maustaste auf die Symbolleiste Seite und klicken Sie auf Eigenschaften. Auswählen In Navigation ausblenden und klicken Sie auf OK.

    Die In Navigation ausblenden verhindert, dass die Seite in Navigationskomponenten wie topnav und listchildren angezeigt wird.

  5. under Symbolleiste, erstellen Sie die folgenden Seiten:

    • Kontakte
    • Feedback
    • Anmeldung
    • Suchen
  6. Laden Sie in Ihrem Browser die Seite Produkte neu. Sie sieht wie folgt aus:

    chlimage_1-130

Erstellen der Suchkomponente creating-the-search-component

In diesem Abschnitt erstellen Sie die Komponente, um auf der Website nach Inhalten zu suchen. Diese Suchkomponente kann im Absatzsystem einer beliebigen Seite platziert werden (z. B. auf einer speziellen Suchergebnisseite).

Das Eingabefeld für die Suche auf der Seite Englisch sieht nun wie folgt aus:

chlimage_1-131

Erstellen von search-Komponenten creating-the-search-component-1

  1. Klicken Sie in CRXDE Lite mit der rechten Maustaste auf /apps/mywebsite/components, wählen Sie dann die Option Erstellen und anschließend die Option Komponente erstellen aus.

  2. Verwenden Sie das Dialogfeld, um die Komponente zu konfigurieren:

    1. Geben Sie in einem ersten Bereich die folgenden Eigenschaftswerte an:

      • Titel: suchen
      • Titel: Meine Suchkomponente
      • Beschreibung: Dies ist meine Suchkomponente
      • Gruppe: MyWebsite
    2. Klicken Nächste Klicken Sie auf Nächste erneut.

    3. Im Zugelassene übergeordnete Elemente auf + Schaltfläche und Typ */parsys.

    4. Klicken Nächste und klicken Sie anschließend auf OK.

  3. Klicken Sie auf Alle speichern.

  4. Kopieren Sie die folgenden Knoten und fügen Sie sie in die apps/mywebsite/components/search node:

    • /libs/foundation/components/search/dialog
    • `` /libs/foundation/components/search/i18n
    • /libs/foundation/components/search/icon.png
  5. Klicken Sie auf Alle speichern.

Erstellen des Suchskripts creating-the-search-script

In diesem Abschnitt wird beschrieben, wie Sie das search-Skript erstellen.

  1. Öffnen Sie die Datei /apps/mywebsite/components/search/search.jsp.

  2. Kopieren Sie den folgenden Code und fügen Sie ihn in search.jsp ein:

    code language-java
    <%@ page import="com.day.cq.wcm.foundation.Search,com.day.cq.tagging.TagManager" %>
    <%@include file="/libs/foundation/global.jsp" %><%
    %><cq:setContentBundle/><%
        Search search = new Search(slingRequest);
    
        String searchIn = (String) properties.get("searchIn");
        String requestSearchPath = request.getParameter("path");
        if (searchIn != null) {
            /* only allow the "path" request parameter to be used if it
             is within the searchIn path configured */
            if (requestSearchPath != null && requestSearchPath.startsWith(searchIn)) {
                search.setSearchIn(requestSearchPath);
            } else {
                search.setSearchIn(searchIn);
            }
        } else if (requestSearchPath != null) {
            search.setSearchIn(requestSearchPath);
        }
    
        pageContext.setAttribute("search", search);
        TagManager tm = resourceResolver.adaptTo(TagManager.class);
    %><c:set var="trends" value="${search.trends}"/><%
    %><center>
      <form action="${currentPage.path}.html">
        <input size="41" maxlength="2048" name="q" value="${fn:escapeXml(search.query)}"/>
        <input value="<fmt:message key="searchButtonText"/>" type="submit" />
      </form>
    </center>
    <br/>
    <c:set var="result" value="${search.result}"/>
    <c:choose>
      <c:when test="${empty result && empty search.query}">
      </c:when>
      <c:when test="${empty result.hits}">
        <c:if test="${result.spellcheck != null}">
          <p><fmt:message key="spellcheckText"/> <a href="<c:url value="${currentPage.path}.html"><c:param name="q" value="${result.spellcheck}"/></c:url>"><b><c:out value="${result.spellcheck}"/></b></a></p>
        </c:if>
        <fmt:message key="noResultsText">
          <fmt:param value="${fn:escapeXml(search.query)}"/>
        </fmt:message>
      </c:when>
      <c:otherwise>
        <p class="searchmeta">Results ${result.startIndex + 1} - ${result.startIndex + fn:length(result.hits)} of ${result.totalMatches} for <b>${fn:escapeXml(search.query)}</b>. (${result.executionTime} seconds)</p>
       <br/>
    
      <div class="searchresults">
        <div class="results">
          <c:forEach var="hit" items="${result.hits}" varStatus="status">
            <div class="hit">
            <a href="${hit.URL}">${hit.title}</a>
            <div class="excerpt">${hit.excerpt}</div>
           <div class="hiturl"> ${hit.URL}<c:if test="${!empty hit.properties['cq:lastModified']}"> - <c:catch><fmt:formatDate value="${hit.properties['cq:lastModified'].time}" dateStyle="medium"/></c:catch></c:if> - <a href="${hit.similarURL}"><fmt:message key="similarPagesText"/></a>
            </div></div>
          </c:forEach>
        </div>
          <br/>
    
         <div class="searchRight">
              <c:if test="${fn:length(trends.queries) > 0}">
                  <p><fmt:message key="searchTrendsText"/></p>
                  <div class="searchTrends">
                      <c:forEach var="query" items="${trends.queries}">
                          <a href="<c:url value="${currentPage.path}.html"><c:param name="q" value="${query.query}"/></c:url>"><span style="font-size:${query.size}px"><c:out value="${query.query}"/></span></a>
                      </c:forEach>
                  </div>
              </c:if>
              <c:if test="${result.facets.languages.containsHit}">
                  <p>Languages</p>
                  <c:forEach var="bucket" items="${result.facets.languages.buckets}">
                      <c:set var="bucketValue" value="${bucket.value}"/>
                      <c:set var="label" value='<%= new java.util.Locale((String) pageContext.getAttribute("bucketValue")).getDisplayLanguage(request.getLocale()) %>'/>
                      <c:choose>
                          <c:when test="${param.language != null}">${label} (${bucket.count}) - <a href="<cq:requestURL><cq:removeParam name="language"/></cq:requestURL>">remove filter</a></c:when>
                          <c:otherwise><a title="filter results" href="<cq:requestURL><cq:addParam name="language" value="${bucket.value}"/></cq:requestURL>">${label} (${bucket.count})</a></c:otherwise>
                      </c:choose><br/>
                  </c:forEach>
              </c:if>
              <c:if test="${result.facets.tags.containsHit}">
                  <p>Tags</p>
                  <c:forEach var="bucket" items="${result.facets.tags.buckets}">
                      <c:set var="bucketValue" value="${bucket.value}"/>
                      <c:set var="tag" value="<%= tm.resolve((String) pageContext.getAttribute("bucketValue")) %>"/>
                      <c:if test="${tag != null}">
                          <c:set var="label" value="${tag.title}"/>
                          <c:choose>
                              <c:when test="<%= request.getParameter("tag") != null && java.util.Arrays.asList(request.getParameterValues("tag")).contains(pageContext.getAttribute("bucketValue")) %>">${label} (${bucket.count}) - <a href="<cq:requestURL><cq:removeParam name="tag" value="${bucket.value}"/></cq:requestURL>">remove filter</a></c:when>
                              <c:otherwise><a title="filter results" href="<cq:requestURL><cq:addParam name="tag" value="${bucket.value}"/></cq:requestURL>">${label} (${bucket.count})</a></c:otherwise>
                          </c:choose><br/>
                      </c:if>
                  </c:forEach>
              </c:if>
              <c:if test="${result.facets.mimeTypes.containsHit}">
                  <jsp:useBean id="fileTypes" class="com.day.cq.wcm.foundation.FileTypes"/>
                  <p>File types</p>
                  <c:forEach var="bucket" items="${result.facets.mimeTypes.buckets}">
                      <c:set var="bucketValue" value="${bucket.value}"/>
                      <c:set var="label" value="${fileTypes[bucket.value]}"/>
                      <c:choose>
                          <c:when test="<%= request.getParameter("mimeType") != null && java.util.Arrays.asList(request.getParameterValues("mimeType")).contains(pageContext.getAttribute("bucketValue")) %>">${label} (${bucket.count}) - <a href="<cq:requestURL><cq:removeParam name="mimeType" value="${bucket.value}"/></cq:requestURL>">remove filter</a></c:when>
                          <c:otherwise><a title="filter results" href="<cq:requestURL><cq:addParam name="mimeType" value="${bucket.value}"/></cq:requestURL>">${label} (${bucket.count})</a></c:otherwise>
                      </c:choose><br/>
                  </c:forEach>
              </c:if>
              <c:if test="${result.facets.lastModified.containsHit}">
                  <p>Last Modified</p>
                  <c:forEach var="bucket" items="${result.facets.lastModified.buckets}">
                      <c:choose>
                          <c:when test="${param.from == bucket.from && param.to == bucket.to}">${bucket.value} (${bucket.count}) - <a href="<cq:requestURL><cq:removeParam name="from"/><cq:removeParam name="to"/></cq:requestURL>">remove filter</a></c:when>
                          <c:otherwise><a title="filter results" href="<cq:requestURL><cq:removeParam name="from"/><cq:removeParam name="to"/><c:if test="${bucket.from != null}"><cq:addParam name="from" value="${bucket.from}"/></c:if><c:if test="${bucket.to != null}"><cq:addParam name="to" value="${bucket.to}"/></c:if></cq:requestURL>">${bucket.value} (${bucket.count})</a></c:otherwise>
                      </c:choose><br/>
                  </c:forEach>
              </c:if>
    
          <c:if test="${fn:length(search.relatedQueries) > 0}">
    
           <br/><br/><div class="related">
            <fmt:message key="relatedSearchesText"/>
            <c:forEach var="rq" items="${search.relatedQueries}">
                <a href="${currentPage.path}.html?q=${rq}"><c:out value="${rq}"/></a>
            </c:forEach></div>
          </c:if>
          </div>
    
          <c:if test="${fn:length(result.resultPages) > 1}">
            <div class="pagination">
                <fmt:message key="resultPagesText"/>
            <c:if test="${result.previousPage != null}">
              <a href="${result.previousPage.URL}"><fmt:message key="previousText"/></a>
            </c:if>
            <c:forEach var="page" items="${result.resultPages}">
              <c:choose>
                <c:when test="${page.currentPage}">${page.index + 1}</c:when>
                <c:otherwise>
                  <a href="${page.URL}">${page.index + 1}</a>
                </c:otherwise>
              </c:choose>
            </c:forEach>
            <c:if test="${result.nextPage != null}">
              <a href="${result.nextPage.URL}"><fmt:message key="nextText"/></a>
            </c:if>
            </div>
          </c:if>
          </div>
    
      </c:otherwise>
    </c:choose>
    
  3. Speichern Sie die Änderungen.

Einschließen eines Suchfelds in die contentpage-Komponente including-a-search-box-in-the-contentpage-component

Gehen Sie wie folgt vor, um ein Sucheingabefeld in den linken Bereich Ihrer Inhaltsseite einzuschließen:

  1. Öffnen Sie in CRXDE Lite die Datei left.jsp unter /apps/mywebsite/components/contentpage und suchen Sie den folgenden Code (Zeile 2):

    code language-xml
    %><div class="left">
    
  2. Fügen Sie den folgenden Code ein before diese Zeile:

    code language-java
    %><%@ page import="com.day.text.Text"%><%
    %><% String docroot = currentDesign.getPath();
    String home = Text.getAbsoluteParent(currentPage.getPath(), 2);%><%
    
  3. Suchen Sie die folgende Codezeile:

    code language-xml
    <div>search</div>
    
  4. Ersetzen Sie diese Codezeile durch den folgenden Code und speichern Sie die Änderungen:

    code language-java
    <div class="form_1">
         <form class="geo" action="<%= home %>/toolbar/search.html" id="form" >
              <p>
                   <input class="geo" type="text" name="q"><br>
                   <a href="<%= home %>/toolbar/search.html" class="link_1">advanced search</a>
              </p>
         </form>
    </div>
    
  5. Laden Sie in Ihrem Browser die Seite Produkte neu. Die Suchkomponente sieht wie folgt aus:

    chlimage_1-132

Einschließen der Suchkomponente in die Suchseite including-the-search-component-in-the-search-page

In diesem Abschnitt fügen Sie Ihre Suchkomponente zum Absatzsystem hinzu.

  1. Öffnen Sie in Ihrem Browser die Suche Seite.

  2. Klicken Sie im Sidekick auf die Design Modussymbol.

  3. Klicken Sie im Block "Design von par"(unter dem Suchtitel) auf Bearbeiten.

  4. Führen Sie im Dialogfeld einen Bildlauf nach unten zur Gruppe Meine Websites durch, wählen Sie Meine Such-Komponente aus und klicken Sie auf OK.

  5. Klicken Sie im Sidekick auf das Dreieck, um zu Bearbeiten -Modus.

  6. Ziehen Sie die Meine Suche aus dem Sidekick in den Rahmen parsys. Sie sieht wie folgt aus:

    chlimage_1-133

  7. Navigieren Sie zu Ihrer Produkte Seite. Suchen Sie im Eingabefeld nach Kunden und drücken Sie die Eingabe. Sie werden zum Suche Seite. Wechseln zu Vorschau mode: Die Ausgabe weist folgendes Format auf:

    chlimage_1-134

Einschließen der Iparsys-Komponente including-the-iparsys-component

In diesem Abschnitt schließen Sie die Komponente Vererbungs-Absatzsystem (iparsys) ein, die eine der Foundation-Komponenten ist. Mit dieser Komponente können Sie eine Struktur von Absätzen auf einer übergeordneten Seite erstellen und die Absätze von untergeordneten Seiten übernehmen lassen.

Für diese Komponente können Sie mehrere Parameter sowohl im Bearbeitungs- als auch im Designmodus festlegen.

  1. Navigieren Sie in CRXDE Lite zu /apps/mywebsite/components/contentpage, öffnen Sie die Datei right.jsp und ersetzen Sie:

    code language-java
    <div>iparsys</div>
    

    durch:

    code language-java
    <cq:include path="rightpar" resourceType="foundation/components/iparsys" />
    
  2. Speichern Sie die Änderungen.

  3. Laden Sie in Ihrem Browser die Seite Produkte neu. Die Seite sieht nun insgesamt wie folgt aus:

    chlimage_1-9

recommendation-more-help
2315f3f5-cb4a-4530-9999-30c8319c520e