Ampliación de macros en consultas de lista de contenido

En una consulta de lista de contenido, puede definir valores para las propiedades que se calculan cuando se ejecuta una página a fin de mostrar el contenido que se ha actualizado recientemente.

La mayoría de las propiedades de los componentes de los sitios son estáticas. El usuario selecciona o introduce una cadena o un valor fijo para una de las propiedades del componente, el cual no cambia independientemente de dónde o cuándo se ejecute la página. Sin embargo, puede definir valores para las propiedades que se calculan cuando se ejecuta una página. Esto resulta útil para mostrar el contenido que se ha actualizado recientemente en las consultas de contenido. Los usuarios pueden introducir fechas como "en los últimos 3 días".

Puede insertar una ampliación de Mustache JS en varias propiedades. Los valores a los que se hace referencia en estas cadenas se derivan de un modelo que se ejecuta cuando se ejecuta la página. Un modelo listo para usar gestiona fechas con formato para las llamadas a la API de REST de contenido. Puede ampliar este modelo con valores adicionales para satisfacer los requisitos de cualquier usuario.

A continuación se muestra un ejemplo de cadena que puede introducir para una propiedad:

Content List component:
      Additional Query String property:
             updatedDate gt "{{#content.date}}today - 3 days{{/content.date}}"

Esta entrada de Mustache para la fecha se evaluará en tiempo de ejecución de modo que el valor devuelto cambie en función de cuándo se ejecute (es decir, se amplía a updatedDate gt "2220181002060000000"). De este modo, el usuario puede crear cualquier cadena de fecha compleja en lugar de tener que introducir un valor predefinido.

Propiedades de componente admitidas

Las siguientes propiedades admiten la sintaxis de plantilla de Mustache JS:

  • Lista de contenido

    • Cadena de consulta adicional

    • Por ejemplo: updatedDate gt "{{#content.date}}today - 3 days{{/content.date}}"

  • Título/párrafo/texto

    • Texto enriquecido introducido a través de CKEditor

    • Por ejemplo: "Content REST API format for date: {{#content.date}}now{{/content.date}}"

Nota:

Sin un modelo personalizado para la plantilla Mustache, la ampliación en Título/párrafo/texto no resulta muy útil. Sin embargo, sí resulta muy útil para validar lo que se introduzca en la Cadena de consulta adicional porque se evaluará al cambiar entre edición y visualización y será visible de inmediato.

Sintaxis de componente admitida

Se admite el objeto content.date listo para usar. Este toma dos parámetros principales, today y now.

El valor today toma la hora actual del explorador, la convierte a la medianoche de hoy y, a continuación, convierte dicho valor a la hora UTC.

  • {{#content.date}}today{{/content.date}} se amplía al valor del explorador para la medianoche de hoy, se convierte al valor UTC y se le aplica el formato de fecha de la API de REST de contenido. Por ejemplo:

    2220181008065959999
  • A continuación, se puede aumentar con:

    today +/-  [day | week | month | year]
  • El valor today también se comporta de forma diferente al agregar o restar. Si se le resta, utilizará la hora de la mañana. Si se le suma, utilizará la hora de medianoche. Por ejemplo:

    • {{#content.date}}today - 1 day{{/content.date}} se amplía a ayer al inicio del día.

    • {{#content.date}}today + 2 days{{/content.date}} se amplía a pasado mañana a medianoche.

El valor now toma la hora actual del explorador y la convierte a la hora UTC sin realizar ningún ajuste.

  • {{#content.date}}now{{/content.date}} se amplía a la hora actual del explorador convertida al valor UTC y se le aplica el formato de fecha de la API de REST de contenido.

  • now también se puede aumentar con hour. De ese modo, tiene:

    now +/-  [hour | day | week | month | year]
  • Por ejemplo:
    • {{#content.date}}now + 2 hours{{/content.date}}: dos horas a partir de ahora convertidas a la hora UTC a la que se aplica el formato de fecha de la API de REST de contenido

    • {{#content.date}}now - 1 day{{/content.date}}: ayer a esta hora del explorador convertida a la hora UTC a la que se aplica el formato de fecha de la API de REST de contenido

Uso de la sintaxis de componente admitida

Para utilizar la ampliación de macro en la cadena de consulta adicional, suponga que desea que se devuelva todo en las 3 últimas semanas; para ello, debe introducir lo siguiente:

updatedDate gt "{{#code.date}}today - 3 weeks{{/code.date}}"

Solo se devuelve la fecha, por lo que para trabajar en la llamada a la API de REST de contenido, se agregan comillas cuando se construye la cadena de consulta del mismo modo que cuando se introduce un valor estático.

MustacheJS

Para la sintaxis, consulte las páginas de plantillas de Mustache JS en mustache.github.io/mustache.5.html.

Se ha realizado un cambio en la instancia de Mustache que se ejecuta cuando se amplían las cadenas. Mustache proporciona una ampliación text que utiliza {{ }} y una ampliación html que utiliza {{{ }}}. La diferencia entre ambas es que la ampliación de texto realiza una codificación HTML en la cadena; es decir, si el valor se ampliara a a < b, el resultado sería a &lt; b. Esto no es recomendable para construir cadenas para las URL. Puede indicar al usuario que utilice la ampliación HTML, pero esto no es más que una sobrecarga que generará más problemas, como tener que explicarles por qué necesitan utilizar {{{ }}}.

Para evitarlo, se ha configurado Mustache para que no se realice el escape de valores cuando se utilice {{ }}. Esto significa que {{ }} y {{{ }}} tendrán el mismo comportamiento. Esto además deja la codificación de cualquier resultado como un ejercicio para el usuario, si es necesario.

Modelo de Mustache listo para usar

Mustache requiere que se aplique un modelo a la plantilla para la ampliación. En el ejemplo anterior, {{#content.date}} ya está definido listo para usar, aunque el desarrollador puede agregar una nueva propiedad, como {{person}}. Si el usuario introduce un valor en la plantilla de Mustache que no está en el modelo, el resultado será una cadena vacía. Por tanto, en el caso de Hello {{person}}, este se ampliaría a simplemente Hello a menos que el desarrollador agregue person al modelo.

El objeto de modelo utilizado es un objeto global denominado SCSMacros. El desarrollador puede agregar libremente entradas adicionales en este objeto. El objeto se trasferirá a Mustache cuando se evalúe la plantilla.

El objeto de modelo listo para usar solo admite actualmente el objeto content.date:

{   
   content: {
     date: <lambda implementation>
   }
}

Modelo de Mustache personalizado

Los objetos admitidos los puede mejorar el desarrollador en función de sus requisitos. Por lo tanto, puede introducir un objeto lastTwoDays y simplificar la ampliación a solo {{lastTwoDays}}.

Para ampliar el modelo de modo que admita algo parecido a Hello {{person}} en el ejemplo anterior, debe agregar el objeto person a SCSMacros. Debe realizar esta acción antes de que se ejecute la página. Se puede realizar en el diseño de página agregando una etiqueta de script en su inicio. Por ejemplo:

<script type="text/javascript">
window.SCSMacros = window.SCSMacros || {};  // define/get the SCSMacros object
window.SCSMacros.person = "World";
</script>

Una vez realizado este cambio, la plantilla Hello {{person}} se ampliaría a: Hello World.

Si desea transferir valores al objeto (por ejemplo, Hello {{#person}}personId{{/person}}), debe implantar mustache lambda y ajustar y ampliar el valor en la implantación.

Por ejemplo:

<script type="text/javascript">
window.SCSMacros = window.SCSMacros || {};  // define/get the SCSMacros object
//implement "person" as a lambda
window.SCSMacros.person = function () {
  var people = { '111': { firstName: 'Small', lastName: 'World'}, '222': { firstName: 'Big', lastName: 'Universe'} };  
  return function (text, render) {     
     var expandedText = render(text);
     var chosenPerson = people[expandedText] || people['111'];      
     return chosenPerson.firstName;
  }
};
</script>

Una vez realizado este cambio, la plantilla Hello {{#person}}111{{/person}} se ampliaría a Hello Small, y la plantilla Hello {{#person}}222{{/person}} se ampliaría a Hello Big.

Nota:

La expansión de Mustache se ejecuta de forma síncrona. Si necesita recuperar valores asíncronos, estos se tendrán que resolver en el modelo antes de que intente ejecutar la ampliación de Mustache, que en este momento no está soportada, si bien es posible realizar implantaciones a medida.