Die Websites-Administrationskonsole kann zum Anzeigen benutzerdefinierter Spalten erweitert werden. Die Konsole basiert auf einem JSON-Objekt, das erweitert werden kann, indem ein OSGi-Dienst erstellt wird, der die Schnittstelle ListInfoProvider
implementiert. Ein solcher Dienst modifiziert das JSON-Objekt, das an den Client gesendet wird, um die Konsole zu erstellen.
In diesem Schritt-für-Schritt-Tutorial wird erläutert, wie Sie eine neue Spalte in der Websites-Administrationskonsole anzeigen, indem Sie die Schnittstelle ListInfoProvider
implementieren. Dieser Vorgang umfasst die folgenden Schritte:
Mithilfe dieses Tutorials können auch die folgenden Administrationskonsolen erweitert werden:
Die Schnittstelle ListInfoProvider
definiert zwei Methoden:
updateListGlobalInfo
, um die globalen Eigenschaften der Liste zu aktualisieren,updateListItemInfo
, um ein einzelnes Listenelement zu aktualisieren.Die Argumente für beide Methoden lauten:
request
, das zugeordnete Sling-HTTP-Anforderungsobjekt,info
, das zu aktualisierende JSON-Objekt, bei dem es sich um die globale Liste bzw. das aktuelle Listenelement handelt,resource
, eine Sling-Ressource.Mit der unten aufgeführten Beispielimplementierung wird Folgendes erreicht:
Es wird eine Eigenschaft starred für jedes Element hinzugefügt, deren Wert auf true
festgelegt ist, wenn der Seitenname mit e beginnt. Andernfalls ist der Wert auf false
festgelegt.
Es wird eine Eigenschaft starredCount hinzugefügt, die global für die Liste gilt und die Anzahl der Listenelemente mit der Eigenschaft „starred“ enthält.
Gehen Sie wie folgt vor, um den OSGi-Dienst zu erstellen:
Der neue Dienste wird ordnungsgemäß ausgeführt.
package com.test;
import com.day.cq.commons.ListInfoProvider;
import com.day.cq.i18n.I18n;
import com.day.cq.wcm.api.Page;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.commons.json.JSONException;
import org.apache.sling.commons.json.JSONObject;
@Component(metatype = false)
@Service(value = ListInfoProvider.class)
public class StarredListInfoProvider implements ListInfoProvider {
private int count = 0;
public void updateListGlobalInfo(SlingHttpServletRequest request, JSONObject info, Resource resource) throws JSONException {
info.put("starredCount", count);
count = 0; // reset for next execution
}
public void updateListItemInfo(SlingHttpServletRequest request, JSONObject info, Resource resource) throws JSONException {
Page page = resource.adaptTo(Page.class);
if (page != null) {
// Consider starred if page name starts with 'e'
boolean starred = page.getName().startsWith("e");
if (starred) {
count++;
}
I18n i18n = new I18n(request);
info.put("starred", starred ? i18n.get("Yes") : i18n.get("No"));
}
}
}
Ihre Implementierung sollte anhand der bereitgestellten Anforderung und/oder Ressource bestimmen, ob die Informationen zum JSON-Objekt hinzugefügt werden sollen.
Wenn Ihre ListInfoProvider
-Implementierung eine Eigenschaft definiert, die bereits im Antwortobjekt vorhanden ist, wird deren Wert durch den von Ihnen angegebenen Wert überschrieben.
Sie können service ranking verwenden, um die Ausführungsreihenfolge mehrerer ListInfoProvider
Implementierungen zu verwalten.
Wenn Sie die Website-Administrationskonsole öffnen und durch Ihre Website navigieren, gibt der Browser einen AJAX-Aufruf aus, um das JSON-Objekt zu erhalten, das zum Erstellen der Konsole verwendet wird. Wenn Sie beispielsweise zum /content/geometrixx
-Ordner, wird die folgende Anfrage an den AEM-Server gesendet, um die Konsole zu erstellen:
https://localhost:4502/content/geometrixx.pages.json?start=0&limit=30&predicate=siteadmin
Gehen Sie wie folgt vor, um sicherzustellen, dass der neue Dienst nach der Bereitstellung des Bundles, das ihn enthält, ausgeführt wird:
Zeigen Sie Ihren Browser auf die folgende URL:
https://localhost:4502/content/geometrixx.pages.json?start=0&limit=30&predicate=siteadmin
Die Antwort sollte die neuen Eigenschaften wie folgt anzeigen:
Der letzte Schritt besteht darin, die Knotenstruktur der Websites-Administrationskonsole so anzupassen, dass die neue Eigenschaft für alle Geometrixx durch Überlagern angezeigt wird. /libs/wcm/core/content/siteadmin
. Gehen Sie wie folgt vor:
Erstellen Sie in CRXDE Lite die Knotenstruktur. /apps/wcm/core/content
mit Knoten des Typs sling:Folder
um die Struktur widerzuspiegeln /libs/wcm/core/content
.
Kopieren Sie den Knoten . /libs/wcm/core/content/siteadmin
und fügen Sie sie unten ein /apps/wcm/core/content
.
Kopieren Sie den Knoten . /apps/wcm/core/content/siteadmin/grid/assets
nach /apps/wcm/core/content/siteadmin/grid/geometrixx
und ändert seine Eigenschaften:
Entfernen Sie pageText.
Satz pathRegex nach /content/geometrixx(/.*)?
Dadurch wird die Rasterkonfiguration für alle Geometrixx-Websites aktiv.
Satz storeProxySuffix nach .pages.json
Bearbeiten Sie die mehrwertige Eigenschaft storeReaderFields und fügen Sie den Wert starred
hinzu.
Um die MSM-Funktion zu aktivieren, fügen Sie die folgenden MSM-Parameter zur Eigenschaft "multiString"hinzu storeReaderFields:
Hinzufügen einer starred
node (of type nt:unstructured) unten /apps/wcm/core/content/siteadmin/grid/geometrixx/columns
mit den folgenden Eigenschaften:
dataIndex: starred
vom Typ String
header: Starred
vom Typ String
xtype: gridcolumn
vom Typ String
(optional) Legen Sie die Spalten ab, die nicht angezeigt werden sollen unter /apps/wcm/core/content/siteadmin/grid/geometrixx/columns
/siteadmin
ist ein Vanity-Pfad, der standardmäßig auf /libs/wcm/core/content/siteadmin
.
So leiten Sie dies zu Ihrer Version von siteadmin auf /apps/wcm/core/content/siteadmin
Eigenschaft definieren sling:vanityOrder
, um einen höheren Wert als den für definierten zu haben. /libs/wcm/core/content/siteadmin
. Der Standardwert lautet 300, also sind alle höheren Werte geeignet.
Navigieren Sie zur Websites-Administrationskonsole und navigieren Sie zur Geometrixx-Site:
https://localhost:4502/siteadmin#/content/geometrixx.
Die neue Spalte Starred ist nun verfügbar und zeigt benutzerdefinierte Informationen wie folgt an:
Wenn mehrere Rasterkonfigurationen mit dem durch die Eigenschaft pathRegex definierten Pfad übereinstimmen, wird die erste und nicht die spezifischste Eigenschaft verwendet, was bedeutet, dass die Reihenfolge der Konfigurationen wichtig ist.
Das Ergebnis dieses Tutorials finden Sie im Abschnitt Anpassen der Websites-Administrationskonsole Paket auf Package Share.