콘텐츠 목록 질의에서 매크로 확장

콘텐츠 목록 질의에서 페이지를 실행할 때 계산되는 속성 값을 정의하여 최근에 업데이트된 콘텐츠를 표시할 수 있습니다.

사이트 내 구성요소의 속성은 대부분 정적입니다. 사용자는 구성요소의 속성 중 하나에 대해 고정 문자열 또는 값을 선택하거나 입력하며, 페이지가 실행되는 시기나 위치에 관계없이 변경되지 않습니다. 그러나 페이지를 실행할 때 계산되는 속성 값을 정의할 수 있습니다. 이는 콘텐츠 질의에서 최근에 업데이트된 콘텐츠를 표시하는 데 유용합니다. 사용자는 "최근 3일 이내"와 같은 날짜를 입력할 수 있습니다.

Mustache JS 확장을 여러 속성에 삽입할 수 있습니다. 이 문자열에서 참조된 값은 페이지를 실행할 때 실행되는 모델에서 파생됩니다. 미리 정의된 모델은 Content REST API 호출용으로 형식 지정된 날짜를 처리합니다. 이 모델을 추가 값으로 확장하여 사용자 요구사항을 충족시킬 수 있습니다.

속성에 입력할 수 있는 문자열의 예는 다음과 같습니다.

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

이 Mustache 날짜 입력은 런타임에 평가되므로 실행 시간에 따라 반환 값이 변경됩니다(즉, updatedDate gt "2220181002060000000"으로 확장됨). 이와 같이 사용자는 미리 정의된 값을 입력할 필요 없이 복잡한 날짜 문자열을 구성할 수 있습니다.

지원되는 구성요소 속성

다음 속성은 Mustache JS 템플리트 구문을 지원합니다.

  • 콘텐츠 목록

    • 추가 질의 문자열

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

  • 제목/단락/텍스트

    • CKEditor를 통해 입력한 서식 있는 텍스트

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

주:

Mustache 템플리트에 대한 사용자정의 모델이 없으면 제목/단락/텍스트 확장은 별로 쓸모가 없습니다. 그러나 추가 질의 문자열에 입력한 내용은 편집-보기 간을 전환할 때 평가되어 즉시 표시되므로 검증에 매우 유용합니다.

지원되는 구성요소 구문

content.date 객체가 기본적으로 지원됩니다. 두 가지 주요 매개변수로 todaynow를 취합니다.

today 값은 현재 브라우저 시간을 가져와서 오늘밤 자정으로 변환한 후 해당 값을 UTC 시간으로 변환합니다.

  • {{#content.date}}today{{/content.date}}는 오늘밤 자정에 브라우저 값이 UTC 값으로 변환되어 Content REST API 날짜 형식이 지정된 형태로 확장됩니다. 예를 들어, 다음과 같습니다.

    2220181008065959999
  • 다음과 같이 보강할 수 있습니다.

    today +/-  [day | week | month | year]
  • today 값은 더하기 또는 빼기 시 다르게 작동합니다. 빼기 시에는 오전 시간을 사용합니다. 더하기 시에는 자정 시간을 사용합니다. 예를 들어, 다음과 같습니다.

    • {{#content.date}}today - 1 day{{/content.date}}는 하루 시작에 어제로 확장됩니다.

    • {{#content.date}}today + 2 days{{/content.date}}는 자정에 내일 모레로 확장됩니다.

now 값은 현재 브라우저 시간을 가져와서 아무 조정 없이 UTC 시간으로 변환합니다.

  • {{#content.date}}now{{/content.date}}는 현재 브라우저 시간이 UTC 값으로 변환되어 Content REST API 날짜 형식이 지정된 형태로 확장됩니다.

  • nowhour로 보강할 수도 있습니다. 그러면 다음과 같습니다.

    now +/-  [hour | day | week | month | year]
  • 예를 들어, 다음과 같습니다.
    • {{#content.date}}now + 2 hours{{/content.date}} - 지금부터 2시간 후가 UTC 시간으로 변환되어 Content REST API 날짜 형식이 지정된 형태

    • {{#content.date}}now - 1 day{{/content.date}} - 이 브라우저 시간의 어제가 UTC 시간으로 변환되어 Content REST API 날짜 형식이 지정된 형태

지원되는 구성요소 구문 사용

추가 질의 문자열에서 매크로 확장을 사용하려면 최근 3주간 모든 항목을 반환한다고 가정할 때 다음을 입력하십시오.

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

날짜만 반환되므로 Content REST API 호출에 작동하려면 정적 값을 입력할 때와 마찬가지로 질의 문자열을 작성할 때 따옴표가 추가됩니다.

MustacheJS

구문은 mustache.github.io/mustache.5.html에서 Mustache JS 템플리트 페이지를 참조하십시오.

문자열을 확장할 때 실행되는 Mustache 인스턴스에 한 가지 변경사항이 있었습니다. Mustache는 {{ }}를 사용하는 text 확장과 {{{ }}}를 사용하는 html 확장을 모두 제공합니다. 둘 사이의 차이점은 텍스트 확장은 문자열에 HTML 인코딩을 한다는 것입니다. 즉, 값이 a < b로 확장되면 결과는 a &lt; b가 됩니다. 이것은 URL에 문자열을 작성하려는 것이 아닙니다. 사용자에게 HTML 확장을 사용하도록 지시할 수 있지만, 이는 오버헤드일 뿐이며 {{{ }}}를 사용해야 하는 이유를 설명하는 등의 더 많은 문제가 발생합니다.

이 문제를 피하기 위해 Mustache는 {{ }}를 사용할 때 값을 이스케이프하지 않도록 설정되었습니다. 즉, {{ }}{{{ }}}가 똑같이 작동합니다. 또한 필요한 경우 사용자 연습용으로 결과 인코딩을 남겨 둡니다.

OOTB Mustache 모델

Mustache는 확장을 위해 템플리트에 모델을 적용해야 합니다. 앞의 예제에서 {{#content.date}}는 이미 기본적으로 정의되어 있지만, 개발자가 {{person}}과 같은 새 속성을 추가할 수 있습니다. 사용자가 모델에 없는 Mustache 템플리트에 값을 입력하면 결과는 빈 문자열이 됩니다. 따라서 Hello {{person}}의 경우 개발자가 모델에 person을 추가하지 않는 한 단지 Hello 로 확장됩니다.

사용된 모델 객체는 SCSMacros라는 전역 객체입니다. 개발자는 자유롭게 이 객체에 추가 항목을 추가할 수 있습니다. 템플리트를 평가할 때 객체가 Mustache로 전달됩니다.

미리 정의된 모델 객체는 현재 content.date 객체만 지원합니다.

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

사용자정의 Mustache 모델

개발자의 요구사항에 따라 지원되는 객체를 개선할 수 있습니다. 따라서 lastTwoDays 객체를 도입하여 {{lastTwoDays}}까지만 확장을 간소화할 수 있습니다.

앞의 예제에서 Hello {{person}}과 같은 것을 지원하도록 모델을 확장하려면 SCSMacros에 person 객체를 추가해야 합니다. 페이지를 실행하기 전에 이 작업을 수행해야 합니다. 시작 부분에 스크립트 태그를 추가하여 페이지 레이아웃 내에서 수행할 수 있습니다. 예를 들어, 다음과 같습니다.

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

이와 같이 변경하면 Hello {{person}} 템플리트가 Hello World로 확장됩니다.

Hello {{#person}}personId{{/person}}과 같이 객체에 값을 전달하려면 mustache lambda를 구현하고 구현 내에서 값을 래핑하고 확장해야 합니다.

예를 들어, 다음과 같습니다.

<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>

이와 같이 변경하면 Hello {{#person}}111{{/person}} 템플리트가 Hello Small로 확장되고 Hello {{#person}}222{{/person}} 템플리트가 Hello Big으로 확장됩니다.

주:

Mustache 확장은 동기적으로 실행됩니다. 비동기 값을 검색해야 하는 경우 Mustache 확장을 실행하기 전에 모델 내에서 값을 확인해야 하며, 맞춤형 구현이 가능하지만 현재 지원되지 않습니다.