Skapa en fullfjädrad webbplats (JSP) create-a-fully-featured-website-jsp
Med den här självstudiekursen kan du skapa en komplett webbplats med Adobe Experience Manager (AEM). Webbplatsen kommer att vara baserad på en allmän webbplats och riktar sig främst till webbutvecklare. All utveckling sker i en författarmiljö.
I den här självstudien beskrivs hur du:
-
Installera AEM.
-
Öppna CRXDE Lite (utvecklingsmiljön).
-
Ställ in projektstrukturen i CRXDE Lite.
-
Skapa mallen, komponenten och skripten som används som bas för att skapa innehållssidor.
-
Skapa webbplatsens rotsida och sedan innehållssidorna.
-
Skapa följande komponenter som ska användas på sidorna:
- Top Navigation
- List Children
- Logo
- Image
- Text-Image
- Search
-
Inkludera olika grundkomponenter.
När du har utfört alla steg ser sidorna ut så här:
Ladda ned slutresultatet
Ladda ned webbplatsen-1.0.zip om du vill följa med i självstudiekursen i stället för att genomföra övningarna. Den här filen är ett AEM innehållspaket som innehåller resultatet av den här självstudiekursen. Använd Pakethanteraren för att installera paketet på författarinstansen.
Webbplatsinnehållspaket
Installera Adobe Experience Manager installing-adobe-experience-manager
Om du vill installera en AEM för att utveckla webbplatsen följer du instruktionerna för att konfigurera en distributionsmiljö med författare och publiceringsinstanser, eller utföra en allmän installation. Den generiska installationen innefattar att hämta den AEM QuickStart JAR-filen, placera filen license.properties i samma katalog som JAR-filen och dubbelklicka på JAR-filen.
När du har installerat AEM kommer du åt utvecklingsmiljön i CRXDE Lite genom att klicka på länken CRXDE Lite på välkomstsidan:
Konfigurera projektstrukturen i CRXDE Lite setting-up-the-project-structure-in-crxde-lite
Använd CRXDE Lite för att skapa programstrukturen för mywebsite i databasen:
-
Högerklicka i trädet till vänster om CRXDE Lite på
/apps
mapp och klicka på Create > Create Folder. I Skapa mapp dialogruta, typmywebsite
som mappnamn och klicka på OK. -
Högerklicka på
/apps/mywebsite
mapp och klicka på Create > Create Folder. I Create Folder dialogruta, typcomponents
som mappnamn och klicka på OK. -
Högerklicka på
/apps/mywebsite
mapp och klicka på Create > Create Folder. I Create Folder dialogruta, typtemplates
som mappnamn och klicka på OK.Strukturen i trädet bör nu se ut ungefär så här:
-
Klicka på Save All.
Konfigurera designen setting-up-the-design
I det här avsnittet skapar du designen för programmet med verktyget Designer. Designen innehåller CSS och bildresurser för din webbplats.
mywebsite.zip
. Arkivet innehåller filerna static.css och image för din design.Exempel på static.css-fil och bilder
-
På AEM välkomstsida klickar du på Tools. (http://localhost:4502/libs/cq/core/content/welcome.html)
-
I mappträdet väljer du Designs mapp och klicka sedan på New > New Page. Typ
mywebsite
som titel och klicka Create. -
Om mywebsite-objektet inte visas i tabellen uppdaterar du trädet eller tabellen.
-
Använda WebDAV åtkomst till URL:en på http://localhost:4502, kopiera exemplet
static.css
ochimages
mappen från den nedladdade filen minwebsite.zip till/etc/designs/mywebsite
mapp.
Skapa innehållsidesmallen, komponenten och skriptet creating-the-contentpage-template-component-and-script
I det här avsnittet skapar du följande:
- Den innehållsidesmall som ska användas för att skapa innehållssidor på exempelwebbplatsen
- Den innehållsideskomponent som ska användas för att återge sidor med innehåll
- Innehållssidans skript
Skapa innehållsidesmallen creating-the-contentpage-template
Skapa en mall som du kan använda som bas för webbplatsens webbsidor.
En mall definierar standardinnehållet för en ny sida. Komplexa webbplatser kan använda flera mallar för att skapa olika typer av sidor på webbplatsen. I den här övningen är alla sidor baserade på en enkel mall.
-
Högerklicka i mappträdet i CRXDE Lite
/apps/mywebsite/templates
och klicka Create > Create Template. -
I dialogrutan Skapa mall skriver du följande värden och klickar sedan på Next:
- Label: innehållsida
- Title: Min mall för webbplatsinnehållssida
- Description: Det här är min mall för webbplatsens innehållssida
- Resource Type: mywebsite/components/contentpage
Använd standardvärdet för egenskapen Ranking.
Resurstypen identifierar komponenten som återger sidan. I det här fallet återges alla sidor som skapats med innehållsidesmallen av
mywebsite/components/contentpage
-komponenten. -
Om du vill ange sökvägarna för sidorna som kan använda den här mallen klickar du på plusknappen och skriver
/content(/.*)?
i textrutan som visas. Klicka sedan på Next.Värdet för den tillåtna sökvägsegenskapen är en reguljärt uttryck. Sidor som har en sökväg som matchar uttrycket kan använda mallen. I det här fallet matchar det reguljära uttrycket sökvägen till
/content
och alla undersidor.När en författare skapar en sida nedan
/content
, contentpage -mallen visas i en lista med tillgängliga mallar som ska användas. -
Klicka Next i Allowed Parents och Allowed Children paneler och klicka OK. Klicka på CRXDE Lite Save All.
Skapa komponenten ContentPage creating-the-contentpage-component
Skapa komponent som definierar innehållet och återger sidorna som använder innehållsidesmallen. Platsen för komponenten måste motsvara värdet för egenskapen Resurstyp i innehållsidesmallen.
-
Högerklicka i CRXDE Lite
/apps/mywebsite/components
och klicka Create > Component. -
I Create Component skriver du följande egenskapsvärden:
- Label: innehållsida
- Title: Min webbsidkomponent
- Description: Det här är min innehållskomponent för webbplats
Platsen för den nya komponenten är
/apps/mywebsite/components/contentpage
. Den här sökvägen motsvarar innehållsmallens resurstyp (minus den ursprungliga/apps/
del av banan).Denna korrespondens kopplar mallen till komponenten och är avgörande för att webbplatsen ska fungera korrekt.
-
Klicka Next tills Allowed Children panelen i dialogrutan visas och klicka sedan på OK. Klicka på CRXDE Lite Save All.
Strukturen ser nu ut så här:
Utveckla skript för komponenten ContentPage developing-the-contentpage-component-script
Lägg till kod i skriptet contentpage.jsp för att definiera sidinnehållet.
-
Öppna filen i CRXDE Lite
contentpage.jsp
in/apps/mywebsite/components/contentpage
. Filen innehåller följande kod som standard: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 */ %>
-
Kopiera följande kod och klistra in den i contentpage.jsp efter standardkoden:
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>
-
Klicka Save All för att spara ändringarna.
Skapa webbsidor och innehållssidor creating-your-website-page-and-content-pages
I det här avsnittet skapar du följande sidor som alla använder innehållsidesmallen: Min webbplats, engelska, produkter, tjänster och kunder.
-
På AEM välkomstsida (http://localhost:4502/libs/cq/core/content/welcome.html) klickar du på Webbplatser.
-
I mappträdet väljer du Websites mapp och klicka sedan på New > New Page.
-
I Create Page anger du följande:
- Title:
My Website
- Name:
mywebsite
- Välj My Website Content Page Template
- Title:
-
Klicka på Create. I mappträdet väljer du
/Websites/My Website
sida och klicka New > New Page. -
I Create Page anger du följande egenskapsvärden och klickar sedan på Skapa:
- Title: Engelska
- Name: en
- Välj My Website Content Page Template
-
I mappträdet väljer du
/Websites/My Website/English
sida och klicka New > New Page. -
I Create Page anger du följande egenskapsvärden och klickar sedan på Create:
- Title: Produkter
- Välj My Website Content Page Template
-
I mappträdet väljer du
/Websites/My Website/English
sida och klicka New > New Page. -
I Create Page anger du följande egenskapsvärden och klickar sedan på Create:
- Titel: Tjänster
- Välj My Website Content Page Template
-
I mappträdet väljer du
/Websites/My Website/English
sida och klicka New > New Page. -
I Create Page anger du följande egenskapsvärden och klickar sedan på Create:
- Titel: Kunder
- Välj My Website Content Page Template
Din struktur ser ut så här:
-
Om du vill länka dina sidor till min webbplatsdesign väljer du i CRXDE Lite
/content/mywebsite/en/jcr:content
nod. På Properties skriver du följande värden för en ny egenskap och klickar sedan på Lägg till:- Name: cq:designPath
- Type: Sträng
- Value: /etc/designs/mywebsite
-
Öppna på en ny webbläsarflik eller i ett nytt fönster http://localhost:4502/content/mywebsite/en/products.html för att se sidan Produkter:
Förbättra innehållssidans skript enhancing-the-contentpage-script
I det här avsnittet beskrivs hur du förbättrar innehållsidesskriptet med AEM Foundation-komponentskript och genom att skriva egna skript.
The Products ser sidan ut så här:
Använda skript för startsidan using-the-foundation-page-scripts
I den här övningen konfigurerar du sidinnehållskomponenten så att dess överordnade typ är AEM sidkomponent. Eftersom komponenter ärver funktionerna i sin supertyp ärver sidinnehållet skripten och egenskaperna för sidkomponenten.
I en komponent-JSP-kod kan du till exempel referera till de skript som supertypskomponenten tillhandahåller som om de är inkluderade i komponenten.
-
I CRXDE Lite lägger du till en egenskap i
/apps/mywebsite/components/contentpage
nod.-
Välj
/apps/mywebsite/components/contentpage
nod. -
Ange följande egenskapsvärden längst ned på fliken Egenskaper och klicka sedan på Lägg till:
- Name: sling:resourceSuperType
- Type: Sträng
- Value: grund/komponenter/sida
-
Klicka på Save All.
-
-
Öppna
contentpage.jsp
fil under/apps/mywebsite/components/contentpage
och ersätt den befintliga koden med följande kod: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>
-
Spara ändringarna.
-
Läs in Products sida. Den ser ut så här:
Öppna sidans källa för att se de javascript- och HTML-element som skripten head.jsp och body.jsp genererade. Följande skriptutdrag öppnar Sidekick när du öppnar sidan:
code language-java CQ.WCM.launchSidekick("/content/mywebsite/en/products", {propsDialog: "/libs/foundation/components/page/dialog", locked: false locked: false });
Använda egna skript using-your-own-scripts
I det här avsnittet skapar du flera skript som varje skript skapar en del av sidans brödtext. Sedan skapar du filen body.jsp i pagcontent-komponenten för att åsidosätta body.jsp i AEM Page-komponenten. I filen body.jsp tar du med skript som genererar olika delar av sidans brödtext.
Tips: När en komponent innehåller en fil som har samma namn och relativa plats som en fil i komponentens supertyp, anropas den överläggning.
-
Skapa filen i CRXDE Lite
left.jsp
under/apps/mywebsite/components/contentpage
:- Högerklicka på noden
/apps/mywebsite/components/contentpage
väljer Create sedan Create File. - I fönstret skriver du
left.jsp
som Name och klicka OK.
- Högerklicka på noden
-
Redigera filen
left.jsp
för att ta bort befintligt innehåll och ersätta med följande kod:code language-java <%@include file="/libs/foundation/global.jsp"%><% %><div class="left"> <div>logo</div> <div>newslist</div> <div>search</div> </div>
-
Spara ändringarna.
-
Skapa filen i CRXDE Lite
center.jsp
under/apps/mywebsite/components/contentpage
:- Högerklicka på noden
/apps/mywebsite/components/contentpage
, markera Create sedan Create File. - I dialogrutan skriver du
center.jsp
as Name och klicka OK.
- Högerklicka på noden
-
Redigera filen
center.jsp
om du vill ta bort det befintliga innehållet och ersätta det med följande kod:code language-java <%@include file="/libs/foundation/global.jsp"%><% %><div class="center"> <div>trail</div> <div>title</div> <div>parsys</div> </div>
-
Spara ändringarna.
-
Skapa filen i CRXDE Lite
right.jsp
under/apps/mywebsite/components/contentpage
:- Högerklicka på noden
/apps/mywebsite/components/contentpage
, markera Create sedan Create File. - Skriv i dialogrutan
right.jsp
as Name och klicka OK.
- Högerklicka på noden
-
Redigera filen
right.jsp
för att ta bort befintligt innehåll och ersätta med följande kod:code language-java <%@include file="/libs/foundation/global.jsp"%><% %><div class="right"> <div>iparsys</div> </div>
-
Spara ändringarna.
-
Skapa filen i CRXDE Lite
body.jsp
under/apps/mywebsite/components/contentpage
: -
Redigera filen
body.jsp
för att ta bort befintligt innehåll och ersätta med följande kod: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>
-
Spara ändringarna.
-
Läs in Products sida. Den ser ut så här:
Skapa den övre navigeringskomponenten creating-the-top-navigation-component
I det här avsnittet skapar du en komponent som visar länkar till alla sidor på den översta nivån på webbplatsen för att underlätta navigeringen. Det här komponentinnehållet visas överst på alla sidor som skapas med innehållsidesmallen.
I den första versionen av den översta navigeringskomponenten (överst) är navigeringsobjekten endast textlänkar. I den andra versionen implementerar du topnav med bildnavigeringslänkar.
Den övre navigeringen ser ut så här:
Skapa den övre navigeringskomponenten creating-the-top-navigation-component-1
-
Högerklicka i CRXDE Lite
/apps/mywebsite/components
, markera Create sedan Create Component. -
I Create Component anger du följande:
- Label:
topnav
- Title:
My Top Navigation Component
- Description:
This is My Top Navigation Component
- Label:
-
Klicka Next tills du kommer till det sista fönstret där du klickar OK. Spara ändringarna.
Skapa det övre navigeringsskriptet med textlänkar creating-the-top-navigation-script-with-textual-links
Lägg till återgivningsskriptet längst upp för att generera textlänkar till underordnade sidor:
-
Öppna filen i CRXDE Lite
topnav.jsp
under/apps/mywebsite/components/topnav
. -
Ersätt koden som finns där genom att kopiera och klistra in följande kod:
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><% } } %>
Inkludera översta navigering i innehållsideskomponenten including-top-navigation-in-the-contentpage-component
Så här inkluderar du topnav i innehållsideskomponenten:
-
Öppna CRXDE Lite i
body.jsp
under/apps/mywebsite/components/contentpage
och ersätt:code language-xml <div class="topnav">topnav</div>
med:
code language-xml <cq:include path="topnav" resourceType="mywebsite/components/topnav" />
-
Spara ändringarna.
-
Läs in Products Sida. Den översta navigeringen ser ut så här:
Förbättra sidor med undertexter enhancing-pages-with-subtitles
The Page -komponenten definierar egenskaper som gör att du kan ange underrubriker för sidor. Lägg till undertexter med information om sidinnehållet.
-
Öppna Products sida.
-
På Sidekick Page flik, klicka Page Properties.
-
På Basic flik i dialogrutan, expandera More Titles and Description och Subtitle egenskap, typ
what we do
. Klicka på OK. -
Upprepa föregående steg för att lägga till underrubriken om våra tjänster till Services sida.
-
Upprepa föregående steg för att lägga till underrubriken det förtroende vi får till Customers sida.
Tips: I CRXDE Lite väljer du noden /content/mywebsite/en/products/jcr:content för att se att undertextegenskapen har lagts till.
Förbättra den övre navigeringen med hjälp av bildlänkar enhance-top-navigation-by-using-image-links
Förbättra återgivningsskriptet för den övre komponenten så att bildlänkar används i stället för hypertext för navigeringskontrollerna. Bilden innehåller länkmålets titel och underrubrik.
Denna övning visar Behandling av säljförfrågningar. Skriptet topnav.jsp ändras för att anropa ett skript som dynamiskt genererar bilder som ska användas för sidnavigeringslänkarna. I den här övningen tolkar Sling URL:en för bildkällfiler för att avgöra vilket skript som ska användas för att återge bilderna.
Till exempel kan bildlänken till sidan Produkter vara http://localhost:4502/content/mywebsite/en/products.navimage.png. Sling tolkar denna URL för att fastställa resurstypen och skriptet som ska användas för att återge resursen:
-
Sling avgör sökvägen till resursen som ska
/content/mwebysite/en/products.png.
-
Sling matchar den här sökvägen med
/content/mywebsite/en/products
nod. -
Sling avgör
sling:resourceType
för den här noden som skamywebsite/components/contentpage
. -
Sling hittar det skript i den här komponenten som bäst matchar URL-väljaren (
navimage
) och filnamnstillägg (png
).
I den här övningen matchar Sling dessa URL:er med det /apps/mywebsite/components/contentpage/navimage.png.java-skript som du skapar.
-
Öppna CRXDE Lite i
topnav.jsp
under/apps/mywebsite/components/topnav.
Leta reda på innehållet i ankarelementet (rad 14):code language-xml <%=child.getTitle() %>
-
Ersätt ankarinnehållet med följande kod:
code language-xml <img alt="<%= child.getTitle() %>" src="<%= child.getPath() %>.navimage.png">
-
Spara ändringarna.
-
Högerklicka på
/apps/mywebsite/components/contentpage
nod och klicka Create > Create File. -
I Create File fönster, som Name, typ
navimage.png.java
.Filnamnstillägget .java anger för Sling att stödet för Apache Sling Scripting Java ska användas för att kompilera skriptet och skapa en serverlet.
-
Kopiera följande kod till
navimage.png.java.
Koden utökar klassen AbstractImageServlet:- AbstraktImageServlet skapar ett ImageContext-objekt som lagrar den aktuella resursens egenskaper.
- Resursens överordnade sida extraheras från ImageContext-objektet. Därefter hämtas sidans titel och underrubrik.
- ImageHelper används för att generera bilden från filen navimage_bg.jpg för webbplatsdesignen, sidrubriken och sidans underrubrik.
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; } }
-
Spara ändringarna.
-
Läs in Products sida. Den övre navigeringen visas nu på följande sätt:
Skapa komponenten List Children creating-the-list-children-component
Skapa komponenten listchild som genererar en lista med sidlänkar som innehåller sidans titel, beskrivning och datum (till exempel produktsidor). Länkarna är avsedda för den aktuella sidans underordnade sidor, eller för en rotsida som anges i komponentdialogrutan.
Skapa produktsidor creating-product-pages
Skapa två sidor under Products sida. För varje sida, som beskriver två specifika produkter, anger du en titel, en beskrivning och ett datum.
-
I mappträdet i Websites väljer du Websites/My Website/English/Products objekt och klicka på New > New Page.
-
Ange följande egenskapsvärden i dialogrutan och klicka sedan på Create:
- Title: Produkt 1.
- Name: product1.
- Välj My Website Content Page Template
-
Skapa en till sida under Produkter med följande egenskapsvärden:
- Title: Produkt 2
- Name: product2
- Välj My Website Content Page Template
-
I CRXDE Lite anger du en beskrivning och ett datum för sidan Product 1:
-
Välj
/content/mywebsite/en/products/product1/jcr:content
nod. -
I Properties anger du följande värden:
- Name:
jcr:description
- Type:
String
- Value:
This is a description of the Product 1!.
- Name:
-
Klicka på Add.
-
I Properties skapar du en annan egenskap med följande värden:
- Name: datum
- Type: Sträng
- Value: 02/14/2008
- Klicka på Add.
-
Klicka på Save All.
-
-
I CRXDE Lite anger du en beskrivning och ett datum för sidan Product 2:
-
Välj
/content/mywebsite/en/products/product2/jcr:content
nod. -
I Properties anger du följande värden:
- Name: jcr:description
- Type: Sträng
- Value: Detta är en beskrivning av produkt 2!.
-
Klicka på Add.
-
Ersätt de tidigare värdena i samma textrutor med följande värden:
- Name: datum
- Type: Sträng
- Value: 05/11/2012
- Klicka på Add.
-
Klicka på Save All.
-
Skapa komponenten List Children creating-the-list-children-component-1
Så här skapar du komponenten listchildren:
-
Högerklicka i CRXDE Lite
/apps/mywebsite/components
, markera Create sedan Create Component. -
Ange följande egenskapsvärden i dialogrutan och klicka sedan på Next:
- Label: listchildren.
- Title: Min ListChildren-komponent.
- Description: Det här är min ListChildren-komponent.
-
Fortsätt klicka Next tills Allowed Children visas och klickar sedan på OK.
Skapa skriptet List Children creating-the-list-children-script
Utveckla skriptet för komponenten listchildren.
-
Öppna filen i CRXDE Lite
listchildren.jsp
under/apps/mywebsite/components/listchildren
. -
Ersätt standardkoden med följande kod:
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><% } } %>
-
Spara ändringarna.
Skapa dialogrutan Lista underordnade creating-the-list-children-dialog
Skapa den dialogruta som används för att konfigurera komponentegenskaperna listchildren.
-
Skapa dialognoden under komponenten listchildren:
-
I CRXDE Lite högerklickar du på
/apps/mywebsite/components/listchildren
nod och klicka Create > Create Dialog. -
Ange följande egenskapsvärden i dialogrutan och klicka på OK
- Label:
dialog
- Title:
Edit Component
och klicka OK.
- Label:
Med följande egenskaper:
-
-
Välj
/apps/mywebsite/components/listchildren/dialog/items/items/tab1
nod. -
I Properties ändrar du värdet på title egenskap till
List Children
-
Välj tab1 nod och klicka Create > Create Node, ange följande egenskapsvärden och klicka på OK:
- Name: objekt
- Type: cq:WidgetCollection
-
Skapa en nod under noden items med följande egenskapsvärden:
- Name: listroot
- Type: cq:Widget
-
Lägg till egenskaper för listrotnoden för att konfigurera den som ett textfält. Varje rad i följande tabell representerar en egenskap. När du är klar klickar du på Save All.
table 0-row-3 1-row-3 2-row-3 3-row-3 Namn Typ Värde fieldLabel Sträng Sökväg till listroten name Sträng ./listroot xtype Sträng textfält
Ta med listunderordnade i komponenten ContentPage including-list-children-in-the-contentpage-component
Så här tar du med komponenten listchild i innehållsideskomponenten:
-
Öppna filen i CRXDE Lite
left.jsp
under/apps/mywebsite/components/contentpage
och hitta följande kod (rad 4):code language-xml <div>newslist</div>
-
Ersätt koden med följande kod:
code language-xml <cq:include path="newslist" resourceType="mywebsite/components/listchildren" />
-
Spara ändringarna.
Visa listans underordnade på en sida viewing-list-children-in-a-page
Om du vill se den här komponentens fullständiga funktion kan du visa sidan Produkter:
- när den överordnade sidan ("Sökväg till listrot") inte har definierats.
- när den överordnade sidan ("Sökväg till listrot") har definierats.
-
Läs in Products sida. Komponenten listchildren visas så här:
-
-
Som sökväg till listroten anger du:
/content/mywebsite/en
. Klicka på OK. Komponenten listchildren på sidan ser nu ut så här:
Skapa logokomponenten creating-the-logo-component
Skapa en komponent som visar företagets logotyp och tillhandahåller en länk till webbplatsens hemsida. Komponenten innehåller en dialogruta för designläge så att egenskapsvärden lagras i webbplatsdesignen (https://experienceleague.adobe.com/etc/designs/mywebsite?lang=sv):
- Egenskapsvärdena gäller för alla instanser av komponenten som läggs till på sidor som använder designen.
- Egenskaperna kan konfigureras med valfri instans av komponenten som finns på en sida som använder designen.
Dialogrutan för designläge innehåller egenskaper för att ange bilden och länksökvägen. Logotypkomponenten placeras på den övre vänstra sidan på alla sidor på webbplatsen.
Den kommer att se ut så här:
/libs/foundation/components/logo
).Skapa logokomponentnoden creating-the-logo-component-node
Så här skapar du logotypkomponenten:
-
I CRXDE Lite högerklickar du på /apps/mywebsite/components och väljer Create sedan Create Component.
-
I dialogrutan Skapa komponent anger du följande egenskapsvärden och klickar sedan på Nästa:
- Label:
logo
. - Title:
My Logo Component
. - Description:
This is My Logo Component
.
- Label:
-
Klicka på Nästa tills du kommer till den sista panelen i dialogrutan och klicka sedan på OK.
Skapa logotypskript creating-the-logo-script
I det här avsnittet beskrivs hur du skapar skriptet för att visa logotypbilden med en länk till hemsidan.
-
Öppna filen i CRXDE Lite
logo.jsp
under/apps/mywebsite/components/logo
. -
Följande kod skapar länken till webbplatsens hemsida och lägger till en referens till logotypbilden. Kopiera koden till
logo.jsp
: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>
-
Spara ändringarna.
Skapa dialogrutan Logotypdesign creating-the-logo-design-dialog
Skapa en dialogruta där du kan konfigurera logotypkomponenten i designläge. Dialogrutans noder i designläge måste namnges design_dialog
.
-
Skapa dialognoden under logokomponenten:
-
Högerklicka på
/apps/mywebsite/components/logo
nod och klicka Create > Create Dialog. -
Ange följande egenskapsvärden och klicka sedan på OK:
- Label
design_dialog
- Title
Logo (Design)
- Label
-
-
Högerklicka på noden tab1 i grenen design_dialog och klicka på Ta bort. Klicka på Save All.
-
Under
design_dialog/items/items
nod, skapa en ny nod med namnetimg
av typencq:Widget
. Lägg till följande egenskaper och klicka sedan på Save All:table 0-row-3 1-row-3 2-row-3 3-row-3 4-row-3 5-row-3 Namn Typ Värde fileNameParameter Sträng ./imageName fileReferenceParameter Sträng ./imageReference name Sträng ./bild title Sträng Bild xtype Sträng html5smartimage
Skapa logotypåtergivningsskript creating-the-logo-render-script
Skapa skriptet som hämtar logotypbilden och skriver det på sidan.
- Högerklicka på logotypkomponentnoden och klicka på Create > Create File för att skapa skriptfilen img.GET.java.
- Öppna filen, kopiera följande kod till filen och klicka sedan på Save All:
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();
}
}
Lägga till Logo-komponenten i ContentPage-komponenten adding-the-logo-component-to-the-contentpage-component
-
Öppna CRXDE Lite i
left.jsp
under/apps/mywebsite/components/contentpage file
och hitta följande kodrad:code language-xml <div>logo</div>
-
Ersätt koden med följande kodrad:
code language-xml <cq:include path="logo" resourceType="mywebsite/components/logo" />
-
Spara ändringarna.
-
Läs in Products sida. Logotypen ser ut så här, men för närvarande visas bara den underliggande länken:
Ställa in logotypbilden på en sida setting-the-logo-image-in-a-page
I det här avsnittet beskrivs hur du anger en bild som logotyp i dialogrutan för designläge.
-
Med Products sidan öppnas i webbläsaren, klicka på Design längst ned på Sidekick för att komma in Design läge.
-
Klicka på Edit om du vill använda dialogrutan för att redigera inställningarna för logotypkomponenten.
-
Klicka på panelen i dialogrutan Image bläddra efter
logo.png
bilden som du extraherade frånmywebsite.zip
och klicka på OK. -
Klicka på triangeln i namnlisten Sidekick för att gå tillbaka till Edit läge.
-
Gå till följande nod i CRXDE Lite för att se de lagrade egenskapsvärdena:
/etc/designs/mywebsite/jcr:content/contentpage/logo
Inkludera komponenten Breadcrumb including-the-breadcrumb-component
I det här avsnittet inkluderar du komponenten breadcrumb (trail), som är en av grundkomponenterna.
-
I CRXDE Lite går du till
/apps/mywebsite/components/contentpage
öppnar du filencenter.jsp
och ersätt:code language-java <div>trail</div>
med:
code language-xml <cq:include path="trail" resourceType="foundation/components/breadcrumb" />
-
Spara ändringarna.
-
Läs in Products 1 sida. Spåra komponenten ser ut så här:
Inkludera titelkomponenten including-the-title-component
I det här avsnittet inkluderar du titelkomponenten, som är en av grundkomponenterna.
-
I CRXDE Lite går du till
/apps/mywebsite/components/contentpage
öppnar du filencenter.jsp
och ersätt:code language-xml <div>title</div>
med:
code language-xml <cq:include path="title" resourceType="foundation/components/title" />
-
Spara ändringarna.
-
Läs in Products sida. Titelkomponenten ser ut så här:
Inkludera styckesystemkomponenten including-the-paragraph-system-component
Styckesystemet (parsys) är en viktig del av en webbplats när det hanterar en lista med stycken. Det gör att författare kan lägga till styckekomponenter på sidan och ge struktur.
Lägg till den överordnade komponenten (en av grundkomponenterna) i innehållsideskomponenten.
-
I CRXDE Lite går du till
/apps/mywebsite/components/contentpage
öppnar du filencenter.jsp
och hitta följande kodrad:code language-xml <div>parsys</div>
-
Ersätt kodraden med följande kod och spara sedan ändringarna:
code language-xml <cq:include path="par" resourceType="foundation/components/parsys" />
-
Uppdatera Products sida. Den har nu komponenten parsys, som ser ut så här:
Skapa bildkomponenten creating-the-image-component
Skapa en komponent som visar en bild i styckesystemet. För att spara tid skapas bildkomponenten som en kopia av logotypkomponenten med vissa egenskapsändringar.
/libs/foundation/components/image
).Skapa bildkomponenten creating-the-image-component-1
-
Högerklicka på
/apps/mywebsite/components/logo
nod och klicka Copy. -
Högerklicka på
/apps/mywebsite/components
nod och klicka Paste. -
Högerklicka på
Copy of logo
nod, klicka Rename, tar bort befintlig text och skriverimage
. -
Välj
image
och ändra följande egenskapsvärden:jcr:title:
Min bildkomponent.jcr:description
: Det här är min bildkomponent.
-
Lägg till en egenskap i
image
nod med följande egenskapsvärden:- Name: componentGroup
- Type: Sträng
- Value: MinWebbplats
-
Under
image
nod, ändra namn pådesign_dialog
nod tilldialog
. -
Byt namn
logo.jsp
tillimage.jsp.
-
Öppna img.GET.java och ändra paketet till
apps.mywebsite.components.image
.
Skapa bildskriptet creating-the-image-script
I det här avsnittet beskrivs hur du skapar bildskriptet.
-
Öppna
/apps/mywebsite/components/image/
image.jsp
-
Ersätt den befintliga koden med följande kod och spara sedan ändringarna:
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); %>
-
Spara ändringarna.
Skapa Image cq:editConfig-noden creating-the-image-cq-editconfig-node
The cq:editConfig
Med nodtypen kan du konfigurera vissa beteenden för komponenter när du redigerar deras egenskaper.
I det här avsnittet använder du en cq:editConfig-nod för att dra resurser från Content Finder till bildkomponenten.
-
I CRXDE Lite, under noden /apps/mywebsite/components/image, skapar du en ny nod enligt följande:
- Name: cq:editConfig.
- Type: cq:EditConfig.
-
Skapa en ny nod under noden cq:editConfig enligt följande:
- Name: cq:dropTargets.
- Type: cq:DropTargetConfig.
-
Skapa en ny nod under noden cq:dropTargets enligt följande:
- Name: bild.
- Type: nt:ostrukturerad.
-
I CRXDE anger du egenskaperna enligt följande:
Lägga till ikonen adding-the-icon
I det här avsnittet lägger du till ikonen som ska visas bredvid bildkomponenten när den visas i Spark:
- Högerklicka på filen i CRXDE Lite
/libs/foundation/components/image/icon.png
och markera Copy. - Högerklicka på noden
/apps/mywebsite/components/image
och klicka Paste och sedan klicka Save All.
Använda bildkomponenten using-the-image-component
I det här avsnittet visas Products och lägg till bildkomponenten i styckesystemet.
-
Läs in Products sida.
-
Klicka på Design mode ikon.
-
Klicka på Edit om du vill redigera designdialogrutan för par.
-
I dialogrutan visas en lista med Allowed Components visas, navigera till MyWebsite väljer du My Image Component och klicka OK.
-
Återgå till Edit mode.
-
Dubbelklicka på den parsys-bildrutan (på Drag components or assets here). The Insert New Component och Sidekick väljarna ser ut så här:
Inkludera verktygsfältskomponenten including-the-toolbar-component
I det här avsnittet inkluderar du verktygsfältskomponenten, som är en av grundkomponenterna.
Det finns flera alternativ, både i redigeringsläge och designläge.
-
I CRXDE Lite går du till
/apps/mywebsite/components/contentpage
öppnar dubody.jsp
och leta reda på följande kod:code language-java <div class="toolbar">toolbar</div>
-
Ersätt koden med följande kod och spara sedan ändringarna.
code language-java <cq:include path="toolbar" resourceType="foundation/components/toolbar"/>
-
I mappträdet på sidan AEM webbplatser väljer du
Websites/My Website/English
och sedan klicka New > New Page. Ange följande egenskapsvärden och klicka på Skapa:- Title: Verktygsfält
- Välj My Website Content Page Template
-
Högerklicka på Toolbar sida och klicka Properties. Markera Hide In Navigation och klicka på OK.
The Hide in Navigation förhindrar att sidan visas i navigeringskomponenter som topnav och listchild.
-
Under Toolbar, skapa följande sidor:
- Kontakter
- Feedback
- Inloggning
- Sökning
-
Läs in Products sida. Den ser ut så här:
Skapa sökkomponenten creating-the-search-component
I det här avsnittet skapar du komponenten som du vill söka efter innehåll på webbplatsen. Den här sökkomponenten kan placeras i styckesystemet på vilken sida som helst (till exempel på en specialiserad sökresultatsida).
Din sökruta ser ut så här på English sida:
Skapa sökkomponenten creating-the-search-component-1
-
Högerklicka i CRXDE Lite
/apps/mywebsite/components
, markera Create sedan Create Component. -
Använd dialogrutan för att konfigurera komponenten:
-
Ange följande egenskapsvärden på den första panelen:
- Label: sök
- Title: Min sökkomponent
- Description: Det här är min sökkomponent
- Group: MinWebbplats
-
Klicka Next och sedan klicka Next igen.
-
På Allowed Parents klickar du på + knapp och typ
*/parsys
. -
Klicka Next och sedan klicka OK.
-
-
Klicka på Save All.
-
Kopiera följande noder och klistra in dem i
apps/mywebsite/components/search
nod:/libs/foundation/components/search/dialog
- ``
/libs/foundation/components/search/i18n
/libs/foundation/components/search/icon.png
-
Klicka på Save All.
Skapa sökskriptet creating-the-search-script
I det här avsnittet beskrivs hur du skapar sökskriptet:
-
Öppna
/apps/mywebsite/components/search/search.jsp
-fil. -
Kopiera följande kod till
search.jsp
: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>
-
Spara ändringarna.
Inkludera en sökruta i innehållsideskomponenten including-a-search-box-in-the-contentpage-component
Om du vill ta med en sökruta i det vänstra avsnittet av innehållssidan gör du så här:
-
Öppna filen i CRXDE Lite
left.jsp
under/apps/mywebsite/components/contentpage
och hitta följande kod (rad 2):code language-xml %><div class="left">
-
Infoga följande kod före den raden:
code language-java %><%@ page import="com.day.text.Text"%><% %><% String docroot = currentDesign.getPath(); String home = Text.getAbsoluteParent(currentPage.getPath(), 2);%><%
-
Leta reda på följande kodrad:
code language-xml <div>search</div>
-
Ersätt koden med följande kod och spara sedan ändringarna.
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>
-
Läs in Products sida. Sökkomponenten ser ut så här:
Inkludera sökkomponenten på söksidan including-the-search-component-in-the-search-page
I det här avsnittet lägger du till sökkomponenten i styckesystemet.
-
Öppna Sök sida.
-
Klicka på Design lägesikon.
-
Klicka på knappen Design av paragraf (under rubriken Sök) Edit.
-
Bläddra nedåt till dialogrutan My Websites grupp, markera My Search Component och klicka OK.
-
On Sidekick, click the triangle to return to Edit läge.
-
Dra My Search från Sidekick in i den parsys-bildrutan. Den ser ut så här:
-
Navigera till Products sida. Sök efter kunder i inmatningsrutan och tryck Enter. Du omdirigeras till Search sida. Växla till Preview läge: Utdata har ett liknande format som följande:
Inkludera Iparsys-komponenten including-the-iparsys-component
I det här avsnittet inkluderar du komponenten Inheritance Paragraph System (iparsys), som är en av grundkomponenterna. Med den här komponenten kan du skapa en styckestruktur på en överordnad sida och låta underordnade sidor ärva styckena.
För den här komponenten kan du ange flera parametrar i både redigeringsläge och designläge.
-
I CRXDE Lite går du till
/apps/mywebsite/components/contentpage
öppnar du filenright.jsp
och ersätt:code language-java <div>iparsys</div>
med:
code language-java <cq:include path="rightpar" resourceType="foundation/components/iparsys" />
-
Spara ändringarna.
-
Läs in Products sida. Hela sidan ser ut så här: