Personalización de la consola Sitios web (IU clásica)

Añadir una columna personalizada en la consola Siteadmin (siteadmin)

La consola Administración de sitios web se puede ampliar para mostrar columnas personalizadas. La consola se basa en un objeto JSON que se puede ampliar creando un servicio OSGI que implemente la interfaz ListInfoProvider. Este servicio modifica el objeto JSON que se envía al cliente para crear la consola.

Este tutorial paso a paso explica cómo mostrar una nueva columna en la consola Administración de sitios web implementando la interfaz ListInfoProvider. Consiste en los siguientes pasos:

  1. Creación del servicio OSGI e implementación del paquete que lo contiene en el servidor AEM.
  2. (opcional) Prueba del nuevo servicio mediante la emisión de una llamada JSON para solicitar el objeto JSON que se utiliza para crear la consola.
  3. Mostrar la nueva columna extendiendo la estructura de nodos de la consola en el repositorio.
NOTA

Este tutorial también se puede utilizar para ampliar las siguientes consolas de administración:

  • la consola Recursos digitales
  • la consola Community

Creación del servicio OSGI

La interfaz ListInfoProvider define dos métodos:

  • updateListGlobalInfo, para actualizar las propiedades globales de la lista,
  • updateListItemInfo, para actualizar un solo elemento de lista.

Los argumentos para ambos métodos son:

  • request, el objeto de solicitud Sling HTTP asociado,
  • info, el objeto JSON que se va a actualizar, que es, respectivamente, la lista global o el elemento de lista actual,
  • resource, un recurso de Sling.

La implementación de muestra a continuación:

  • Añade una propiedad starred para cada elemento, que es true si el nombre de página inicio con un e y false en caso contrario.

  • Añade una propiedad starredCount, que es global para la lista y contiene el número de elementos de lista con estrella.

Para crear el servicio OSGI:

  1. En CRXDE Lite, cree un paquete.
  2. Añada el código de muestra siguiente.
  3. Cree el paquete.

El nuevo servicio está en funcionamiento.

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"));
        }
    }

}
ATENCIÓN
  • La implementación debe decidir, en función de la solicitud y/o el recurso proporcionados, si debe agregar o no la información al objeto JSON.
  • Si la implementación ListInfoProvider define una propiedad que ya existe en el objeto de respuesta, su valor será sobrescrito por el que proporcione.
    Puede utilizar clasificación de servicio para administrar el orden de ejecución de varias ListInfoProvider implementaciones.

Prueba del nuevo servicio

Cuando abre la consola Administración de sitios web y navega por el sitio, el explorador emite una llamada ajax para obtener el objeto JSON que se utiliza para crear la consola. Por ejemplo, cuando se desplaza a la carpeta /content/geometrixx, se envía la siguiente solicitud al servidor de AEM para crear la consola:

http://localhost:4502/content/geometrixx.pages.json?start=0&limit=30&predicate=siteadmin

Para asegurarse de que el nuevo servicio se está ejecutando después de haber implementado el paquete que lo contiene:

  1. Seleccione la siguiente dirección URL en el navegador:

    http://localhost:4502/content/geometrixx.pages.json?start=0&limit=30&predicate=siteadmin

  2. La respuesta debe mostrar las nuevas propiedades de la siguiente manera:

screen_shot_2012-02-13at163046

Visualización de la nueva columna

El último paso consiste en adaptar la estructura de nodos de la consola Administración de sitios web para mostrar la nueva propiedad de todas las páginas de Geometrixx mediante la superposición de /libs/wcm/core/content/siteadmin. Proceda de la siguiente manera:

  1. En CRXDE Lite, cree la estructura de nodos /apps/wcm/core/content con nodos de tipo sling:Folder para reflejar la estructura /libs/wcm/core/content.

  2. Copie el nodo /libs/wcm/core/content/siteadmin y péguelo debajo de /apps/wcm/core/content.

  3. Copie el nodo /apps/wcm/core/content/siteadmin/grid/assets en /apps/wcm/core/content/siteadmin/grid/geometrixx y cambie sus propiedades:

    • Eliminar pageText

    • Establezca pathRegex en /content/geometrixx(/.*?lang=es)?

      Esto hará que la configuración de cuadrícula esté activa para todos los sitios web de Geometrixx.

    • Establezca storeProxySuffix en .pages.json

    • Edite la propiedad multivalor storeReaderFields y agregue el valor starred.

    • Para activar la funcionalidad de MSM, agregue los siguientes parámetros de MSM a la propiedad de varias cadenas storeReaderFields:

      • msm:isSource
      • msm:isInBlueprint
      • msm:isLiveCopy
  4. Añada un nodo starred (de tipo nt:unestructure) debajo de /apps/wcm/core/content/siteadmin/grid/geometrixx/columns con las siguientes propiedades:

    • dataIndex: starred de tipo String
    • header: Starred de tipo String
    • xtype: gridcolumn de tipo String
  5. (opcional) Suelte las columnas que no desee mostrar en /apps/wcm/core/content/siteadmin/grid/geometrixx/columns

  6. /siteadmin es una ruta de vanidad a la que, de forma predeterminada, apunta /libs/wcm/core/content/siteadmin.

    Para redirigir esto a su versión de siteadmin en /apps/wcm/core/content/siteadmin defina la propiedad sling:vanityOrder para que tenga un valor mayor que el definido en /libs/wcm/core/content/siteadmin. El valor predeterminado es 300, por lo que es adecuado cualquier valor superior.

  7. Vaya a la consola Administración de sitios web y vaya al sitio de Geometrixx:

    http://localhost:4502/siteadmin#/content/geometrixx.

  8. La nueva columna llamada Starred está disponible y muestra la información personalizada de la siguiente manera:

screen_shot_2012-02-14at104602

ATENCIÓN

Si varias configuraciones de cuadrícula coinciden con la ruta solicitada definida por la propiedad pathRegex, se utilizará la primera, y no la más específica, lo que significa que el orden de las configuraciones es importante.

Paquete de muestra

El resultado de este tutorial está disponible en el paquete Personalización de la Consola de administración de sitios web en Package Share.

En esta página

Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free