Numa consulta de lista de conteúdos, pode definir valores de propriedades que sejam calculados quando uma página for executada, para apresentar o conteúdo atualizado recentemente.
A maioria das propriedades dos componentes nos sites são estáticas. O utilizador seleciona ou introduz uma cadeia de caracteres ou um valor fixo para uma das propriedades do componente e essa entrada não é alterada qualquer que seja o momento ou local de execução da página. No entanto, pode definir valores de propriedades que sejam calculados quando a página for executada. Isto é útil para apresentar o conteúdo que foi atualizado recentemente nas consultas de conteúdo. Os utilizadores podem introduzir datas, como "nos últimos 3 dias".
Pode inserir uma expansão Mustache JS para várias propriedades. Os valores referenciados nestas cadeias de caracteres provêm de um modelo executado quando a página é executada. Um modelo pronto a utilizar processa as datas formatadas para as chamadas da API REST de Conteúdo. Pode alargar este modelo com valores adicionais de acordo com quaisquer requisitos do utilizador.
Segue-se um exemplo de uma cadeia de caracteres que pode introduzir para uma propriedade:
Content List component: Additional Query String property: updatedDate gt "{{#content.date}}today - 3 days{{/content.date}}"
Esta entrada Mustache para a data será avaliada em runtime para que o valor devolvido seja alterado dependendo do momento da execução (isto é, expande-se para updatedDate gt "2220181002060000000"
). Desta forma, o utilizador pode criar qualquer cadeia de caracteres de data complexa, em vez de ter de introduzir um valor predefinido.
Propriedades de Componentes Suportadas
As propriedades seguintes suportam a sintaxe de modelo Mustache JS:
Lista de Conteúdo
Cadeia de Caracteres de Consulta Adicional
Por exemplo: updatedDate gt "{{#content.date}}today - 3 days{{/content.date}}"
Título/Parágrafo/Texto
RTF introduzido via CKEditor
Por exemplo: "Content REST API format for date: {{#content.date}}now{{/content.date}}"
Nota:
Sem um modelo customizado para o modelo Mustache, a expansão em Título/Parágrafo/Texto não é muito útil. Contudo, é muito útil para validar o que introduzir na Cadeia de Caracteres de Consulta Adicional porque será avaliado ao alternar entre a edição e a visualização, ficando imediatamente visível.Sintaxe de Componentes Suportada
O objeto content.date
é suportado conforme predefinido. Este assume dois parâmetros principais, today
e now
.
O valor today
assume a hora atual do browser, converte-a para a meia-noite de hoje e, em seguida, converte esse valor para uma hora UTC.
{{#content.date}}today{{/content.date}}
expande-se para o valor do browser de meia-noite de hoje, convertido para o valor UTC e com o formato de data da API REST de Conteúdo. Por exemplo:
2220181008065959999
Depois, pode ser aumentado com:
today +/- [day | week | month | year]
O valor today
também se comporta de modo diferente ao efetuar uma adição ou subtração do mesmo. Se subtrair do mesmo, será utilizada a hora da manhã. Se adicionar ao mesmo, será utilizada a hora da meia-noite. Por exemplo:
{{#content.date}}today - 1 day{{/content.date}}
expande-se para ontem ao início do dia.
{{#content.date}}today + 2 days{{/content.date}}
expande-se para depois de amanhã à meia-noite.
O valor now
assume a hora atual do browser e converte-a para uma hora UTC sem qualquer ajustamento.
{{#content.date}}now{{/content.date}}
expande-se para a hora atual do browser convertida para o valor UTC e com o formato de data da API REST de Conteúdo.
now
também pode ser aumentado com hour
. Assim, tem:
now +/- [hour | day | week | month | year]
{{#content.date}}now + 2 hours{{/content.date}}
- duas horas a partir de agora, convertido para uma hora UTC no formato de data da API REST de Conteúdo
{{#content.date}}now - 1 day{{/content.date}}
- ontem a esta hora do browser, convertida para uma hora UTC no formato de data da API REST de Conteúdo
Utilizar a Sintaxe de Componentes Suportada
Para utilizar a expansão de macros na cadeia de caracteres de consulta adicional, supondo que pretende devolver tudo relativamente às últimas 3 semanas, deve introduzir o seguinte:
updatedDate gt "{{#code.date}}today - 3 weeks{{/code.date}}"
Só a data é devolvida e, por isso, para trabalhar na chamada da API REST de Conteúdo, são acrescentadas aspas quando constrói a cadeia de caracteres de consulta, como faria ao introduzir um valor estático.
MustacheJS
Para a sintaxe, consulte as páginas de modelos Mustache JS em mustache.github.io/mustache.5.html.
Foi feita uma alteração à instância do Mustache que é executada ao expandir cadeias de caracteres. O Mustache fornece uma expansão text
que utiliza {{ }}
e uma expansão html
que utiliza {{{ }}}
. A diferença entre as duas é que a expansão text efetua uma codificação HTML na cadeia de caracteres; isto é, se o valor for expandido para a < b
, o resultado será a < b
. Não é isto que pretende para criar cadeias de caracteres para URLs. Pode dizer ao utilizador para utilizar a expansão HTML, mas é apenas uma sobrecarga e irá gerar mais problemas, como explicar por que motivo é necessário utilizar {{{ }}}
.
Para evitar esta situação, o Mustache foi configurado de modo a não identificar valores com caracteres de escape ao utilizar {{ }}
. Isto significa que {{ }}
e {{{ }}}
têm ambos o mesmo comportamento. Isto também deixa a codificação de qualquer resultado como um exercício para o utilizador, se for necessário.
O Modelo Mustache OOTB
O Mustache requer a aplicação de um modelo ao modelo base para expansão. No exemplo anterior, {{#content.date}}
já está definido e pronto a utilizar, ao passo que uma nova propriedade, tal como {{person}}
, pode ser acrescentada pelo programador. Se o utilizador introduzir um valor no modelo Mustache que não esteja no modelo, o resultado será uma cadeia de caracteres vazia. Assim, no caso de Hello {{person}}
, será expandido para Hello
apenas, a não ser que o programador acrescente person
ao modelo.
O objeto do modelo utilizado é um objeto global chamado SCSMacros
. O programador pode acrescentar quaisquer entradas adicionais neste objeto. O objeto será transmitido ao Mustache quando o modelo for avaliado.
O objeto do modelo pronto a utilizar atualmente só suporta o objeto content.date
:
{ content: { date: <lambda implementation> } }
Modelo Mustache Customizado
Os objetos suportados podem ser melhorados pelo programador com base nos respetivos requisitos. Assim, é possível introduzir um objeto lastTwoDays
e simplificar a expansão para {{lastTwoDays}}
apenas.
Para alargar o modelo de modo a suportar algo como Hello {{person}}
no exemplo anterior, deverá acrescentar o objeto person
a SCSMacros. Terá de o fazer antes de a página ser executada. Pode ser feito na disposição da página acrescentando um identificador script no início. Por exemplo:
<script type="text/javascript"> window.SCSMacros = window.SCSMacros || {}; // define/get the SCSMacros object window.SCSMacros.person = "World"; </script>
Após efetuada esta alteração, o modelo Hello {{person}}
será expandido para: Hello World
.
Se pretender transmitir valores ao objeto (por exemplo, Hello {{#person}}personId{{/person}}
), necessita de implementar um mustache lambda
e incluir e expandir o valor na implementação.
Por exemplo:
<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>
Após efetuada esta alteração, o modelo Hello {{#person}}111{{/person}}
será expandido para Hello Small
e o modelo Hello {{#person}}222{{/person}}
será expandido para Hello Big
.
Nota:
A expansão Mustache é executada de modo síncrono. Se precisar de obter valores assíncronos, estes terão de ser decifrados no modelo antes de tentar executar a expansão Mustache e isto não é suportado atualmente, embora sejam possíveis implementações personalizadas.