Questo articolo descrive come creare un sito Web utilizzando JSP e in base all’interfaccia classica. Adobe consiglia di utilizzare le tecnologie AEM più recenti per i siti Web, come descritto in dettaglio nell'articolo Guida introduttiva allo sviluppo AEM Sites.
Questa esercitazione consente di creare un sito Web completo con Adobe Experience Manager (AEM). Il sito web sarà basato su un sito web generico ed è rivolto principalmente agli sviluppatori web. Tutte le attività di sviluppo si svolgeranno in un ambiente di authoring.
Questa esercitazione descrive come:
Installare AEM.
Access CRXDE Lite (l'ambiente di sviluppo).
Configurate la struttura del progetto in CRXDE Lite.
Creare il modello, il componente e gli script utilizzati come base per la creazione di pagine di contenuto.
Create la pagina principale per il sito Web e quindi le pagine di contenuto.
Create i seguenti componenti da usare sulle pagine:
Include vari componenti di base.
Dopo aver eseguito tutti i passaggi, le pagine avranno il seguente aspetto:
Download del risultato finale
Per seguire l'esercitazione anziché eseguire gli esercizi, scaricate il sito Web-1.0.zip. Questo file è un pacchetto di contenuti AEM che contiene i risultati di questa esercitazione. Utilizzate Package Manager per installare il pacchetto nell'istanza di creazione.
L’installazione di questo pacchetto sovrascrive tutte le risorse sull’istanza di authoring creata con questa esercitazione.
Pacchetto contenuto del sito Web
Per installare un'istanza AEM per lo sviluppo del sito Web, seguite le istruzioni per configurare un ambiente di distribuzione con le istanze di creazione e pubblicazione oppure eseguite un'installazione generica. L'installazione generica prevede il download del file JAR AEM Quickstart, il posizionamento del file license.properties nella stessa directory del file JAR e il doppio clic sul file JAR.
Dopo aver installato AEM, accedete all’ambiente di sviluppo CRXDE Lite facendo clic sul collegamento CRXDE Lite nella pagina di benvenuto:
L'URL del CRXDE Lite per un'istanza di creazione AEM installata localmente utilizzando la porta predefinita è http://localhost:4502/crx/de/.
Utilizzate CRXDE Lite per creare la struttura dell’applicazione miosito Web nella directory archivio:
Nella struttura ad albero, sul lato sinistro del CRXDE Lite, fare clic con il pulsante destro del mouse sulla cartella /apps
e scegliere Crea > Crea cartella. Nella finestra di dialogo Crea cartella, digitare mywebsite
come nome della cartella e fare clic su OK.
Fare clic con il pulsante destro del mouse sulla cartella /apps/mywebsite
e scegliere Crea > Crea cartella. Nella finestra di dialogo Crea cartella, digitare components
come nome della cartella e fare clic su OK.
Fare clic con il pulsante destro del mouse sulla cartella /apps/mywebsite
e scegliere Crea > Crea cartella. Nella finestra di dialogo Crea cartella, digitare templates
come nome della cartella e fare clic su OK.
La struttura nell'albero dovrebbe ora essere simile a questa:
Fare clic su Salva tutto.
In questa sezione è possibile creare la progettazione dell'applicazione utilizzando lo strumento Designer. La progettazione fornisce file CSS e risorse di immagine per il sito Web.
Fare clic sul seguente collegamento per scaricare mywebsite.zip
. L'archivio contiene i file static.css e le immagini per la progettazione.
Esempio di file static.css e immagini
Nella pagina di AEM benvenuto, fate clic su Strumenti. (http://localhost:4502/libs/cq/core/content/welcome.html)
Nella struttura delle cartelle, selezionare la cartella Designer, quindi fare clic su Nuovo > Nuova pagina. Digitare mywebsite
come titolo e fare clic su Crea.
Se l’elemento del sito Web non viene visualizzato nella tabella, aggiornare la struttura ad albero o la tabella.
Utilizzando WebDAVaccess per l'URL all'indirizzo http://localhost:4502, copiate il static.css
file di esempio e la images
cartella dal file mywebsite.zip scaricato nella /etc/designs/mywebsite
cartella.
In questa sezione potete creare quanto segue:
Create un modello da usare come base per le pagine Web del sito.
Un modello definisce il contenuto predefinito di una nuova pagina. I siti Web complessi possono utilizzare diversi modelli per la creazione di diversi tipi di pagine nel sito. In questo esercizio, tutte le pagine sono basate su un modello semplice.
Nella struttura delle cartelle del CRXDE Lite, fare clic con il pulsante destro del mouse su /apps/mywebsite/templates
e scegliere Crea > Crea modello.
Nella finestra di dialogo Crea modello, digitate i seguenti valori e fate clic su Avanti:
Utilizzare il valore predefinito per la proprietà Classificazione.
Il tipo di risorsa identifica il componente che esegue il rendering della pagina. In questo caso, tutte le pagine create utilizzando il modello di pagina del contenuto vengono rappresentate dal componente mywebsite/components/contentpage
.
Per specificare i percorsi delle pagine che possono utilizzare questo modello, fare clic sul pulsante più e digitare /content(/.*)?
nella casella di testo visualizzata. Quindi, fare clic su Next.
Il valore della proprietà path consentita è un'espressione regolare. Per le pagine con un percorso che corrisponde all'espressione è possibile utilizzare il modello. In questo caso, l'espressione regolare corrisponde al percorso della cartella /content
e di tutte le relative sottopagine.
Quando un autore crea una pagina sotto /content
, il modello content page viene visualizzato in un elenco di modelli disponibili da utilizzare.
Fare clic su Next nei pannelli Genitori consentiti e Figli consentiti e fare clic su OK. In CRXDE Lite, fare clic su Salva tutto.
Create il componente che definisce il contenuto ed esegue il rendering delle pagine che utilizzano il modello di pagina del contenuto. La posizione del componente deve corrispondere al valore della proprietà Tipo risorsa del modello di pagina del contenuto.
In CRXDE Lite, fare clic con il pulsante destro del mouse su /apps/mywebsite/components
e scegliere Crea > Componente.
Nella finestra di dialogo Crea componente, digitare i seguenti valori di proprietà:
La posizione del nuovo componente è /apps/mywebsite/components/contentpage
. Questo percorso corrisponde al tipo di risorsa del modello di pagina del contenuto (meno la parte iniziale /apps/
del percorso).
Questa corrispondenza collega il modello al componente ed è fondamentale per il corretto funzionamento del sito Web.
Fare clic su Next finché non viene visualizzato il pannello Allowed Children della finestra di dialogo, quindi fare clic su OK. In CRXDE Lite, fare clic su Salva tutto.
La struttura ora si presenta come segue:
Aggiungete il codice allo script contentpage.jsp per definire il contenuto della pagina.
In CRXDE Lite , aprire il file contentpage.jsp
in /apps/mywebsite/components/contentpage
. Per impostazione predefinita, il file contiene il codice seguente:
<%--
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 */
%>
Copiate il codice seguente e incollatelo in contentpage.jsp dopo il codice predefinito:
<%@ 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>
Fare clic su Salva tutto per salvare le modifiche.
In questa sezione vengono create le seguenti pagine che utilizzano tutte il modello di pagina di contenuto: Il mio sito Web, inglese, prodotti, servizi e clienti.
Nella pagina di AEM benvenuto (http://localhost:4502/libs/cq/core/content/welcome.html), fate clic su Siti Web.
Nella struttura delle cartelle, selezionare la cartella Siti Web, quindi fare clic su Nuovo > Nuova pagina.
Nella finestra Crea pagina, immettere quanto segue:
My Website
mywebsite
Fai clic su Crea. Nella struttura delle cartelle, selezionare la pagina /Websites/My Website
e fare clic su Nuovo > Nuova pagina.
Nella finestra di dialogo Crea pagina, immettete i seguenti valori di proprietà e fate clic su Crea:
Nella struttura delle cartelle, selezionare la pagina /Websites/My Website/English
e fare clic su Nuovo > Nuova pagina.
Nella finestra di dialogo Crea pagina, immettere i seguenti valori di proprietà, quindi fare clic su Crea:
Nella struttura delle cartelle, selezionare la pagina /Websites/My Website/English
e fare clic su Nuovo > Nuova pagina.
Nella finestra di dialogo Crea pagina, immettere i seguenti valori di proprietà, quindi fare clic su Crea:
Nella struttura delle cartelle, selezionare la pagina /Websites/My Website/English
e fare clic su Nuovo > Nuova pagina.
Nella finestra di dialogo Crea pagina, immettere i seguenti valori di proprietà, quindi fare clic su Crea:
La struttura si presenta come segue:
Per collegare le pagine al progetto del mio sito Web, in CRXDE Lite, selezionate il nodo /content/mywebsite/en/jcr:content
. Nella scheda Proprietà digitare i valori seguenti per una nuova proprietà, quindi fare clic su Aggiungi:
In una nuova scheda o finestra del browser Web, aprire http://localhost:4502/content/mywebsite/en/products.html per visualizzare la pagina Prodotti:
Questa sezione descrive come migliorare lo script della pagina di contenuto utilizzando gli script dei componenti AEM foundation e scrivendo script personalizzati.
La pagina Products avrà l'aspetto seguente:
In questo esercizio, è possibile configurare il componente contenuto pagina in modo che il relativo tipo di superficie sia il componente Pagina AEM. Poiché i componenti ereditano le funzionalità del relativo tipo di superpagina, il contenuto della pagina eredita gli script e le proprietà del componente Pagina.
Ad esempio, nel codice JSP del componente, è possibile fare riferimento agli script forniti dal componente supertipo come se fossero inclusi nel componente.
In CRXDE Lite, aggiungi una proprietà al nodo /apps/mywebsite/components/contentpage
.
Selezionare il nodo /apps/mywebsite/components/contentpage
.
Nella parte inferiore della scheda Proprietà, digitare i seguenti valori di proprietà, quindi fare clic su Aggiungi:
Fare clic su Salva tutto.
Aprire il file contentpage.jsp
in /apps/mywebsite/components/contentpage
e sostituire il codice esistente con il seguente codice:
<%@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>
Salvare le modifiche.
Nel browser, ricaricate la pagina Products. Si presenta come segue:
Aprite l'origine della pagina per visualizzare gli elementi javascript e HTML generati dagli script head.jsp e body.jsp. Lo snippet di script seguente apre la barra laterale quando si apre la pagina:
CQ.WCM.launchSidekick("/content/mywebsite/en/products",
{propsDialog: "/libs/foundation/components/page/dialog",
locked: false locked: false
});
In questa sezione vengono creati diversi script che generano ciascuno una parte del corpo della pagina. Quindi create il file body.jsp nel componente PageContent per ignorare il file body.jsp del componente Pagina AEM. Nel file body.jsp è possibile includere gli script che generano le diverse parti del corpo della pagina.
Suggerimento: quando un componente include un file con lo stesso nome e la stessa posizione relativa di un file nel supertipo del componente, viene chiamato sovrapposizione.
In CRXDE Lite, creare il file left.jsp
in /apps/mywebsite/components/contentpage
:
/apps/mywebsite/components/contentpage
, quindi selezionare Crea, quindi Crea file.left.jsp
come Name e fare clic su OK.Modificate il file left.jsp
per rimuovere il contenuto esistente e sostituirlo con il seguente codice:
<%@include file="/libs/foundation/global.jsp"%><%
%><div class="left">
<div>logo</div>
<div>newslist</div>
<div>search</div>
</div>
Salva le modifiche.
In CRXDE Lite, creare il file center.jsp
in /apps/mywebsite/components/contentpage
:
/apps/mywebsite/components/contentpage
, selezionare Crea, quindi Crea file.center.jsp
come Nome e fare clic su OK.Modificate il file center.jsp
per rimuovere il contenuto esistente e sostituirlo con il seguente codice:
<%@include file="/libs/foundation/global.jsp"%><%
%><div class="center">
<div>trail</div>
<div>title</div>
<div>parsys</div>
</div>
Salva le modifiche.
In CRXDE Lite, creare il file right.jsp
in /apps/mywebsite/components/contentpage
:
/apps/mywebsite/components/contentpage
, selezionare Crea, quindi Crea file.right.jsp
come Nome e fare clic su OK.Modificate il file right.jsp
per rimuovere il contenuto esistente e sostituirlo con il seguente codice:
<%@include file="/libs/foundation/global.jsp"%><%
%><div class="right">
<div>iparsys</div>
</div>
Salva le modifiche.
In CRXDE Lite, creare il file body.jsp
in /apps/mywebsite/components/contentpage
:
Modificate il file body.jsp
per rimuovere il contenuto esistente e sostituirlo con il seguente codice:
<%@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>
Salva le modifiche.
Nel browser, ricaricate la pagina Products. Si presenta come segue:
In questa sezione, potete creare un componente per visualizzare i collegamenti a tutte le pagine di livello principale del sito Web per semplificare la navigazione. Il contenuto di questo componente viene visualizzato nella parte superiore di tutte le pagine create utilizzando il modello di pagina del contenuto.
Nella prima versione del componente di navigazione superiore (navigazione superiore), gli elementi di navigazione sono solo collegamenti di testo. Nella seconda versione implementate la navigazione topnav con i collegamenti di navigazione delle immagini.
La navigazione superiore avrà il seguente aspetto:
In CRXDE Lite, fare clic con il pulsante destro del mouse su /apps/mywebsite/components
, selezionare Crea, quindi Crea componente.
Nella finestra Crea componente, immettere quanto segue:
topnav
My Top Navigation Component
This is My Top Navigation Component
Fare clic su Next fino all'ultima finestra in cui si fa clic su OK. Salvare le modifiche.
Aggiungete lo script di rendering alla navigazione superiore per generare collegamenti di testo alle pagine figlie:
In CRXDE Lite, aprire il file topnav.jsp
in /apps/mywebsite/components/topnav
.
Sostituite il codice presente copiando e incollando il seguente codice:
<%@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><%
}
}
%>
Per includere la navigazione superiore nel componente della pagina di contenuto:
Nel CRXDE Lite , aprire la body.jsp
in /apps/mywebsite/components/contentpage
e sostituire:
<div class="topnav">topnav</div>
con:
<cq:include path="topnav" resourceType="mywebsite/components/topnav" />
Salva le modifiche.
Nel browser, ricaricate la pagina Products. La navigazione superiore viene visualizzata come segue:
Il componente Page definisce le proprietà che consentono di fornire sottotitoli per le pagine. Aggiungete sottotitoli che forniscono informazioni sul contenuto della pagina.
Nel browser, aprite la pagina Products.
Nella scheda Barra laterale Pagina, fare clic su Proprietà pagina.
Nella scheda Base della finestra di dialogo, espandere Altri titoli e descrizioni e digitare Sottotitolo per la proprietà what we do
. Fai clic su OK.
Ripetere i passaggi precedenti per aggiungere il sottotitolo sui nostri servizi alla pagina Services.
Ripetere i passaggi precedenti per aggiungere il sottotitolo l'attendibilità ottenuta alla pagina Customers.
Suggerimento: in CRXDE Lite, seleziona il nodo /content/mywebsite/en/products/jcr:content per verificare che la proprietà subtitle sia aggiunta.
Migliorate lo script di rendering del componente nav principale per utilizzare i collegamenti immagine invece del testo ipertestuale per i controlli di navigazione. L’immagine include il titolo e il sottotitolo della destinazione del collegamento.
Questo esercizio illustra Elaborazione richiesta Sling. Lo script topnav.jsp viene modificato per richiamare uno script che genera dinamicamente immagini da utilizzare per i collegamenti di navigazione della pagina. In questo esercizio Sling analizza l’URL dei file sorgente delle immagini per determinare lo script da utilizzare per il rendering delle immagini.
Ad esempio, l’origine del collegamento immagine alla pagina Prodotti potrebbe essere http://localhost:4502/content/mywebsite/en/products.navimage.png. Sling analizza questo URL per determinare il tipo di risorsa e lo script da utilizzare per il rendering della risorsa:
Sling determina il percorso della risorsa da /content/mwebysite/en/products.png.
Sling corrisponde a questo percorso con il nodo /content/mywebsite/en/products
.
Sling determina la sling:resourceType
di questo nodo come mywebsite/components/contentpage
.
Sling trova lo script in questo componente che meglio corrisponde al selettore URL ( navimage
) e all'estensione del nome file ( png
).
In questo esercizio, Sling corrisponde a questi URL per lo script /apps/mywebsite/components/contentpage/navimage.png.java creato dall'utente.
In CRXDE Lite, aprire la sezione topnav.jsp
in /apps/mywebsite/components/topnav.
Individuare il contenuto dell'elemento di ancoraggio (riga 14):
<%=child.getTitle() %>
Sostituite il contenuto dell’ancoraggio con il seguente codice:
<img alt="<%= child.getTitle() %>" src="<%= child.getPath() %>.navimage.png">
Salva le modifiche.
Fare clic con il pulsante destro del mouse sul nodo /apps/mywebsite/components/contentpage
e scegliere Crea > Crea file.
Nella finestra Crea file digitare Nome navimage.png.java
.
L'estensione del nome del file .java indica a Sling che il supporto Java per gli script Apache Sling deve essere utilizzato per compilare lo script e creare un servlet.
Copiate il codice seguente in navimage.png.java.
Il codice estende la classe AbstractImageServlet:
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;
}
}
Salva le modifiche.
Nel browser, ricaricate la pagina Products. La navigazione superiore ora viene visualizzata come segue:
Creare il componente Elenco figlie che genera un elenco di collegamenti di pagina che include il titolo, la descrizione e la data delle pagine (ad esempio, pagine di prodotto). I collegamenti sono destinati alle pagine figlie della pagina corrente o di una pagina principale specificata nella finestra di dialogo del componente.
Create due pagine sotto la pagina Products. Per ogni pagina, che descrive due prodotti specifici, potete impostare un titolo, una descrizione e una data.
Nella struttura delle cartelle della pagina Siti Web, selezionare l'elemento Siti Web/My Website/English/Products e fare clic su Nuovo > Nuova pagina.
Nella finestra di dialogo immettete i seguenti valori di proprietà e fate clic su Crea:
Create un'altra pagina sotto Products utilizzando i seguenti valori delle proprietà:
In CRXDE Lite, imposta una descrizione e una data per la pagina Prodotto 1:
Selezionare il nodo /content/mywebsite/en/products/product1/jcr:content
.
Nella scheda Proprietà immettere i valori seguenti:
jcr:description
String
This is a description of the Product 1!.
Fate clic su Aggiungi.
Nella scheda Proprietà, creare un'altra proprietà utilizzando i seguenti valori:
Fare clic su Salva tutto.
In CRXDE Lite, imposta una descrizione e una data per la pagina Prodotto 2:
Selezionare il nodo /content/mywebsite/en/products/product2/jcr:content
.
Nella scheda Proprietà immettere i valori seguenti:
Fate clic su Aggiungi.
Nelle stesse caselle di testo, sostituire i valori precedenti con i seguenti valori:
Fare clic su Salva tutto.
Per creare il componente ListChildren:
In CRXDE Lite, fare clic con il pulsante destro del mouse su /apps/mywebsite/components
, selezionare Crea, quindi Crea componente.
Nella finestra di dialogo immettete i seguenti valori delle proprietà e fate clic su Next:
Continuate a fare clic su Next finché non viene visualizzato il pannello Allowed Children, quindi fate clic su OK.
Sviluppare lo script per il componente listchild.
In CRXDE Lite, aprire il file listchildren.jsp
in /apps/mywebsite/components/listchildren
.
Sostituite il codice predefinito con il seguente codice:
<%@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><%
}
}
%>
Salva le modifiche.
Creare la finestra di dialogo utilizzata per configurare le proprietà del componente ListChildren.
Create il nodo di dialogo sotto il componente listchild:
In CRXDE Lite, fare clic con il pulsante destro del mouse sul nodo /apps/mywebsite/components/listchildren
e fare clic su Crea > Crea finestra di dialogo.
Nella finestra di dialogo, immettete i seguenti valori di proprietà e fate clic su OK
dialog
Edit Component
quindi fate clic su OK.Con le seguenti proprietà:
Selezionare il nodo /apps/mywebsite/components/listchildren/dialog/items/items/tab1
.
Nella scheda Proprietà, modificare il valore della proprietà title in List Children
Selezionare il nodo tab1 e fare clic su Crea > Crea nodo, immettere i seguenti valori di proprietà, quindi fare clic su OK:
Create un nodo sotto il nodo items utilizzando i seguenti valori di proprietà:
Aggiungere proprietà per il nodo listroot per configurarlo come campo di testo. Ogni riga della tabella seguente rappresenta una proprietà. Al termine, fare clic su Salva tutto.
Nome | Tipo | Valore |
---|---|---|
fieldLabel | Stringa | Percorso della directory principale elenco |
name | Stringa | ./listroot |
xtype | Stringa | textfield |
Per includere il componente listchild nel componente per la pagina di contenuto, procedete come segue:
In CRXDE Lite, aprire il file left.jsp
in /apps/mywebsite/components/contentpage
e individuare il seguente codice (riga 4):
<div>newslist</div>
Sostituire il codice con il codice seguente:
<cq:include path="newslist" resourceType="mywebsite/components/listchildren" />
Salva le modifiche.
Per visualizzare il funzionamento completo di questo componente è possibile visualizzare la pagina Prodotti:
Nel browser, ricaricate la pagina Products. Il componente ListChildren viene visualizzato come segue:
Come Percorso della directory principale dell'elenco, immettere: /content/mywebsite/en
. Fai clic su OK. Il componente ListChildren sulla pagina si presenta ora come segue:
Create un componente che visualizzi il logo della società e fornisca un collegamento alla pagina principale del sito. Il componente contiene una finestra di dialogo in modalità di progettazione che consente di memorizzare i valori delle proprietà nella struttura del sito (ad esempio, nelle progettazioni o in un sito Web):
La finestra di dialogo in modalità progettazione contiene le proprietà per impostare l’immagine e il percorso del collegamento. Il componente logo viene posizionato in alto a sinistra su tutte le pagine del sito Web.
Si presenterà come segue:
Adobe Experience Manager fornisce un componente logo più completo ( /libs/foundation/components/logo
).
Per creare il componente logo, effettuate le seguenti operazioni:
In CRXDE Lite, fare clic con il pulsante destro del mouse su /apps/mywebsite/components, selezionare Crea, quindi Crea componente.
Nella finestra di dialogo Crea componente, immettete i seguenti valori di proprietà e fate clic su Avanti:
logo
.My Logo Component
.This is My Logo Component
.Fare clic su Avanti fino al pannello finale della finestra di dialogo, quindi fare clic su OK.
Questa sezione descrive come creare lo script per visualizzare l'immagine del logo con un collegamento alla pagina principale.
In CRXDE Lite, aprire il file logo.jsp
in /apps/mywebsite/components/logo
.
Il codice seguente crea il collegamento alla home page del sito e aggiunge un riferimento all’immagine del logo. Copiate il codice in logo.jsp
:
<%@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>
Salva le modifiche.
Create la finestra di dialogo per configurare il componente logo in modalità Progettazione. I nodi della finestra di dialogo in modalità Progettazione devono essere denominati design_dialog
.
Create il nodo di dialogo sotto il componente logo:
Fare clic con il pulsante destro del mouse sul nodo /apps/mywebsite/components/logo
e scegliere Crea > Crea finestra di dialogo.
Digitate i seguenti valori di proprietà e fate clic su OK:
design_dialog
Logo (Design)
Fare clic con il pulsante destro del mouse sul nodo tab1 nel ramo design_dialog e scegliere Elimina. Fare clic su Salva tutto.
Sotto il nodo design_dialog/items/items
creare un nuovo nodo denominato img
di tipo cq:Widget
. Aggiungete le seguenti proprietà e fate clic su Salva tutto:
Nome | Tipo | Valore |
---|---|---|
fileNameParameter | Stringa | ./imageName |
fileReferenceParameter | Stringa | ./imageReference |
name | Stringa | ./immagine |
titolo | Stringa | Immagine |
xtype | Stringa | html5smartimage |
Create lo script che recupera l'immagine logo e la scrive nella pagina.
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();
}
}
In CRXDE Lite, aprire la sezione left.jsp
in /apps/mywebsite/components/contentpage file
e individuare la riga di codice seguente:
<div>logo</div>
Sostituire il codice con la seguente riga di codice:
<cq:include path="logo" resourceType="mywebsite/components/logo" />
Salva le modifiche.
Nel browser, ricaricate la pagina Products. Il logo ha il seguente aspetto, ma al momento mostra solo il collegamento sottostante:
Questa sezione descrive come impostare un’immagine come logo utilizzando la finestra di dialogo della modalità di progettazione.
Con la pagina Products aperta nel browser, fate clic sul pulsante Design nella parte inferiore della barra laterale per passare alla modalità Design.
Nella barra Progettazione del logo, fate clic su Modifica per utilizzare la finestra di dialogo per modificare le impostazioni per il componente logo.
Nella finestra di dialogo, fare clic nel pannello della scheda Immagine, individuare l'immagine logo.png
estratta dal file mywebsite.zip
e fare clic su OK.
Fate clic sul triangolo nella barra del titolo della barra laterale per tornare alla modalità Modifica.
In CRXDE Lite, andare al nodo seguente per vedere i valori delle proprietà memorizzate:
/etc/designs/mywebsite/jcr:content/contentpage/logo
In questa sezione viene incluso il componente breadcrumb (trail), che è uno dei componenti di base.
Nel CRXDE Lite , individuare /apps/mywebsite/components/contentpage
, aprire il file center.jsp
e sostituire:
<div>trail</div>
con:
<cq:include path="trail" resourceType="foundation/components/breadcrumb" />
Salva le modifiche.
Nel browser, ricaricate la pagina Prodotti 1. Il componente trail si presenta come segue:
In questa sezione viene incluso il componente titolo, uno dei componenti di base.
Nel CRXDE Lite , individuare /apps/mywebsite/components/contentpage
, aprire il file center.jsp
e sostituire:
<div>title</div>
con:
<cq:include path="title" resourceType="foundation/components/title" />
Salva le modifiche.
Nel browser, ricaricate la pagina Products. Il componente Titolo si presenta come segue:
È possibile impostare un diverso Titolo e Tipo/Dimensione in modalità Modifica.
Il sistema paragrafo (parsys) è una parte significativa di un sito Web in quanto gestisce un elenco di paragrafi. Consente agli autori di aggiungere componenti paragrafo alla pagina e fornisce la struttura.
Aggiungete il componente parsys (uno dei componenti di base) al componente della pagina di contenuto.
In CRXDE Lite, individuare /apps/mywebsite/components/contentpage
, aprire il file center.jsp
e individuare la seguente riga di codice:
<div>parsys</div>
Sostituite la riga di codice con il codice seguente, quindi salvate le modifiche:
<cq:include path="par" resourceType="foundation/components/parsys" />
Nel browser, aggiorna la pagina Products. Ora ha il componente parsys, che è visto come segue:
Create un componente per visualizzare un’immagine nel sistema di paragrafi. Per risparmiare tempo, il componente immagine viene creato come copia del componente logo con alcune modifiche alle proprietà.
Adobe Experience Manager offre un componente immagine più completo ( /libs/foundation/components/image
).
Fare clic con il pulsante destro del mouse sul nodo /apps/mywebsite/components/logo
e scegliere Copia.
Fare clic con il pulsante destro del mouse sul nodo /apps/mywebsite/components
e scegliere Incolla.
Fare clic con il pulsante destro del mouse sul nodo Copy of logo
, fare clic su Rinomina, eliminare il testo esistente e digitare image
.
Selezionate il nodo del componente image
e modificate i seguenti valori delle proprietà:
jcr:title:
Componente immagine personale.jcr:description
: Questo è il componente Immagine personale.Aggiungete una proprietà al nodo image
con i seguenti valori di proprietà:
Sotto il nodo image
, rinominare il nodo design_dialog
in dialog
.
Rinomina logo.jsp
in image.jsp.
Aprite img.GET.java e modificate il pacchetto in apps.mywebsite.components.image
.
Questa sezione descrive come creare lo script immagine.
Apri /apps/mywebsite/components/image/
image.jsp
Sostituite il codice esistente con il seguente codice, quindi salvate le modifiche:
<%@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); %>
Salva le modifiche.
Il tipo di nodo cq:editConfig
consente di configurare alcuni comportamenti dei componenti durante la modifica delle relative proprietà.
In questa sezione, utilizzate un nodo cq:editConfig per consentire di trascinare le risorse da Content Finder nel componente immagine.
In CRXDE Lite, sotto il nodo /apps/mywebsite/components/image, create un nuovo nodo come segue:
Sotto il nodo cq:editConfig, crea un nuovo nodo come segue:
Sotto il nodo cq:dropTargets, create un nuovo nodo come segue:
In CRXDE impostare le proprietà come segue:
Nome | Tipo | Valore |
---|---|---|
accetto | Stringa | image/(gif |
groups | Stringa | media |
propertyName | Stringa | ./imageReference |
In questa sezione, l’icona viene aggiunta per essere visualizzata accanto al componente immagine quando è elencato nella barra laterale:
/libs/foundation/components/image/icon.png
e selezionare Copia./apps/mywebsite/components/image
e scegliere Incolla, quindi fare clic su Salva tutto.In questa sezione verrà visualizzata la pagina Products e verrà aggiunto il componente immagine al sistema di paragrafi.
Nel browser, ricaricate la pagina Products.
Nella barra laterale, fate clic sull'icona Modalità progettazione.
Fare clic sul pulsante Modifica per modificare la finestra di dialogo di progettazione di par.
Nella finestra di dialogo viene visualizzato un elenco di Componenti consentiti; andate a MyWebsite, selezionate il My Image Component e fate clic su OK.
Tornare alla modalità di modifica.
Fate doppio clic sul fotogramma parsys (in Trascinate qui i componenti o le risorse). I selettori Inserisci nuovo componente e Barra laterale si presentano come segue:
In questa sezione viene incluso il componente della barra degli strumenti, che è uno dei componenti di base.
Sono disponibili diverse opzioni, sia in modalità di modifica che in modalità di progettazione.
Nel CRXDE Lite , andate a /apps/mywebsite/components/contentpage
, aprite il file body.jsp
e individuate il codice seguente:
<div class="toolbar">toolbar</div>
Sostituire il codice con il codice seguente, quindi salvare le modifiche.
<cq:include path="toolbar" resourceType="foundation/components/toolbar"/>
Nella struttura delle cartelle della pagina AEM Siti Web, selezionare Websites/My Website/English
, quindi fare clic su Nuovo > Nuova pagina. Specificate i seguenti valori di proprietà e fate clic su Crea:
Nell'elenco delle pagine, fare clic con il pulsante destro del mouse sulla pagina Barra degli strumenti e fare clic su Proprietà. Selezionare Nascondi in navigazione, quindi fare clic su OK.
L'opzione Nascondi in navigazione impedisce la visualizzazione della pagina nei componenti di navigazione, come la navigazione superiore e gli elenchi secondari.
In Barra degli strumenti, creare le pagine seguenti:
Nel browser, ricaricate la pagina Products. Si presenta come segue:
In questa sezione, potete creare il componente per cercare contenuti nel sito Web. Questo componente di ricerca può essere inserito nel sistema paragrafo di qualsiasi pagina (ad esempio, in una pagina di risultati di ricerca specializzata).
Nella pagina English la casella di immissione della ricerca sarà visualizzata come segue:
In CRXDE Lite, fare clic con il pulsante destro del mouse su /apps/mywebsite/components
, selezionare Crea, quindi Crea componente.
Utilizzare la finestra di dialogo per configurare il componente:
Un primo pannello, specifica i seguenti valori di proprietà:
Fare clic su Next, quindi fare di nuovo clic su Next.
Nel pannello Genitori consentiti, fare clic sul pulsante + e digitare */parsys
.
Fare clic su Next, quindi fare clic su OK.
Fare clic su Salva tutto.
Copiate i seguenti nodi e incollateli nel nodo apps/mywebsite/components/search
:
/libs/foundation/components/search/dialog
/libs/foundation/components/search/i18n
/libs/foundation/components/search/icon.png
Fare clic su Salva tutto.
Questa sezione descrive come creare lo script di ricerca:
Aprire il file /apps/mywebsite/components/search/search.jsp
.
Copiate il seguente codice in search.jsp
:
<%@ 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>
Salva le modifiche.
Per includere una casella di input per la ricerca nella sezione sinistra della pagina di contenuto, procedere come segue:
In CRXDE Lite, aprire il file left.jsp
in /apps/mywebsite/components/contentpage
e individuare il seguente codice (riga 2):
%><div class="left">
Inserire il seguente codice prima di la riga:
%><%@ page import="com.day.text.Text"%><%
%><% String docroot = currentDesign.getPath();
String home = Text.getAbsoluteParent(currentPage.getPath(), 2);%><%
Individuate la seguente riga di codice:
<div>search</div>
Sostituire il codice con il codice seguente, quindi salvare le modifiche.
<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>
Nel browser, ricaricate la pagina Products. Il componente di ricerca si presenta come segue:
In questa sezione viene aggiunto il componente di ricerca al sistema di paragrafi.
Nel browser, aprite la pagina Cerca.
Nella barra laterale, fate clic sull'icona della modalità Progettazione.
Nella progettazione del blocco par (sotto il titolo di ricerca), fare clic su Modifica.
Nella finestra di dialogo, scorrete verso il basso fino al gruppo My Websites, selezionate My Search Component e fate clic su OK.
Nella barra laterale, fate clic sul triangolo per tornare alla modalità Modifica.
Trascinate il componente Ricerca personale dalla barra laterale alla cornice parsys. Si presenta come segue:
Andate alla pagina Products. Cercare i clienti nella casella di input e premere Invio. Viene reindirizzato alla pagina Cerca. Passa alla modalità Anteprima: l'output è in un formato simile al seguente:
In questa sezione viene incluso il componente Iparsys (Inheritance Paragraph System), uno dei componenti di base. Questo componente consente di creare una struttura di paragrafi su una pagina padre e fare in modo che le pagine figlie ereditino i paragrafi.
Per questo componente potete impostare diversi parametri sia in modalità di modifica che in modalità di progettazione.
Nel CRXDE Lite , andate a /apps/mywebsite/components/contentpage
, aprite il file right.jsp
e sostituite:
<div>iparsys</div>
con:
<cq:include path="rightpar" resourceType="foundation/components/iparsys" />
Salva le modifiche.
Nel browser, ricaricate la pagina Products. L’intera pagina si presenta come segue: