다중 필드 컨테이너는 범용 편집기에서 빈 HTML 또는 중복 블록을 생성합니다.
Edge Delivery(xwalk/xcom)용 유니버설 편집기의 다중 필드 컨테이너는 다중 값 컨테이너 필드로 구성된 경우 빈 HTML 요소를 렌더링하거나 블록 태그를 복제합니다. 이 문제를 해결하려면 컨테이너 및 항목 블록 패턴으로 마이그레이션합니다.
설명 description
환경
- 제품: Adobe Experience Manager as a Cloud Service(AEMaaCS) - 사이트
- 시나리오: 범용 편집기가 있는 Edge Delivery(xwalk/xcom)
문제/증상
- 컨테이너 작성 항목에서 필요한 HTML 출력을 생성하지 못해
<div>요소가 비어 있습니다. - 다중 필드 구성 요소에 여러 필드를 추가하면 단일 컨테이너 인스턴스에 대해 중복 블록 HTML이 렌더링됩니다.
- 편집기 보기를 새로 고치면 일시적으로 중복 블록이 제거되지만 이후에 편집한 후 중복이 다시 나타납니다.
해결 방법 resolution
문제를 해결하려면 아래 단계를 따르십시오.
-
중복 또는 빈 마크업 생성을 중단하려면 기존 구성 요소 모델에서 다중 값 컨테이너 필드를 제거합니다.
-
레이아웃 수준 콘텐츠를 유지 관리하려면 상위 컨테이너 블록 모델에 위쪽 및 아래쪽 텍스트와 같은 단순 필드를 유지합니다.
-
전용 항목 블록 모델을 만들고 텍스트 또는 이미지 필드와 같은 각 항목에 대한 개별 필드를 정의합니다. 예제 항목 블록 및 컨테이너 모델 구조:
code language-none { "definitions": [ { "title": "Multifield Container", "id": "multifield-container-component", "plugins": { "xwalk": { "page": { "resourceType": "core/franklin/components/block/v1/block", "template": { "name": "multifield-container-component", "model": "multifield-container-component", "filter": "multifield-container-component" } } } } }, { "title": "Multifield Container Item", "id": "multifield-container-item", "plugins": { "xwalk": { "page": { "resourceType": "core/franklin/components/block/v1/block", "template": { "name": "multifield-container-item", "model": "multifield-container-item" } } } } } ] , "models": [ { "id": "multifield-container-component", "fields": [ { "component": "text", "name": "topText", "label": "Top of container", "valueType": "string" }, { "component": "text", "name": "bottomText", "label": "Bottom of container", "valueType": "string" } ] }, { "id": "multifield-container-item", "fields": [ { "component": "text", "name": "itemText", "label": "Item text", "valueType": "string" }, { "component": "reference", "name": "itemImage", "label": "Item image", "valueType": "string", "multi": false }, { "component": "text", "name": "itemImageAlt", "label": "Item image alt text", "valueType": "string" } ] } ] , "filters": [ { "id": "multifield-container-component", "components": [ "multifield-container-item"] } ] } -
상위 컨테이너 블록 아래에 항목 블록을 허용하도록 범용 편집기에서 필터를 구성합니다. 이 예제에서 필터는 컨테이너가 항목 블록만 허용하는지 확인합니다.
code language-none { "id": "multifield-container-component", "components": [ "multifield-container-item"] }컨테이너 정의는 이 필터
"filter": "multifield-container-component"을(를) 참조해야 하며id: "multifield-container-component"이(가) 있는 필터는 컨테이너가 multifield-container-item만 수락하도록 제한합니다. -
다중 필드 기반 중첩 컨테이너를 항목 블록을 허용하는 하위 블록 슬롯으로 대체하여 상위 구성 요소를 업데이트합니다.
-
프로젝트 설정에 필요한 경우 컨테이너 및 항목 블록 모두에 블록 스크립트를 추가합니다.
-
표준 파이프라인을 통해 업데이트된 모델 및 구성 요소를 빌드하고 배포합니다.
-
컨테이너 블록 내의 필요한 각 항목에 대해 하나의 항목 블록을 추가하여 유니버설 편집기에서 콘텐츠를 다시 작성합니다.
-
출력의 유효성을 검사하여 각 블록이 한 번 렌더링되고 중복되지 않은 깔끔한 HTML이 생성되는지 확인합니다.
모델 동작 - 항목 블록 모델(multifield-container-item)
-
작성된 각 항목은 다음을 사용하여 하나의 블록 인스턴스를 생성합니다.
itemText (text)itemImage (reference)- 일반적으로 참조된 DAM 자산이 이미지인 경우 이미지로 확인됩니다.itemImageAlt (text)- 이미지 대체 텍스트에 사용됨
참고:
- 유니버설 편집기에서 다중 값 컨테이너 필드 패턴(
component: "container",multi: true)을 조기 액세스로 처리하면 Edge Delivery 환경에서 렌더링이 불안정해지고 블록 중복이 발생합니다. multi: true을(를)multi: false(으)로 설정하면 중복이 방지되지만 단일 컨테이너 항목으로 작성이 제한됩니다.- 컨테이너 블록을 항목 블록과 함께 사용하면 지원되는 유니버설 편집기 모델에 맞게 정렬되고 일관되고 안정적인 HTML 렌더링이 보장됩니다.