컨텐츠 조각 사용자 지정 및 확장

주의

일부 컨텐츠 조각 기능을 사용하려면 AEM 6.4 서비스 팩 2(6.4.2.0)를 적용해야 합니다.

컨텐츠 조각은 표준 자산을 확장합니다.다음을 참조하십시오.

아키텍처

컨텐츠 조각의 기본 구성 부분은 다음과 같습니다.

  • 컨텐츠 조각,
  • 하나 이상의 컨텐츠 요소​로 구성된
  • 하나 이상의 컨텐츠 변형​을 사용할 수 있습니다.

조각 유형에 따라 모델 또는 템플릿도 사용됩니다.

주의

이제 컨텐츠 조각 모델을 사용하여 모든 조각을 만드는 것이 좋습니다.

컨텐츠 조각 모델은 We.Retail의 모든 예에 사용됩니다.

  • 컨텐츠 조각 모델:

    • 구조화된 컨텐츠를 포함하는 컨텐츠 조각을 정의하는 데 사용됩니다.
    • 컨텐츠 조각 모델은 컨텐츠 조각을 만들 때 컨텐츠 조각의 구조를 정의합니다.
    • 조각은 모델을 참조합니다.따라서 모델 변경 사항은 모든 종속 조각에 영향을 줄 수/있을 것입니다.
    • 모델은 데이터 유형을 기반으로 합니다.
    • 새 변형 등을 추가하는 함수는 그에 따라 조각을 업데이트해야 합니다.
    주의

    기존 컨텐츠 조각 모델을 변경하면 종속된 조각이 영향을 받을 수 있습니다.이로 인해 해당 조각에서 고아 속성이 생길 수 있습니다.

  • 컨텐츠 조각 템플릿:

    • 단순 컨텐츠 조각을 정의하는 데 사용됩니다.
    • 템플릿은 컨텐츠 조각을 만들 때 컨텐츠 조각의 (기본, 텍스트 전용) 구조를 정의합니다.
    • 템플릿이 생성되면 조각에 복사됩니다.따라서 템플릿에 대한 추가 변경 사항은 기존 조각에 반영되지 않습니다.
    • 새 변형 등을 추가하는 함수는 그에 따라 조각을 업데이트해야 합니다.
    • 컨텐츠 조각 템플릿은 AEM 에코시스템 내의 다른 템플릿 메커니즘(예: 페이지 템플릿 등)과 다른 방식으로 작동합니다. 따라서 별도로 고려해야 합니다.
    • 템플릿을 기준으로 할 때 컨텐츠의 MIME 유형은 실제 컨텐츠에서 관리됩니다.즉, 각 요소와 변형에는 다른 MIME 유형이 있을 수 있습니다.

자산과 통합

CFM(컨텐츠 조각 관리)은 다음 방법으로 AEM Assets에 포함되어 있습니다.

  • 컨텐츠 조각은 자산입니다.
  • 기존 자산 기능을 사용합니다.
  • 자산(관리 콘솔 등)과 완전히 통합됩니다.

구조화된 컨텐츠 조각을 자산에 매핑

자산 간 구조

구조화된 컨텐츠(즉, 컨텐츠 조각 모델 기반)가 있는 컨텐츠 조각은 단일 자산에 매핑됩니다.

  • 모든 컨텐츠는 자산의 jcr:content/data 노드 아래에 저장됩니다.

    • 요소 데이터는 마스터 하위 노드 아래에 저장됩니다.

      jcr:content/data/master

    • 변형은 변형의 이름을 전달하는 하위 노드 아래에 저장됩니다.

      jcr:content/data/myvariation

    • 각 요소의 데이터는 각 하위 노드에 요소 이름을 사용하는 속성으로 저장됩니다.

      예: text 요소의 컨텐츠는 jcr:content/data/mastertext 속성으로 저장됩니다.

  • 메타데이터 및 관련 컨텐츠는 jcr:content/metadata 아래에 저장됩니다.

    일반 메타데이터로 간주되지 않고 jcr:content에 저장되는 제목 및 설명을 제외하고

단순 컨텐츠 조각을 자산에 매핑

chlimage_1-253

템플릿 기반의 단순 컨텐츠 조각은 기본 자산 및 (선택 사항) 하위 자산으로 구성된 컴포지션에 매핑됩니다.

  • 조각의 모든 비컨텐츠 정보(예: 제목, 설명, 메타데이터, 구조)는 기본 자산에서만 관리됩니다.

  • 조각의 첫 번째 요소의 컨텐츠는 기본 자산의 원래 표현물에 매핑됩니다.

    • 첫 번째 요소의 변형(있는 경우)은 기본 자산의 다른 표현물에 매핑됩니다.
  • 추가 요소(있는 경우)가 기본 자산의 하위 자산에 매핑됩니다.

    • 이러한 추가 요소의 주요 컨텐츠는 각 하위 자산의 원래 표현물에 매핑됩니다.
    • 추가 요소의 다른 변형(해당하는 경우)은 각 하위 자산의 다른 표현물에 매핑됩니다.

자산 위치

표준 자산과 마찬가지로 컨텐츠 조각도 다음 위치에 유지됩니다.

  • /content/dam

자산 권한

자세한 내용은 컨텐츠 조각 - 삭제 고려 사항을 참조하십시오.

기능 통합

  • CFM(컨텐츠 조각 관리) 기능은 자산 코어를 기반으로 구축되지만 가능한 한 독립적인 것이어야 합니다.
  • CFM은 카드/열/목록 보기의 항목에 대한 자체 구현을 제공합니다.이러한 플러그인은 기존 자산 콘텐츠 렌더링 구현에 연결됩니다.
  • 여러 자산 구성 요소가 컨텐츠 조각에 맞게 확장되었습니다.

페이지에서 컨텐츠 조각 사용

주의

이제 컨텐츠 조각 코어 구성 요소가 권장됩니다. 자세한 내용은 핵심 구성 요소 개발 을 참조하십시오.

컨텐츠 조각은 다른 자산 유형처럼 AEM 페이지에서 참조할 수 있습니다. AEM은 컨텐츠 조각 핵심 구성 요소 - 구성 요소를 제공하며, 이 구성 요소를 사용하여 페이지에 컨텐츠 조각을 포함할 수 있습니다. 이 컨텐츠 조각 핵심 구성 요소를 확장할 수도 있습니다.

  • 구성 요소는 fragmentPath 속성을 사용하여 실제 컨텐츠 조각을 참조합니다. fragmentPath 속성은 다른 자산 유형의 속성과 유사한 방식으로 처리됩니다.예를 들어 컨텐츠 조각을 다른 위치로 이동할 때.

  • 구성 요소로 표시할 변형을 선택할 수 있습니다.

  • 또한 출력을 제한하기 위해 다양한 단락을 선택할 수 있습니다.예를 들어 다중 열 출력에 사용할 수 있습니다.

  • 구성 요소는 중간 컨텐츠를 허용합니다.

    • 구성 요소로 다른 자산(이미지 등)을 배치할 수 있습니다. 를 반환합니다.
      • 중간 컨텐츠의 경우 다음을 수행해야 합니다.

        • 불안정한 참고의 가능성을 인식하다.중간 컨텐츠(페이지를 작성할 때 추가됨)에는 옆에 배치된 단락과 고정된 관계가 없으며 중간 컨텐츠의 위치가 상대 위치를 잃게 되기 전에 새 단락(컨텐츠 조각 편집기에서)을 삽입합니다
          • 검색 결과에 긍정 오류가 발생하지 않도록 추가 매개 변수(예: 변형 및 단락 필터)를 고려합니다
노트

컨텐츠 조각 모델:

페이지에서 컨텐츠 조각 모델을 기반으로 한 컨텐츠 조각을 사용할 때 모델이 참조됩니다. 즉, 페이지를 게시할 때 모델이 게시되지 않은 경우 이 플래그가 지정되고 모델이 페이지와 함께 게시될 리소스에 추가됩니다.

컨텐츠 조각 템플릿:

페이지에서 컨텐츠 조각 템플릿을 기반으로 한 컨텐츠 조각을 사용할 때 조각을 만들 때 템플릿이 복사되어 참조가 없습니다.

OSGi 콘솔을 사용한 구성

컨텐츠 조각의 백엔드 구현은 예를 들어 페이지에서 사용되는 조각의 인스턴스를 검색 가능하게 하거나 혼합 미디어 컨텐츠를 관리하는 책임이 있습니다. 이 구현은 조각 렌더링에 사용되는 구성 요소와 렌더링이 매개 변수화되는 방법을 알고 있어야 합니다.

이 매개 변수의 매개 변수는 웹 콘솔에서 OSGi 번들 DAM 컨텐츠 조각 구성​에 대해 구성할 수 있습니다.

  • 리소스 유형

    sling:resourceTypes 목록을 제공하여 컨텐츠 조각 렌더링에 사용되는 구성 요소와 배경 처리를 적용할 위치를 정의할 수 있습니다.

  • 참조 속성

    속성 목록을 구성하여 각 구성 요소에 대해 조각 참조가 저장되는 위치를 지정할 수 있습니다.

노트

속성과 구성 요소 유형 간에는 직접 매핑이 없습니다.

AEM에서는 단락에 있는 첫 번째 속성을 사용합니다. 따라서 속성을 신중하게 선택해야 합니다.

osgi-config

구성 요소가 컨텐츠 조각 백그라운드 처리와 호환되는지 확인하기 위해 따라야 할 몇 가지 지침이 있습니다.

  • 렌더링할 요소를 정의하는 속성의 이름은 element 또는 elementNames여야 합니다.

  • 렌더링할 변형을 정의하는 속성의 이름은 variation 또는 variationName여야 합니다.

  • 여러 요소의 출력이 지원되는 경우( elementNames 을 사용하여 여러 요소를 지정하는 경우) 실제 표시 모드는 displayMode 속성으로 정의됩니다.

    • 값이 singleText(구성된 요소가 하나만 있음)이면 요소가 중간 컨텐츠, 레이아웃 지원 등이 있는 텍스트로 렌더링됩니다. 단일 요소만 렌더링되는 조각의 기본값입니다.
    • 그렇지 않으면 중간 컨텐츠가 지원되지 않고 조각 컨텐츠가 "있는 그대로" 렌더링되는 훨씬 간단한 방법이 사용됩니다("양식 보기"라고 할 수 있음).
  • 조각이 displayMode == singleText(암시적 또는 명시적으로)에 대해 렌더링되는 경우 다음과 같은 추가 속성이 재생됩니다.

    • paragraphScope 모든 단락을 렌더링할지 또는 단락 범위만 렌더링할지를 정의합니다(값: allrange)
    • paragraphScope == range이면 paragraphRange 속성은 렌더링할 단락 범위를 정의합니다

다른 프레임워크와의 통합

컨텐츠 조각은 다음과 통합할 수 있습니다.

  • 번역

    컨텐츠 조각은 AEM 번역 워크플로우와 완전히 통합되었습니다. 아키텍처 수준에서, 이것은 다음을 의미합니다.

    • 컨텐츠 조각의 개별 번역은 실제로 별도의 조각입니다.예:

      • 다른 언어 루트 아래에 있습니다.

        /content/dam/<path>/en/<to>/<fragment>

        /content/dam/<path>/de/<to>/<fragment>

      • 하지만 언어 루트 아래에 정확히 동일한 상대 경로를 공유합니다.

        /content/dam/<path>/en/<to>/<fragment>

        /content/dam/<path>/de/<to>/<fragment>

    • 규칙 기반 경로 외에 컨텐츠 조각의 다른 언어 버전 간에 더 이상 연결할 수 없습니다.언어 변형을 탐색하는 수단을 UI에서 제공하지만 두 개의 개별 조각으로 처리됩니다.

    노트

    AEM 번역 워크플로우는 /content에서 작동합니다.

    • 컨텐츠 조각 모델은 /conf에 있으므로 이러한 번역에 포함되지 않습니다. UI 문자열을 국제화할 수 있습니다.
    • 템플릿이 복사되어 조각을 생성되므로 이것은 암시적입니다.
  • 메타데이터 스키마

  • CFM은 고유한 특정 스키마를 제공합니다.

    /libs/dam/content/schemaeditors/forms/contentfragment

    필요한 경우 확장할 수 있습니다.

  • 각 스키마 양식은 조각 편집기와 통합됩니다.

컨텐츠 조각 관리 API - 서버측

서버측 API를 사용하여 컨텐츠 조각에 액세스할 수 있습니다.다음을 참조하십시오.

com.adobe.cq.dam.cfm
주의

컨텐츠 구조에 직접 액세스하는 대신 서버측 API를 사용하는 것이 좋습니다.

키 인터페이스

다음 세 개의 인터페이스가 시작 지점으로 사용될 수 있습니다.

  • 조각 템플릿

    조각 템플릿

    새 조각을 만들려면 FragmentTemplate.createFragment() 을 사용하십시오.

    Resource templateOrModelRsc = resourceResolver.getResource("...");
    FragmentTemplate tpl = templateOrModelRsc.adaptTo(FragmentTemplate.class);
    ContentFragment newFragment = tpl.createFragment(parentRsc, "A fragment name", "A fragment description.");
    

    이 인터페이스는 다음을 나타냅니다.

    • 컨텐츠 조각을 생성할 컨텐츠 조각 모델 또는 컨텐츠 조각 템플릿
    • 및 (생성 후) 해당 조각의 구조적 정보

    이 정보에는 다음이 포함될 수 있습니다.

    • 기본 데이터 액세스(제목, 설명)

    • 조각 요소에 대한 템플릿/모델에 액세스합니다.

      • 목록 요소 템플릿
      • 주어진 요소에 대한 구조적 정보 가져오기
      • 요소 템플릿에 액세스( ElementTemplate 참조)
    • 조각의 변형에 대한 템플릿에 액세스합니다.

      • 변형 템플릿 나열
      • 주어진 변형에 대한 구조적 정보 가져오기
      • 변형 템플릿에 액세스( VariationTemplate 참조)
    • 초기 관련 컨텐츠 가져오기

    중요한 정보를 나타내는 인터페이스:

    • ElementTemplate

      • 기본 데이터 가져오기(이름, 제목)
      • 초기 요소 콘텐츠 가져오기
    • VariationTemplate

      • 기본 데이터 가져오기(이름, 제목, 설명)
  • 콘텐츠 조각

    컨텐츠 조각

    이 인터페이스를 사용하면 컨텐츠 조각을 추상적으로 사용할 수 있습니다.

    주의

    이 인터페이스를 통해 조각에 액세스하는 것이 좋습니다. 컨텐츠 구조를 직접 변경하지 않아야 합니다.

    인터페이스는 다음 방법을 제공합니다.

    • 기본 데이터 관리(예: 이름 가져오기;get/set title/description)

    • 메타데이터 액세스

    • 액세스 요소:

      • 목록 요소
      • 이름별로 요소 가져오기
      • 새 요소 만들기( Caveze 참조)
      • 요소 데이터에 액세스합니다( ContentElement 참조).
    • 조각에 대해 정의된 목록 변형

    • 새로운 변형을 전체적으로 만들기

    • 관련 컨텐츠 관리:

      • 컬렉션 나열
      • 컬렉션 추가
      • 컬렉션 제거
    • 조각의 모델 또는 템플릿에 액세스

    조각의 주요 요소를 나타내는 인터페이스는 다음과 같습니다.

    • 콘텐츠 요소

      ContentElement
      • 기본 데이터 가져오기(이름, 제목, 설명)

      • 콘텐츠 가져오기/설정

      • 요소의 변형에 액세스합니다.

        • 목록 변형
        • 이름별로 변형 가져오기
        • 새 변형 만들기( Caveze 참조)
        • 변형 제거(Caveze 참조)
        • 변형 데이터에 액세스( ContentVariation 참조)
      • 변형 해결을 위한 바로 가기(지정된 변형을 요소에 사용할 수 없는 경우 몇 가지 추가 구현별 폴백 논리 적용)

    • 컨텐츠 변형

      컨텐츠 변형
      • 기본 데이터 가져오기(이름, 제목, 설명)
      • 콘텐츠 가져오기/설정
      • 마지막 수정된 정보를 기반으로 간단한 동기화

    세 가지 인터페이스( ContentFragment, ContentElement, ContentVariation)는 모두 Versionable 인터페이스를 확장하여 컨텐츠 조각에 필요한 버전 관리 기능을 추가합니다.

    • 요소의 새 버전 만들기
    • 요소의 버전 나열
    • 버전이 지정된 요소의 특정 버전의 콘텐츠를 가져옵니다

채택 - adaptTo() 사용

다음을 적용할 수 있습니다.

  • ContentFragment 다음을 적용할 수 있습니다.

    • Resource - 기본 Sling 리소스기본 개체를 Resource 직접 업데이트해야 ContentFragment 합니다.
    • Asset - 컨텐츠 조각을 Asset 나타내는 DAM 추상화를 Asset 직접 업데이트하려면 개체를 다시 만들어야 ContentFragment 합니다.
  • ContentElement 다음을 적용할 수 있습니다.

    • ElementTemplate - 요소의 구조적 정보에 액세스하기 위한 것입니다.
  • FragmentTemplate 다음을 적용할 수 있습니다.

    • Resource - Resource 복사된 참조 모델 또는 원래 템플릿을 결정합니다.

      • Resource을 통해 변경한 내용이 FragmentTemplate에 자동으로 반영되지 않습니다.
  • Resource 다음을 적용할 수 있습니다.

    • ContentFragment
    • FragmentTemplate

경고

다음과 같이 명시해야 합니다.

  • API는 UI에서 지원하는 기능을 제공하기 위해 구현됩니다.

  • 전체 API는 에서 변경 내용을 자동으로 지속하지 않도록 설계되었습니다(API JavaDoc에 별도로 기술되지 않는 경우). 따라서 항상 각 요청의 리소스 확인자(또는 실제로 사용 중인 해결자)를 커밋해야 합니다.

  • 추가 작업이 필요할 수 있는 작업:

    • 새 요소를 만들거나 제거해도 단순 조각의 데이터 구조가 업데이트되지 않습니다(조각 템플릿을 기반으로 함).
    • ContentElement에서 새 변형을 만들면 데이터 구조가 업데이트되지 않습니다(ContentFragment에서 전역적으로 만듭니다.).
    • 기존 변형을 제거하면 데이터 구조가 업데이트되지 않습니다.

컨텐츠 조각 관리 API - 클라이언트측

주의

AEM 6.4의 경우 클라이언트측 API는 내부입니다.

추가 정보

다음을 참조하십시오.

  • filter.xml

    컨텐츠 조각 관리를 위한 filter.xml이 Assets 코어 컨텐츠 패키지와 겹치지 않도록 구성되어 있습니다.

세션 편집

사용자가 편집기 페이지 중 하나에서 컨텐츠 조각을 열면 편집 세션이 시작됩니다. 사용자가 저장 또는 취소​를 선택하여 편집기를 떠나면 편집 세션이 끝납니다.

요구 사항

편집 세션을 제어하기 위한 요구 사항은 다음과 같습니다.

  • 여러 보기(= HTML 페이지)에 걸쳐 있을 수 있는 컨텐츠 조각을 편집하는 것은 원자여야 합니다.
  • 편집은 transactional;이어야 합니다.편집 세션이 끝날 때 변경 내용을 커밋(저장)하거나 롤백하거나(취소됨)해야 합니다.
  • 에지 사례는 올바르게 처리해야 합니다.이러한 정보에는 사용자가 수동으로 URL을 입력하거나 전역 탐색을 사용하여 페이지를 나가는 경우와 같은 경우가 포함됩니다.
  • 데이터 손실을 방지하기 위해 x분마다(주기적으로 자동 저장)을 사용할 수 있어야 합니다.
  • 두 사용자가 동시에 컨텐츠 조각을 편집하는 경우 서로 다른 사용자의 변경 사항을 덮어쓰지 않아야 합니다.

프로세스

관련 프로세스는 다음과 같습니다.

  • 세션 시작

    • 컨텐츠 조각의 새 버전이 만들어집니다.
    • 자동 저장 이 시작됩니다.
    • 쿠키가 설정됨;이들은 현재 편집된 조각을 정의하며 편집 세션이 열려 있음을 정의합니다.
  • 세션 종료

    • 자동 저장이 중지됩니다.

    • 커밋 시:

      • 마지막으로 수정한 정보가 업데이트됩니다.
      • 쿠키가 제거됩니다.
    • 롤백 시:

      • 편집 세션이 시작될 때 생성된 컨텐츠 조각의 버전이 복원됩니다.
      • 쿠키가 제거됩니다.
  • 편집

    • 모든 변경 사항(자동 저장 포함)은 분리된 보호 영역이 아니라 활성 컨텐츠 조각에서 수행됩니다.
    • 따라서 이러한 변경 사항은 각 컨텐츠 조각을 참조하는 AEM 페이지에 즉시 반영됩니다

작업

가능한 작업은 다음과 같습니다.

  • 페이지 입력

    • 편집 세션이 이미 있는지 확인합니다.를 눌러 각 쿠키를 확인합니다.

      • 있을 경우 현재 편집 중인 컨텐츠 조각에 대해 편집 세션이 시작되었는지 확인합니다

        • 현재 조각이 있으면 세션을 다시 설정합니다.
        • 그렇지 않은 경우 이전에 편집한 컨텐츠 조각에 대한 편집을 취소하고 쿠키를 제거합니다(나중에 편집 세션 없음).
      • 편집 세션이 없는 경우 사용자가 첫 번째 변경 작업을 기다립니다(아래 참조).

    • 컨텐츠 조각이 페이지에서 이미 참조되어 있는지 확인하고, 있는 경우 적절한 정보를 표시합니다.

  • 콘텐츠 변경

    • 사용자가 컨텐츠를 변경하고 편집 세션이 없을 때마다 새 편집 세션이 만들어집니다(세션 시작 참조).
  • 페이지 종료

    • 편집 세션이 있고 변경 사항이 지속되지 않은 경우 손실된 컨텐츠를 사용자에게 알리고 해당 컨텐츠를 페이지에 유지할 수 있도록 양식 확인 대화 상자가 표시됩니다.

예:기존 컨텐츠 조각 액세스

이를 위해 API를 나타내는 리소스를 다음과 같이 조정할 수 있습니다.

com.adobe.cq.dam.cfm.ContentFragment

예:

// first, get the resource
Resource fragmentResource = resourceResolver.getResource("/content/dam/fragments/my-fragment");
// then adapt it
if (fragmentResource != null) {
    ContentFragment fragment = fragmentResource.adaptTo(ContentFragment.class);
    // the resource is now accessible through the API
} 

예:새 컨텐츠 조각 만들기

프로그래밍 방식으로 새 컨텐츠 조각을 생성하려면 다음을 사용해야 합니다.

com.adobe.cq.dam.cfm.ContentFragmentManager#create

예:

Resource templateOrModelRsc = resourceResolver.getResource("...");
FragmentTemplate tpl = templateOrModelRsc.adaptTo(FragmentTemplate.class);
ContentFragment newFragment = tpl.createFragment(parentRsc, "A fragment name", "A fragment description.");

예:자동 저장 간격 지정

자동 저장 간격(초 단위 측정)은 구성 관리자(ConfMgr)를 사용하여 정의할 수 있습니다.

  • 노드:<conf-root>/settings/dam/cfm/jcr:content

  • 속성 이름: autoSaveInterval

  • 유형: Long

  • 기본값:600 (10분);/libs/settings/dam/cfm/jcr:content에 정의되어 있습니다.

5분의 자동 저장 간격을 설정하려면 노드에서 속성을 정의해야 합니다.예:

  • 노드:/conf/global/settings/dam/cfm/jcr:content

  • 속성 이름: autoSaveInterval

  • 유형: Long

  • 값:300 (5분은 300초와 같습니다.)

컨텐츠 조각 템플릿

자세한 내용은 컨텐츠 조각 템플릿을 참조하십시오.

페이지 작성용 구성 요소

자세한 내용은

이 페이지에서는