AEM Screens용 맞춤형 구성 요소 개발 developing-a-custom-component-for-aem-screens
다음 자습서에서는 AEM Screens에 대한 사용자 지정 구성 요소를 만드는 단계를 안내합니다. AEM Screens은 다른 AEM 제품의 많은 기존 디자인 패턴과 기술을 재사용합니다. 이 튜토리얼에서는 AEM Screens용 을 개발할 때 차이점과 특별한 고려 사항을 강조 표시합니다.
개요 overview
이 튜토리얼은 AEM Screens을 처음 사용하는 개발자를 위한 것입니다. 이 자습서에서는 간단한 "Hello World" 구성 요소를 AEM Screens의 시퀀스 채널용으로 빌드했습니다. 대화 상자를 통해 작성자는 표시된 텍스트를 업데이트할 수 있습니다.
사전 요구 사항 prerequisites
이 자습서를 완료하려면 다음 항목이 필요합니다.
-
AEM 6.5 및 최신 Screens 기능 팩.
-
로컬 개발 환경
튜토리얼 단계 및 스크린샷은 CRXDE-Lite 을(를) 사용하여 수행됩니다. IDE를 사용하여 자습서를 완료할 수도 있습니다. IDE를 사용하여 AEM으로 을(를) 개발하는 방법에 대한 자세한 내용은 여기에서 확인하십시오.
프로젝트 설정 project-setup
Screens 프로젝트의 소스 코드는 일반적으로 다중 모듈 Maven 프로젝트로 관리됩니다. 자습서를 신속하게 수행하기 위해 프로젝트가 AEM Project Archetype 13을(를) 사용하여 사전 생성되었습니다. Maven AEM Project Archetype을 사용하여 프로젝트를 만드는 방법에 대한 자세한 내용은 여기에서을(를) 참조하십시오.
- CRX 패키지 관리자를 사용하여 다음 패키지를 다운로드하여 설치하십시오.
파일 가져오기
선택적으로 Eclipse 또는 다른 IDE로 작업하는 경우 아래 소스 패키지를 다운로드합니다. Maven 명령을 사용하여 로컬 AEM 인스턴스에 프로젝트를 배포합니다.
mvn -PautoInstallPackage clean install
HelloWorld SRC Screens We.Retail
시작 프로젝트 실행
-
CRX 패키지 관리자에서 다음 두 패키지가 설치되었는지 확인하십시오.
- screens-weretail-run.ui.content-0.0.1-SNAPSHOT.zip
- screens-weretail-run.ui.apps-0.0.1-SNAPSHOT.zip
Screens
We.Retail
CRX 패키지 관리자를 통해 설치된Ui.Apps
및Ui.Content
패키지를 실행합니다. -
screens-weretail-run.ui.apps 패키지는
/apps/weretail-run
아래에 코드를 설치합니다.이 패키지에는 프로젝트에 대한 사용자 지정 구성 요소를 렌더링하는 코드를 포함합니다. 이 패키지에는 구성 요소 코드와 필요한 모든 JavaScript 또는 CSS가 포함되어 있습니다. 이 패키지는 프로젝트에 필요한 Java™ 코드가 포함된 screens-weretail-run.core-0.0.1-SNAPSHOT.jar 도 임베드합니다.
note note NOTE 이 자습서에서는 Java™ 코드가 작성되지 않습니다. 보다 복잡한 비즈니스 논리가 필요한 경우 Core Java™ 번들을 사용하여 백엔드 Java™을 만들고 배포할 수 있습니다. CRXDE Lite의 ui.apps 코드 표현
Hello World 구성 요소는 자리 표시자입니다. 자습서 과정에서 작성자가 구성 요소에서 표시하는 메시지를 업데이트할 수 있는 기능이 추가되었습니다.
-
screens-weretail-run.ui.content 패키지는 아래에 코드를 설치합니다.
/conf/we-retail-run
/content/dam/we-retail-run
/content/screens/we-retail-run
이 패키지에는 프로젝트에 필요한 시작 콘텐츠 및 구성 구조가 포함되어 있습니다.
/conf/we-retail-run
에We.Retail
실행 프로젝트에 대한 모든 구성이 포함되어 있습니다./content/dam/we-retail-run
에 프로젝트의 시작 디지털 에셋이 포함되어 있습니다./content/screens/we-retail-run
에 Screens 콘텐츠 구조가 포함되어 있습니다. 이러한 모든 경로의 콘텐츠는 주로 AEM에서 업데이트됩니다. 환경(로컬, 개발, 스테이지, 프로덕션) 간의 일관성을 향상시키기 위해 기본 콘텐츠 구조가 소스 제어에 저장되는 경우가 많습니다. -
AEM Screens >
We.Retail
프로젝트 실행으로 이동:AEM 시작 메뉴에서 Screens 아이콘을 클릭합니다.
We.Retail
실행 프로젝트가 표시되는지 확인합니다.
Hello World 구성 요소 만들기 hello-world-cmp
Hello World 구성 요소는 사용자가 화면에 표시할 메시지를 입력할 수 있는 간단한 구성 요소입니다. 구성 요소는 AEM Screens 구성 요소 템플릿 https://github.com/Adobe-Marketing-Cloud/aem-screens-component-template을(를) 기반으로 합니다.
AEM Screens에는 기존 WCM Sites 구성 요소에 대해 반드시 true가 아닌 몇 가지 흥미로운 제한 사항이 있습니다.
- 대부분의 Screens 구성 요소는 대상 디지털 사이니지 장치에서 전체 화면으로 실행해야 합니다
- 슬라이드쇼를 생성하려면 대부분의 Screens 구성 요소를 시퀀스 채널에 포함할 수 있어야 합니다
- 작성을 사용하면 시퀀스 채널에서 개별 구성 요소를 편집할 수 있으므로 전체 화면으로 렌더링하는 것은 적절하지 않습니다
-
CRXDE-Lite
http://localhost:4502/crx/de/index.jsp
(또는 선택한 IDE)에서/apps/weretail-run/components/content/helloworld.
(으)로 이동helloworld
구성 요소에 다음 속성을 추가하십시오.code language-none jcr:title="Hello World" sling:resourceSuperType="foundation/components/parbase" componentGroup="We.Retail Run - Content"
/apps/weretail-run/components/content/helloworld에 대한 속성
Hello World 구성 요소는 foundation, components, parbase 구성 요소를 확장하므로 시퀀스 채널 내에서 적절하게 사용할 수 있습니다.
-
/apps/weretail-run/components/content/helloworld
아래에helloworld.html.
(이)라는 파일 만들기파일을 다음과 같이 채웁니다.
code language-xml <!--/* /apps/weretail-run/components/content/helloworld/helloworld.html */--> <!--/* production: preview authoring mode + unspecified mode (i.e. on publish) */--> <sly data-sly-test.production="${wcmmode.preview || wcmmode.disabled}" data-sly-include="production.html" /> <!--/* edit: any other authoring mode, i.e. edit, design, scaffolding, etc. */--> <sly data-sly-test="${!production}" data-sly-include="edit.html" />
Screens 구성 요소에는 사용 중인 작성 모드에 따라 두 가지 다른 렌더링이 필요합니다.
- 프로덕션: 미리 보기 또는 Publish 모드(wcmmode=disabled)
- 편집: 다른 모든 작성 모드(예: 편집, 디자인, 스캐폴딩, 개발자)에 사용됩니다.
helloworld.html
은(는) 스위치 역할을 하며 활성 상태인 작성 모드를 확인하고 다른 HTL 스크립트로 리디렉션합니다. Screens 구성 요소에서 사용하는 일반적인 규칙은 편집 모드에edit.html
스크립트를 사용하고 프로덕션 모드에production.html
스크립트를 사용하는 것입니다. -
/apps/weretail-run/components/content/helloworld
아래에production.html.
(이)라는 파일 만들기파일을 다음과 같이 채웁니다.
code language-xml <!--/* /apps/weretail-run/components/content/helloworld/production.html */--> <div data-duration="${properties.duration}" class="cmp-hello-world"> <h1 class="cmp-hello-world__message">${properties.message}</h1> </div>
위의 내용은 Hello World 구성 요소의 프로덕션 마크업입니다. 구성 요소가 시퀀스 채널에서 사용되므로
data-duration
특성이 포함됩니다.data-duration
특성은 시퀀스 항목이 표시되는 기간을 알기 위해 시퀀스 채널에서 사용됩니다.구성 요소가 텍스트가 있는
div
및h1
태그를 렌더링합니다.${properties.message}
은(는) 이름이message
인 JCR 속성의 콘텐츠를 출력하는 HTL 스크립트의 일부입니다. 사용자가message
속성 텍스트의 값을 입력할 수 있는 대화 상자가 나중에 만들어집니다.또한 구성 요소에는 BEM(블록 요소 수정자) 표기법이 사용됩니다. BEM은 재사용 가능한 구성 요소를 쉽게 만들 수 있는 CSS 코딩 규칙입니다. BEM은 AEM의 핵심 구성 요소에서 사용하는 표기법입니다.
-
/apps/weretail-run/components/content/helloworld
아래에edit.html.
(이)라는 파일 만들기파일을 다음과 같이 채웁니다.
code language-xml <!--/* /apps/weretail-run/components/content/helloworld/edit.html */--> <!--/* if message populated */--> <div data-sly-test.message="${properties.message}" class="aem-Screens-editWrapper cmp-hello-world"> <p class="cmp-hello-world__message">${message}</p> </div> <!--/* empty place holder */--> <div data-sly-test="${!message}" class="aem-Screens-editWrapper cq-placeholder cmp-hello-world" data-emptytext="${'Hello World' @ i18n, locale=request.locale}"> </div>
위의 내용은 Hello World 구성 요소에 대해 편집된 마크업입니다. 대화 상자 메시지가 채워진 경우 첫 번째 블록에는 구성 요소의 편집된 버전이 표시됩니다.
두 번째 블록은 대화 상자 메시지를 입력하지 않은 경우 렌더링됩니다.
cq-placeholder
및data-emptytext
이(가) 이 경우 자리 표시자로 레이블 Hello World 을(를) 렌더링합니다. 레이블의 문자열은 i18n을 사용하여 다국어로 구성하여 여러 로케일에서 작성할 수 있습니다. -
Hello World 구성 요소에 사용할 Screens 이미지 대화 상자 복사
기존 대화 상자에서 시작한 다음 수정하는 것이 가장 쉽습니다.
- 대화 상자 복사 위치:
/libs/screens/core/components/content/image/cq:dialog
/apps/weretail-run/components/content/helloworld
아래에 대화 상자 붙여넣기
- 대화 상자 복사 위치:
-
Hello World 대화 상자를 업데이트하여 메시지 탭을 포함하세요.
다음과 일치하도록 대화 상자를 업데이트합니다. 최종 대화 상자의 JCR 노드 구조는 아래에 XML로 표시됩니다.
code language-xml <?xml version="1.0" encoding="UTF-8"?> <jcr:root xmlns:sling="https://sling.apache.org/jcr/sling/1.0" xmlns:cq="https://www.day.com/jcr/cq/1.0" xmlns:jcr="https://www.jcp.org/jcr/1.0" xmlns:nt="https://www.jcp.org/jcr/nt/1.0" jcr:primaryType="nt:unstructured" jcr:title="Hello World" sling:resourceType="cq/gui/components/authoring/dialog"> <content jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/coral/foundation/tabs" size="L"> <items jcr:primaryType="nt:unstructured"> <message jcr:primaryType="nt:unstructured" jcr:title="Message" sling:resourceType="granite/ui/components/coral/foundation/fixedcolumns"> <items jcr:primaryType="nt:unstructured"> <column jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/coral/foundation/container"> <items jcr:primaryType="nt:unstructured"> <message jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/coral/foundation/form/textfield" fieldDescription="Message for component to display" fieldLabel="Message" name="./message"/> </items> </column> </items> </message> <sequence jcr:primaryType="nt:unstructured" jcr:title="Sequence" sling:resourceType="granite/ui/components/coral/foundation/fixedcolumns"> <items jcr:primaryType="nt:unstructured"> <column jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/coral/foundation/container"> <items jcr:primaryType="nt:unstructured"> <duration jcr:primaryType="nt:unstructured" sling:resourceType="granite/ui/components/coral/foundation/form/numberfield" defaultValue="" fieldDescription="Amount of time the image is shown in the sequence, in milliseconds" fieldLabel="Duration (milliseconds)" min="0" name="./duration"/> </items> </column> </items> </sequence> </items> </content> </jcr:root>
Message의 텍스트 필드는
message
속성에 저장되며 Duration의 숫자 필드는duration
속성에 저장됩니다. HTL에서${properties.message}
및${properties.duration}
(으)로/apps/weretail-run/components/content/helloworld/production.html
에서 이 두 속성을 모두 참조합니다.Hello World - 완료된 대화 상자
클라이언트측 라이브러리 만들기 clientlibs
클라이언트측 라이브러리는 AEM 구현에 필요한 CSS 및 JavaScript 파일을 구성하고 관리하는 메커니즘을 제공합니다.
AEM Screens 구성 요소는 편집 모드와 미리 보기 프로덕션 모드에서 다르게 렌더링됩니다. 두 개의 클라이언트 라이브러리가 만들어집니다. 하나는 편집 모드용이고 두 번째는 미리보기-프로덕션용입니다.
-
Hello World 구성 요소의 클라이언트측 라이브러리에 대한 폴더를 만듭니다.
/apps/weretail-run/components/content/helloworld
아래에clientlibs
폴더를 만듭니다. -
clientlibs
폴더 아래에서cq:ClientLibraryFolder
형식의shared
노드를 만듭니다. -
공유 클라이언트 라이브러리에 다음 속성을 추가합니다.
-
allowProxy
| 부울 |true
-
categories
| 문자열[] |cq.screens.components
/apps/weretail-run/components/content/helloworld/clientlibs/shared에 대한 속성
categories 속성은 클라이언트 라이브러리를 식별하는 문자열입니다. cq.screens.componentcategory는 편집 모드와 미리보기 프로덕션 모드 모두에서 사용됩니다. 따라서 sharedclientlib에 정의된 모든 CSS 또는 JS는 모든 모드에서 로드됩니다.
가장 좋은 방법은 프로덕션 환경에서
/apps
(으)로 직접 연결되는 경로를 노출해서는 안 됩니다. allowProxy 속성은/etc.clientlibs
접두사를 통해 클라이언트 라이브러리 CSS 및 JS를 참조하도록 합니다. -
-
공유 폴더 아래에 이름이
css.txt
인 파일을 만듭니다.파일을 다음과 같이 채웁니다.
code language-none #base=css styles.less
-
shared
폴더 아래에css
폴더를 만듭니다.css
폴더 아래에 이름이style.less
인 파일을 추가합니다. 이제 클라이언트 라이브러리의 구조는 다음과 같아야 합니다.이 자습서에서는 CSS를 직접 작성하는 대신 LESS를 사용합니다. LESS은(는) CSS 변수, mixin 및 함수를 지원하는 인기 있는 CSS 사전 컴파일러입니다. AEM 클라이언트 라이브러리는 기본적으로 LESS 컴파일을 지원합니다. Sass 또는 기타 사전 컴파일러를 사용할 수 있지만 AEM 외부에서 컴파일해야 합니다.
-
/apps/weretail-run/components/content/helloworld/clientlibs/shared/css/styles.less
을(를) 다음으로 채우기:code language-css /** Shared Styles /apps/weretail-run/components/content/helloworld/clientlibs/shared/css/styles.less **/ .cmp-hello-world { background-color: #fff; &__message { color: #000; font-family: Helvetica; text-align:center; } }
-
shared
클라이언트 라이브러리 폴더를 복사하여 붙여 넣어 이름이production
인 클라이언트 라이브러리를 만듭니다.공유 클라이언트 라이브러리를 복사하여 프로덕션 클라이언트 라이브러리를 만듭니다.
-
프로덕션 클라이언트 라이브러리의
categories
속성을cq.screens.components.production.
(으)로 업데이트하십시오.이렇게 하면 스타일이 미리 보기-프로덕션 모드에 있을 때만 로드됩니다.
/apps/weretail-run/components/content/helloworld/clientlibs/production
의 속성입니다. -
/apps/weretail-run/components/content/helloworld/clientlibs/production/css/styles.less
을(를) 다음으로 채우기:code language-css /** Production Styles /apps/weretail-run/components/content/helloworld/clientlibs/production/css/styles.less **/ .cmp-hello-world { height: 100%; width: 100%; position: fixed; &__message { position: relative; font-size: 5rem; top:25%; } }
위의 스타일은 메시지를 화면 가운데에 표시하지만 프로덕션 모드에서만 표시합니다.
세 번째 클라이언트 라이브러리 범주 cq.screens.components.edit
을(를) 사용하여 구성 요소에 편집 전용 스타일을 추가할 수 있습니다.
cq.screens.components
cq.screens.components.edit
cq.screens.components.production
디자인 페이지 만들기 design-page
AEM Screens은 전역 변경 사항에 정적 페이지 템플릿 및 디자인 구성을 사용합니다. 디자인 구성은 채널에서 Parsys에 대해 허용되는 구성 요소를 구성하는 데 자주 사용됩니다. 가장 좋은 방법은 이러한 구성을 앱별 방법으로 저장하는 것입니다.
We.Retail
실행 프로젝트에 관련된 모든 구성을 저장하는 We.Retail
디자인 실행 페이지 아래에 만들어집니다.
-
CRXDE Lite
http://localhost:4502/crx/de/index.jsp#/apps/settings/wcm/designs
에서/apps/settings/wcm/designs
(으)로 이동합니다. -
디자인 폴더 아래에
cq:Page
형식의we-retail-run
(이)라는 노드를 만듭니다. -
we-retail-run
페이지 아래에서nt:unstructured
형식의jcr:content
노드를 추가합니다.jcr:content
노드에 다음 속성을 추가하십시오.table 0-row-3 1-row-3 2-row-3 3-row-3 이름 유형 값 jcr:title
문자열 We.Retail
실행sling:resourceType
문자열 wcm
,core
,components
,designer
cq:doctype
문자열 html_5 /apps/settings/wcm/designs/we-retail-run
에 페이지를 디자인합니다.
시퀀스 채널 만들기 create-sequence-channel
Hello World 구성 요소는 시퀀스 채널에서 사용됩니다. 구성 요소를 테스트하기 위해 새 시퀀스 채널이 만들어집니다.
-
AEM 시작 메뉴에서 Screens >
We.Retail
실행 >(으)로 이동하고 채널 을 클릭합니다. -
만들기 단추 클릭
- 엔터티 만들기 선택
-
만들기 마법사에서 다음을 수행합니다.
-
템플릿 단계 - 시퀀스 채널 선택
-
속성 단계
- 기본 탭 > 제목 = 유휴 채널
- 채널 탭 > 확인 온라인으로 채널 만들기
-
-
유휴 채널에 대한 페이지 속성을 엽니다.
-
이전 섹션에서 만든 디자인 페이지인
/apps/settings/wcm/designs/we-retail-run
을(를) 가리키도록 디자인 필드를 업데이트합니다./apps/settings/wcm/designs/we-retail-run을 가리키는 디자인 구성
-
새로 만든 유휴 채널을 편집하여 열 수 있습니다.
-
페이지 모드를 디자인 모드로 전환합니다.
-
Parsys에서 렌치 아이콘을 클릭하면 허용된 구성 요소를 구성할 수 있습니다.
-
Screens 그룹과
We.Retail
실행 - 콘텐츠 그룹을 클릭합니다.
-
-
페이지 모드를 편집(으)로 전환하십시오. 이제 Hello World 구성 요소를 페이지에 추가하고 다른 시퀀스 채널 구성 요소와 결합할 수 있습니다.
-
CRXDE Lite
http://localhost:4502/crx/de/index.jsp#/apps/settings/wcm/designs/we-retail-run/jcr%3Acontent/sequencechannel/par
에서/apps/settings/wcm/designs/we-retail-run/jcr:content/sequencechannel/par
(으)로 이동합니다. 이제components
속성에group:Screens
,group:We.Retail Run - Content
이(가) 포함됩니다./apps/settings/wcm/designs/we-retail-run에서 디자인 구성
사용자 지정 처리기용 템플릿 custom-handlers
사용자 지정 구성 요소가 에셋(이미지, 비디오, 글꼴 및 아이콘), 특정 에셋 표현물 또는 클라이언트측 라이브러리(css 및 js)와 같은 외부 리소스를 사용하는 경우 이러한 리소스는 오프라인 구성에 자동으로 추가되지 않습니다. 그 이유는 기본적으로 HTML 마크업만 번들로 제공되기 때문입니다.
플레이어에 다운로드되는 정확한 에셋을 맞춤화하고 최적화할 수 있도록 하기 위해 Adobe은 확장 메커니즘을 제공합니다. 이 메커니즘은 사용자 지정 구성 요소가 AEM Screens의 오프라인 캐싱 논리에 종속성을 노출하기 위한 것입니다.
아래 섹션에서는 사용자 지정 오프라인 리소스 핸들러에 대한 템플릿을 보여줍니다. 특정 프로젝트에 대한 pom.xml
의 최소 요구 사항도 표시됩니다.
package …;
import javax.annotation.Nonnull;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceUtil;
import org.apache.sling.api.resource.ValueMap;
import com.adobe.cq.screens.visitor.OfflineResourceHandler;
@Service(value = OfflineResourceHandler.class)
@Component(immediate = true)
public class MyCustomHandler extends AbstractResourceHandler {
@Reference
private …; // OSGi services injection
/**
* The resource types that are handled by the handler.
* @return the handled resource types
*/
@Nonnull
@Override
public String[] getSupportedResourceTypes() {
return new String[] { … };
}
/**
* Accept the provided resource, visit and traverse it as needed.
* @param resource The resource to accept
*/
@Override
public void accept(@Nonnull Resource resource) {
ValueMap properties = ResourceUtil.getValueMap(resource);
/* You can directly add explicit paths for offline caching using the `visit`
method of the visitor. */
// retrieve a custom property from the component
String myCustomRenditionUrl = properties.get("myCustomRenditionUrl", String.class);
// adding that exact asset/rendition/path to the offline manifest
this.visitor.visit(myCustomRenditionUrl);
/* You can delegate handling for dependent resources so they are also added to
the offline cache using the `accept` method of the visitor. */
// retrieve a referenced dependent resource
String referencedResourcePath = properties.get("myOtherResource", String.class);
ResourceResolver resolver = resource.getResourceResolver();
Resource referencedResource = resolver.getResource(referencedResourcePath);
// let the handler for that resource handle it
if (referencedResource != null) {
this.visitor.accept(referencedResource);
}
}
}
다음 코드는 해당 특정 프로젝트에 대한 pom.xml
의 최소 요구 사항을 제공합니다.
<dependencies>
…
<!-- Felix annotations -->
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.scr.annotations</artifactId>
<version>1.9.0</version>
<scope>provided</scope>
</dependency>
<!-- Screens core bundle with OfflineResourceHandler/AbstractResourceHandler -->
<dependency>
<groupId>com.adobe.cq.screens</groupId>
<artifactId>com.adobe.cq.screens</artifactId>
<version>1.5.90</version>
<scope>provided</scope>
</dependency>
…
</dependencies>
참고 : AEM as a Cloud Service이 있는 경우 해당 특정 프로젝트에 대해 pom.xml
의 종속성 아래에서 을(를) 사용하십시오.
<dependencies>
…
<!-- AEM Screens SDK API with OfflineResourceHandler/AbstractResourceHandler -->
<dependency>
<groupId>com.adobe.aem</groupId>
<artifactId>aem-screens-sdk-api</artifactId>
<version>1.0.8</version>
</dependency>
…
</dependencies>
결합하기 putting-it-all-together
아래 비디오는 완료된 구성 요소와 시퀀스 채널에 구성 요소를 추가하는 방법을 보여 줍니다. 그런 다음 채널은 위치 표시에 추가되고 최종적으로 Screens 플레이어에 할당됩니다.
다른 페이지 또는 조각을 포함하는 사용자 지정 구성 요소에 대한 기타 고려 사항 additional-considerations
사용자 지정 구성 요소가 다른 페이지나 경험 조각을 포함하도록 되어 있고 채널을 다시 게시하지 않고 플레이어가 임베드된 콘텐츠의 변경 사항을 자동으로 선택하려는 경우에는 다음 두 가지 제한을 고려하십시오.
foundation/components/parbase
을(를) 직접 확장하는 대신screens/core/components/content/page
또는screens/core/components/content/experiencefragment
을(를) 확장해야 합니다.- 포함된 콘텐츠를 참조하는 데 사용하는 속성의 이름은
pagePath
이어야 합니다.
이러한 두 개의 Screens 핵심 구성 요소를 사용하면 필요한 종속성(클라이언트측 라이브러리, 글꼴 등)을 번들로 묶을 수 있다는 추가적인 이점이 있습니다. 이 기능은 구성 요소 대화 상자의 오프라인 구성 옵션을 통해 수행됩니다. 그런 다음 이를 위해 사용해야 하는 모든 사용자 지정 오프라인 처리기의 책임이 줄어듭니다. 심지어 애초에 이를 사용할 필요를 완전히 제거할 수도 있습니다.
완료된 코드 finished-code
다음은 자습서의 완성된 코드입니다. screens-weretail-run.ui.apps-0.0.1-SNAPSHOT.zip 및 screens-weretail-run.ui.content-0.0.1-SNAPSHOT.zip 은 컴파일된 AEM 패키지입니다. SRC-screens-weretail-run-0.0.1.zip 은 Maven을 사용하여 배포할 수 있는 컴파일되지 않은 소스 코드입니다.