위젯 사용 및 확장(클래식 UI) using-and-extending-widgets-classic-ui
Adobe Experience Manager의 웹 기반 인터페이스는 AJAX 및 기타 최신 브라우저 기술을 사용하여 작성자가 웹 페이지에서 바로 컨텐츠를 편집하고 서식을 지정할 수 있도록 합니다.
Adobe Experience Manager(AEM)은 ExtJS 가장 중요한 모든 브라우저에서 작동하는 고도로 연마된 사용자 인터페이스 요소를 제공하고 데스크톱 급 UI 경험을 만들 수 있는 위젯 라이브러리입니다.
이러한 위젯은 AEM 내에 포함되어 있으며 AEM 자체에서 사용하는 것 외에도 AEM을 사용하여 빌드된 모든 웹 사이트에서 사용할 수 있습니다.
AEM에서 사용 가능한 모든 위젯에 대한 전체 참고는 위젯 API 설명서 또는 기존 xtype 목록. 또한 ExtJS 프레임워크 사용 방법을 보여주는 많은 예는 Sencha 사이트, 프레임워크의 소유자.
이 페이지에서는 위젯을 사용하고 확장하는 방법에 대한 몇 가지 통찰력을 제공합니다. 먼저 다음 방법을 설명합니다. 페이지에 클라이언트측 코드 포함. 그런 다음 몇 가지 기본 사용 및 확장을 설명하기 위해 만들어진 샘플 구성 요소에 대해 설명합니다. 이러한 구성 요소는 ExtJS 위젯 사용 패키지 패키지 공유.
이 패키지에는 다음 예가 포함됩니다.
- 기본 대화 상자 기본 제공 위젯으로 빌드되었습니다.
- 다이내믹 대화 상자 기본 제공 위젯 및 사용자 정의된 javascript 로직을 사용하여 작성됩니다.
- 대화 상자 기준 사용자 지정 위젯.
- A 트리 패널 지정된 경로 아래에 JCR 트리를 표시합니다.
- A 격자 패널 데이터를 테이블 형식으로 표시합니다.
페이지에 클라이언트측 코드 포함 including-the-client-sided-code-in-a-page
클라이언트측 javascript 및 스타일시트 코드는 클라이언트 라이브러리에 배치해야 합니다.
클라이언트 라이브러리를 만들려면:
-
아래에 노드 만들기
/apps/<project>
다음 속성을 사용합니다.code language-none name="clientlib" jcr:mixinTypes="[mix:lockable]" jcr:primaryType="cq:ClientLibraryFolder" sling:resourceType="widgets/clientlib" categories="[<category-name>]" dependencies="[cq.widgets]"
note note NOTE 참고: <category-name>
는 사용자 지정 라이브러리의 이름입니다(예: ). "cq.extjfrining") 및 는 페이지에 라이브러리를 포함하는 데 사용됩니다. -
아래
clientlib
만들기css
및js
폴더(nt:folder) -
아래
clientlib
만들기css.txt
및js.txt
파일(nt:files). 이러한 .txt 파일은 라이브러리에 포함된 파일을 나열합니다. -
편집
js.txt
: 다음으로 시작해야 합니다.#base=js
' 다음에 CQ 클라이언트 라이브러리 서비스에서 집계할 파일 목록(예:code language-none #base=js components.js exercises.js CustomWidget.js CustomBrowseField.js InsertTextPlugin.js
-
편집
css.txt
: 다음으로 시작해야 합니다.#base=css
' 다음에 CQ 클라이언트 라이브러리 서비스에서 집계할 파일 목록(예:code language-none #base=css components.css
-
아래의
js
폴더에서 라이브러리에 속한 javascript 파일을 배치합니다. -
아래의
css
폴더, 배치.css
파일 및 css 파일에서 사용하는 리소스(예:my_icon.png
).
페이지 구성 요소 jsp에 클라이언트 라이브러리를 포함하려면 다음을 수행하십시오.
-
javascript 코드와 스타일시트를 모두 포함하려면 다음을 수행하십시오.
<ui:includeClientLib categories="<category-name1>, <category-name2>, ..."/>
여기서
<category-nameX>
는 클라이언트측 라이브러리의 이름입니다. -
javascript 코드만 포함하려면 다음을 수행하십시오.
<ui:includeClientLib js="<category-name>"/>
자세한 내용은 <ui:includeclientlib> 태그에 가깝게 포함했습니다.
경우에 따라 클라이언트 라이브러리는 작성 모드에서만 사용할 수 있으며 게시 모드에서 제외해야 합니다. 다음과 같이 수행할 수 있습니다.
if (WCMMode.fromRequest(request) != WCMMode.DISABLED) {
%><ui:includeClientLib categories="cq.collab.blog"/><%
}
샘플 시작하기 getting-started-with-the-samples
이 페이지의 자습서를 따르려면 ExtJS 위젯 사용 로컬 AEM 인스턴스에서 구성 요소를 포함할 샘플 페이지를 만듭니다. 방법은 다음과 같습니다.
-
AEM 인스턴스에서 라는 패키지를 다운로드합니다. ExtJS 위젯 사용(v01) 패키지 공유에서 패키지를 설치합니다. 프로젝트를 생성합니다
extjstraining
아래/apps
로그인합니다. -
스크립트(js)와 스타일시트(css)가 포함된 클라이언트 라이브러리를 geometrixx 페이지 jsp의 헤드 태그에 포함하십시오. 그러면 샘플 구성 요소가 페이지의 새 페이지에 포함됩니다 Geometrixx 분기:
in CRXDE Lite 파일을 엽니다.
/apps/geometrixx/components/page/headlibs.jsp
그리고cq.extjstraining
기존 카테고리<ui:includeClientLib>
태그에 다음 코드를 배치하십시오.%><ui:includeClientLib categories="apps.geometrixx-main, cq.extjstraining"/><%
-
에서 새 페이지 만들기 Geometrixx 아래에 분기
/content/geometrixx/en/products
그것을 불러라 ExtJS 위젯 사용. -
디자인 모드로 전환하고 ExtJS 위젯 사용 Geometrixx 설계
-
편집 모드로 돌아갑니다. 그룹의 구성 요소 ExtJS 위젯 사용 사이드 킥에서 사용할 수 있습니다.
기본 대화 상자 basic-dialogs
대화 상자는 일반적으로 컨텐츠를 편집하는 데 사용되지만 정보만 표시할 수도 있습니다. 전체 대화 상자를 쉽게 볼 수 있는 방법은 json 형식으로 표시에 액세스하는 것입니다. 이렇게 하려면 브라우저를 다음 위치로 이동하십시오.
http://localhost:4502/<path-to-dialog>.-1.json
의 첫 번째 구성 요소 ExtJS 위젯 사용 사이드 킥의 그룹은 1. 대화 상자 기본 사항 및 에는 사용자 정의된 javascript 로직 없이 기본 위젯으로 빌드된 4개의 기본 대화 상자가 포함되어 있습니다. 대화 상자는 아래에 저장됩니다 /apps/extjstraining/components/dialogbasics
. 기본 대화 상자는 다음과 같습니다.
-
전체 대화 상자(
full
node): 3개의 탭이 있는 창이 표시되며, 각 탭에는 2개의 텍스트 필드가 있습니다. -
단일 패널 대화 상자(
singlepanel
node): 2개의 텍스트 필드가 있는 1개의 탭이 있는 창이 표시됩니다. -
다중 패널 대화 상자(
multipanel
node): 전체 대화 상자와 표시되지만 다르게 작성됩니다. -
디자인 대화 상자(
design
node): 2개의 탭이 있는 창이 표시됩니다. 첫 번째 탭에는 텍스트 필드, 드롭다운 메뉴 및 축소 가능한 텍스트 영역이 있습니다. 두 번째 탭에는 4개의 텍스트 필드가 있는 필드 세트와 2개의 텍스트 필드가 있는 축소 가능한 필드가 있습니다.
다음을 포함합니다 1. 대화 상자 기본 사항 샘플 페이지의 구성 요소:
-
추가 1. 대화 상자 기본 사항 구성 요소를 페이지의 ExtJS 위젯 사용 탭에서 다음을 수행합니다. 사이드킥입니다.
-
구성 요소는 제목, 일부 텍스트 및 속성 링크: 링크를 클릭하여 저장소에 저장된 단락의 속성을 표시합니다. 속성을 숨기려면 링크를 다시 클릭합니다.
구성 요소는 다음과 같이 표시됩니다.
예제 1: 전체 대화 상자 example-full-dialog
다음 전체 대화 상자에는 세 개의 탭이 있는 창이 표시되며, 각 탭에는 두 개의 텍스트 필드가 있습니다. 이 대화 상자는 대화 상자 기본 사항 구성 요소. 특징은 다음과 같습니다.
-
노드에 의해 정의됩니다. 노드 유형 =
cq:Dialog
, xtype =dialog
. -
3개의 탭을 표시합니다(노드 유형 =
cq:Panel
). -
각 탭에는 2개의 텍스트 필드가 있습니다(노드 유형 =
cq:Widget
, xtype =textfield
). -
노드에 의해 정의됩니다.
/apps/extjstraining/components/dialogbasics/full
-
를 요청하여 JSON 형식으로 렌더링됩니다.
http://localhost:4502/apps/extjstraining/components/dialogbasics/full.-1.json
대화 상자가 다음과 같이 표시됩니다.
예제 2: 단일 패널 대화 상자 example-single-panel-dialog
다음 단일 패널 대화 상자에는 두 개의 텍스트 필드가 있는 하나의 탭이 있는 창이 표시됩니다. 특징은 다음과 같습니다.
-
1개의 탭을 표시합니다(노드 유형 =
cq:Dialog
, xtype =panel
) -
탭에는 2개의 텍스트 필드가 있습니다(노드 유형 =
cq:Widget
, xtype =textfield
) -
노드에 의해 정의됩니다.
/apps/extjstraining/components/dialogbasics/singlepanel
-
를 요청하여 json 형식으로 렌더링됩니다.
http://localhost:4502/apps/extjstraining/components/dialogbasics/singlepanel.-1.json
-
한 가지 이점 전체 대화 상자 구성이 더 적으면 됩니다.
-
권장 사용: 정보를 표시하거나 몇 개의 필드만 있는 간단한 대화 상자입니다.
단일 패널 대화 상자를 사용하려면
-
대화 상자 바꾸기 대화 상자 기본 사항 구성 요소를 단일 패널 대화 상자:
- in CRXDE Lite, 노드를 삭제합니다.
/apps/extjstraining/components/dialogbasics/dialog
- 클릭 모두 저장 변경 사항을 저장하려면 을 클릭합니다.
- 노드를 복사합니다.
/apps/extjstraining/components/dialogbasics/singlepanel
- 복사된 노드를 아래에 붙여넣습니다.
/apps/extjstraining/components/dialogbasics
- 노드를 선택합니다.
/apps/extjstraining/components/dialogbasics/Copy of singlepanel
이름을 바꾼 후dialog
.
- in CRXDE Lite, 노드를 삭제합니다.
-
구성 요소를 편집합니다. 대화 상자는 다음과 같이 표시됩니다.
예제 3: 다중 패널 대화 상자 example-multi-panel-dialog
다음 다중 패널 대화 상자의 디스플레이는 전체 대화 상자는 다르게 빌드됩니다. 특징은 다음과 같습니다.
-
노드에 의해 정의됩니다(노드 유형 =
cq:Dialog
, xtype =tabpanel
). -
3개의 탭을 표시합니다(노드 유형 =
cq:Panel
). -
각 탭에는 2개의 텍스트 필드가 있습니다(노드 유형 =
cq:Widget
, xtype =textfield
). -
노드에 의해 정의됩니다.
/apps/extjstraining/components/dialogbasics/multipanel
-
를 요청하여 json 형식으로 렌더링됩니다.
http://localhost:4502/apps/extjstraining/components/dialogbasics/multipanel.-1.json
-
한 가지 이점 전체 대화 상자 그것은 구조가 단순하다는 것입니다.
-
권장 사용: 다중 탭 대화 상자
다중 패널 대화 상자를 사용하려면
-
대화 상자 바꾸기 대화 상자 기본 사항 구성 요소를 다중 패널 대화 상자:
다음에 설명된 단계를 수행합니다. 예제 2: 단일 패널 대화 상자
-
구성 요소를 편집합니다. 대화 상자는 다음과 같이 표시됩니다.
예제 4: 리치 대화 상자 example-rich-dialog
다음 리치 대화 상자에는 두 개의 탭이 있는 창이 표시됩니다. 첫 번째 탭에는 텍스트 필드, 드롭다운 메뉴 및 축소 가능한 텍스트 영역이 있습니다. 두 번째 탭에는 네 개의 텍스트 필드가 있는 필드 세트와 두 개의 텍스트 필드가 있는 축소 가능한 필드가 있습니다. 특징은 다음과 같습니다.
-
노드에 의해 정의됩니다(노드 유형 =
cq:Dialog
, xtype =dialog
). -
2개의 탭을 표시합니다(노드 유형 =
cq:Panel
). -
첫 번째 탭에는
dialogfieldset
위젯textfield
그리고selection
3개의 옵션이 있는 위젯 및 축소 가능한 위젯dialogfieldset
사용textarea
위젯. -
두 번째 탭에는
dialogfieldset
4인 위젯textfield
위젯 및 축소 가능dialogfieldset
2개textfield
위젯. -
노드에 의해 정의됩니다.
/apps/extjstraining/components/dialogbasics/rich
-
를 요청하여 json 형식으로 렌더링됩니다.
http://localhost:4502/apps/extjstraining/components/dialogbasics/rich.-1.json
를 사용하려면 리치 대화 상자:
-
대화 상자 바꾸기 대화 상자 기본 사항 구성 요소를 리치 대화 상자:
다음에 설명된 단계를 수행합니다. 예제 2: 단일 패널 대화 상자
-
구성 요소를 편집합니다. 대화 상자는 다음과 같이 표시됩니다.
다이내믹 대화 상자 dynamic-dialogs
의 두 번째 구성 요소 ExtJS 위젯 사용 사이드 킥의 그룹은 2. 다이내믹 대화 상자 및 에는 기본 제공 위젯과 사용자 지정된 javascript 로직. 대화 상자는 아래에 저장됩니다 /apps/extjstraining/components/dynamicdialogs
. 다이내믹 대화 상자는 다음과 같습니다.
- 탭 전환 대화 상자(
switchtabs
node): 두 개의 탭이 있는 창이 표시됩니다. 첫 번째 탭에는 다음 세 가지 옵션이 있는 라디오 선택 사항이 있습니다. 옵션을 선택하면 옵션과 관련된 탭이 표시됩니다. 두 번째 탭에는 두 개의 텍스트 필드가 있습니다. - 임의 대화 상자(
arbitrary
node): 탭이 한 개 있는 창이 표시됩니다. 탭에는 자산을 삭제하거나 업로드하는 필드와 포함 페이지에 대한 일부 정보와 자산을 참조하는 경우 자산에 대한 정보를 표시하는 필드가 있습니다. - 필드 전환 대화 상자(
togglefield
node): 탭이 한 개 있는 창이 표시됩니다. 탭에는 다음과 같은 확인란이 있습니다. 이 필드를 선택하면 두 개의 텍스트 필드가 있는 필드 세트가 표시됩니다.
를 포함하려면 2. 다이내믹 대화 상자 샘플 페이지의 구성 요소:
-
추가 2. 다이내믹 대화 상자 구성 요소를 페이지의 ExtJS 위젯 사용 탭에서 다음을 수행합니다. 사이드킥입니다.
-
구성 요소는 제목, 일부 텍스트 및 속성 링크: 저장소에 저장된 단락의 속성을 표시하려면 을(를) 클릭합니다. 속성을 숨기려면 다시 클릭합니다.
구성 요소는 다음과 같이 표시됩니다.
예제 1: 탭 전환 대화 상자 example-switch-tabs-dialog
다음 탭 전환 대화 상자에는 두 개의 탭이 있는 창이 표시됩니다. 첫 번째 탭에는 다음 세 가지 옵션이 있는 라디오 선택 사항이 있습니다. 옵션을 선택하면 옵션과 관련된 탭이 표시됩니다. 두 번째 탭에는 두 개의 텍스트 필드가 있습니다.
주요 특징은 다음과 같습니다.
-
노드에 의해 정의됩니다(노드 유형 =
cq:Dialog
, xtype =dialog
). -
2개의 탭을 표시합니다(노드 유형 =
cq:Panel
): 1개의 선택 탭인 두 번째 탭은 첫 번째 탭(3개 옵션)의 선택 사항에 따라 다릅니다. -
3개의 선택적 탭이 있습니다(노드 유형 =
cq:Panel
). 각각에는 두 개의 텍스트 필드가 있습니다(노드 유형 =cq:Widget
, xtype =textfield
). 한 번에 하나의 선택적 탭만 표시됩니다. -
는
switchtabs
노드 위치:/apps/extjstraining/components/dynamicdialogs/switchtabs
-
를 요청하여 json 형식으로 렌더링됩니다.
http://localhost:4502/apps/extjstraining/components/dynamicdialogs/switchtabs.-1.json
로직은 다음과 같이 이벤트 리스너 및 Javascript 코드를 통해 구현됩니다.
-
대화 상자 노드에는 "
beforeshow
대화 상자가 표시되기 전에 선택적 탭을 모두 숨기는 리스너:beforeshow="function(dialog){Ejst.x2.manageTabs(dialog.items.get(0));}"
dialog.items.get(0)
선택 패널과 3개의 선택적 패널이 포함된 탭 패널을 가져옵니다. -
다음
Ejst.x2
개체는exercises.js
파일 위치:/apps/extjstraining/clientlib/js/exercises.js
-
에서
Ejst.x2.manageTabs()
메서드, 값index
-1이면 모든 선택적 탭이 숨겨집니다(1에서 3으로 이동). -
선택 탭에는 2개의 리스너가 있습니다. 대화 상자가 로드될 때 선택한 탭을 표시하는 탭("
loadcontent
선택 영역이 변경될 때 선택한 탭을 표시하는 " 이벤트" 및selectionchanged
" event):loadcontent="function(field,rec,path){Ejst.x2.showTab(field);}"
selectionchanged="function(field,value){Ejst.x2.showTab(field);}"
-
에서
Ejst.x2.showTab()
메서드:field.findParentByType('tabpanel')
는 모든 탭이 포함된 탭 패널(field
선택 위젯을 나타냅니다)field.getValue()
선택 항목의 값을 가져옵니다(예: ). tab2Ejst.x2.manageTabs()
선택한 탭을 표시합니다. -
각 선택적 탭에는 ""에서 탭을 숨기는 리스너가 있습니다.
render
" 이벤트:render="function(tab){Ejst.x2.hideTab(tab);}"
-
에서
Ejst.x2.hideTab()
메서드:tabPanel
는 모든 탭을 포함하는 탭 패널입니다index
은 선택적 탭의 색인입니다tabPanel.hideTabStripItem(index)
탭을 숨깁니다.
다음과 같이 표시됩니다.
예제 2: 임의 대화 상자 example-arbitrary-dialog
대화 상자에 기본 구성 요소의 콘텐츠가 표시되는 경우가 많습니다. 여기에 설명된 대화 상자를 임의 대화 상자에서 다른 구성 요소에서 컨텐츠를 가져옵니다.
다음 임의 대화 상자에 탭이 한 개 있는 창이 표시됩니다. 탭에는 다음과 같은 두 개의 필드가 있습니다. 자산을 삭제하거나 업로드하는 방법과 포함된 페이지에 대한 일부 정보와 자산을 참조한 경우 자산에 대한 정보를 표시하는 것입니다.
주요 특징은 다음과 같습니다.
-
노드에 의해 정의됩니다(노드 유형 =
cq:Dialog
, xtype =dialog
). -
1개의 탭 패널 위젯을 표시합니다(노드 유형 =
cq:Widget
, xtype =tabpanel
) with 1 panel (node type = )cq:Panel
) -
패널에 smartfile 위젯(노드 유형 =
cq:Widget
, xtype =smartfile
) 및 ownerdraw 위젯(노드 유형 =cq:Widget
, xtype =ownerdraw
) -
는
arbitrary
노드 위치:/apps/extjstraining/components/dynamicdialogs/arbitrary
-
를 요청하여 json 형식으로 렌더링됩니다.
http://localhost:4502/apps/extjstraining/components/dynamicdialogs/arbitrary.-1.json
로직은 다음과 같이 이벤트 리스너 및 Javascript 코드를 통해 구현됩니다.
-
소유자 그리기 위젯에는 "
loadcontent
" 컨텐츠가 로드될 때 스마트 파일 위젯에서 참조하는 자산과 구성 요소가 포함된 페이지에 대한 정보를 표시하는 수신기입니다.loadcontent="function(field,rec,path){Ejst.x2.showInfo(field,rec,path);}"
field
소유자 그리기 개체로 설정되어 있습니다.path
은 구성 요소의 컨텐츠 경로(예: /content/geometrixx/en/products/triangle/ui-tutorial/jcr:content/par/dynamicdialogs) -
다음
Ejst.x2
개체는exercises.js
파일 위치:/apps/extjstraining/clientlib/js/exercises.js
-
에서
Ejst.x2.showInfo()
메서드:pagePath
은 구성 요소가 포함된 페이지의 경로입니다pageInfo
는 json 형식으로 페이지 속성을 나타냅니다.reference
는 참조된 자산의 경로입니다metadata
는 json 형식으로 자산의 메타데이터를 나타냅니다.ownerdraw.getEl().update(html);
대화 상자에 생성된 html을 표시합니다
를 사용하려면 임의 대화 상자:
-
대화 상자 바꾸기 동적 대화 상자 구성 요소를 임의 대화 상자:
다음에 설명된 단계를 수행합니다. 예제 2: 단일 패널 대화 상자
-
구성 요소를 편집합니다. 대화 상자는 다음과 같이 표시됩니다.
예제 3: 필드 전환 대화 상자 example-toggle-fields-dialog
다음 필드 전환 대화 상자에 탭이 한 개 있는 창이 표시됩니다. 탭에는 다음과 같은 확인란이 있습니다. 이 필드를 선택하면 두 개의 텍스트 필드가 있는 필드 세트가 표시됩니다.
주요 특징은 다음과 같습니다.
-
노드에 의해 정의됩니다(노드 유형 =
cq:Dialog
, xtype =dialog
). -
1개의 탭 패널 위젯을 표시합니다(노드 유형 =
cq:Widget
, xtype =tabpanel
) with 1 panel (node type = )cq:Panel
). -
패널에 선택/확인란 위젯(노드 유형 =)이 있습니다
cq:Widget
, xtype =selection
, 유형 =checkbox
) 및 축소 가능한 dialogfieldset 위젯(노드 유형 =cq:Widget
, xtype =dialogfieldset
) 기본적으로 숨겨지는 텍스트필드 위젯(노드 유형 =)이 2개 있는cq:Widget
, xtype =textfield
). -
는
togglefields
노드 위치:/apps/extjstraining/components/dynamicdialogs/togglefields
-
를 요청하여 json 형식으로 렌더링됩니다.
http://localhost:4502/apps/extjstraining/components/dynamicdialogs/togglefields.-1.json
로직은 다음과 같이 이벤트 리스너 및 Javascript 코드를 통해 구현됩니다.
-
선택 탭에는 2개의 리스너가 있습니다. 컨텐츠가 로드될 때 dialogfieldset을 표시하는 것("
loadcontent
선택 사항이 변경될 때 dialogfieldset(" 이벤트) 및 dialogfieldset를 표시하는 항목selectionchanged
" event):loadcontent="function(field,rec,path){Ejst.x2.toggleFieldSet(field);}"
selectionchanged="function(field,value){Ejst.x2.toggleFieldSet(field);}"
-
다음
Ejst.x2
개체는exercises.js
파일 위치:/apps/extjstraining/clientlib/js/exercises.js
-
에서
Ejst.x2.toggleFieldSet()
메서드:box
은 선택 객체입니다panel
는 선택 항목 및 대화 상자 필드세트 위젯이 포함된 패널입니다fieldSet
dialogfieldset 개체입니다.show
은 선택 영역의 값입니다(true 또는 false).- '
show
' dialogfieldset이 표시되거나 표시되지 않습니다.
를 사용하려면 필드 전환 대화 상자:
-
대화 상자 바꾸기 동적 대화 상자 구성 요소를 필드 전환 대화 상자:
다음에 설명된 단계를 수행합니다. 예제 2: 단일 패널 대화 상자
-
구성 요소를 편집합니다. 대화 상자는 다음과 같이 표시됩니다.
사용자 지정 위젯 custom-widgets
AEM과 함께 제공되는 기본 위젯은 대부분의 사용 사례를 다룹니다. 그러나 프로젝트별 요구 사항을 처리하기 위해 사용자 지정 위젯을 만들어야 하는 경우가 있을 수 있습니다. 사용자 지정 위젯은 기존 위젯을 확장하여 만들 수 있습니다. 이러한 사용자 지정을 시작하는 데 도움이 되는 ExtJS 위젯 사용 패키지에는 세 개의 서로 다른 사용자 지정 위젯을 사용하는 세 개의 대화 상자가 들어 있습니다.
-
다중 필드 대화 상자(
multifield
node) 한 개의 탭이 있는 창을 표시합니다. 탭에는 두 개의 필드가 있는 사용자 지정된 다중 필드 위젯이 있습니다. 두 가지 옵션과 텍스트 필드가 포함된 드롭다운 메뉴. 기본적으로multifield
위젯(텍스트 필드만 있음)에는multifield
위젯. -
트리 찾아보기 대화 상자(
treebrowse
node) 경로 찾아보기 위젯이 포함된 하나의 탭이 있는 창을 표시합니다. 화살표를 클릭하면 계층을 탐색하고 항목을 선택할 수 있는 창이 열립니다. 그런 다음 항목의 경로가 경로 필드에 추가되고 대화 상자가 닫히면 유지됩니다. -
리치 텍스트 편집기 플러그인 기반 대화 상자(
rteplugin
노드) 사용자 지정 단추를 리치 텍스트 편집기에 추가하여 기본 텍스트에 일부 사용자 지정 텍스트를 삽입합니다. 이것은richtext
RTE(위젯) 및 RTE 플러그인 메커니즘을 통해 추가된 사용자 지정 기능입니다.
사용자 지정 위젯 및 플러그인은 3. 사용자 지정 위젯 의 ExtJS 위젯 사용 패키지. 샘플 페이지에 이 구성 요소를 포함하려면 다음을 수행하십시오.
-
추가 3. 사용자 지정 위젯 구성 요소를 페이지의 ExtJS 위젯 사용 탭에서 다음을 수행합니다. 사이드킥입니다.
-
구성 요소에는 제목, 텍스트 및 속성 링크: 저장소에 저장된 단락의 속성입니다. 를 다시 클릭하면 속성이 표시되지 않습니다.
구성 요소는 다음과 같이 표시됩니다.
예제 1: 사용자 지정 다중 필드 위젯 example-custom-multifield-widget
다음 사용자 지정 다중 필드 위젯 기반 대화 상자에는 한 개의 탭이 있는 창이 표시됩니다. 탭에는 필드가 하나인 표준 위젯과 달리, 두 개의 필드가 있는 사용자 지정된 다중 필드 위젯이 있습니다. 두 가지 옵션과 텍스트 필드가 포함된 드롭다운 메뉴.
다음 사용자 지정 다중 필드 위젯 기반 대화 상자:
-
노드에 의해 정의됩니다(노드 유형 =
cq:Dialog
, xtype =dialog
). -
1개의 탭 패널 위젯을 표시합니다(노드 유형 =
cq:Widget
, xtype =tabpanel
) 패널을 포함하는 경우(노드 유형 =cq:Widget
, xtype =panel
). -
패널에
multifield
위젯(노드 유형 =cq:Widget
, xtype =multifield
). -
다음
multifield
위젯에 fieldconfig (node type =nt:unstructured
, xtype =ejstcustom
, optionsProvider =Ejst.x3.provideOptions
) 사용자 지정 xtype ' 을 기반으로 합니다.ejstcustom
':-
``fieldconfig
'은(는) [
CQ.form.MultiField`](https://helpx.adobe.com/experience-manager/6-4/sites/developing/using/reference-materials/widgets-api/index.html?class=CQ.form.MultiField) 개체. -
``optionsProvider
'은(는)
ejstcustom위젯. 이 ID는
Ejst.x3.provideOptions에 정의된 메서드
exercises.js` at:/apps/extjstraining/clientlib/js/exercises.js
및 은 2개의 옵션을 반환합니다.
-
-
는
multifield
노드 위치:/apps/extjstraining/components/customwidgets/multifield
-
를 요청하여 json 형식으로 렌더링됩니다.
http://localhost:4502/apps/extjstraining/components/customwidgets/multifield.-1.json
사용자 지정 다중 필드 위젯(xtype = ejstcustom
):
-
라는 javascript 개체입니다
Ejst.CustomWidget
. -
에 정의되어 있습니다.
CustomWidget.js
javascript 파일 위치:/apps/extjstraining/clientlib/js/CustomWidget.js
-
를 확장합니다.
CQ.form.CompositeField
위젯. -
다음 3개의 필드가 있습니다.
hiddenField
(텍스트 필드),allowField
(ComboBox) 및otherField
(텍스트 필드) -
무시
CQ.Ext.Component#initComponent
3개의 필드를 추가하려면allowField
is CQ.form.Selection 'select' 유형의 개체입니다. optionsProvider는 대화 상자에 정의된 CustomWidget의 optionsProvider 구성으로 인스턴스화된 Selection 개체의 구성입니다otherField
is CQ.Ext.form.TextField 개체
-
메서드를 재정의합니다.
setValue
,getValue
및getRawValue
의 CQ.form.CompositeField 형식으로 CustomWidget의 값을 설정하고 검색하려면 다음을 수행합니다.<allowField value>/<otherField value>, e.g.: 'Bla1/hello'
. -
자신을 '(으)로 등록
ejstcustom
` xtype:CQ.Ext.reg('ejstcustom', Ejst.CustomWidget);
다음 사용자 지정 다중 필드 위젯 기반 대화 상자는 다음과 같이 표시됩니다.
예제 2: 사용자 지정 검색 위젯 example-custom-treebrowse-widget
사용자 지정 트리찾아보기 위젯 기반 대화 상자에는 사용자 지정 경로 찾아보기 위젯이 포함된 하나의 탭이 있는 창이 표시됩니다. 화살표를 클릭하면 계층을 탐색하고 항목을 선택할 수 있는 창이 열립니다. 그런 다음 항목의 경로가 경로 필드에 추가되고 대화 상자가 닫히면 유지됩니다.
사용자 지정 트리찾아보기 대화 상자:
-
노드에 의해 정의됩니다(노드 유형 =
cq:Dialog
, xtype =dialog
). -
1개의 탭 패널 위젯을 표시합니다(노드 유형 =
cq:Widget
, xtype =tabpanel
) 패널을 포함하는 경우(노드 유형 =cq:Widget
, xtype =panel
). -
패널에 사용자 지정 위젯이 있습니다(노드 유형 =
cq:Widget
, xtype =ejstbrowse
) -
는
treebrowse
노드 위치:/apps/extjstraining/components/customwidgets/treebrowse
-
를 요청하여 json 형식으로 렌더링됩니다.
http://localhost:4502/apps/extjstraining/components/customwidgets/treebrowse.-1.json
사용자 지정 트리찾아보기 위젯(xtype = ejstbrowse
):
-
라는 javascript 개체입니다
Ejst.CustomWidget
. -
에 정의되어 있습니다.
CustomBrowseField.js
javascript 파일 위치:/apps/extjstraining/clientlib/js/CustomBrowseField.js
-
라는 찾아보기 창을 정의합니다.
browseWindow
. -
무시
CQ.Ext.form.TriggerField
화살표를 클릭하면 찾아보기 창을 표시합니다. -
을(를) 정의합니다.
CQ.Ext.tree.TreePanel
개체:- 에 등록된 서블릿을 호출하여 데이터를 가져옵니다
/bin/wcm/siteadmin/tree.json
. - 루트는 " 입니다.
apps/extjstraining
".
- 에 등록된 서블릿을 호출하여 데이터를 가져옵니다
-
을(를) 정의합니다.
window
개체 (CQ.Ext.Window
):- 사전 정의된 패널 기반.
- 다음 포함 확인 선택한 경로의 값을 설정하고 패널을 숨기는 단추입니다.
-
창문이 아래쪽에 고정되어 있다 경로 필드.
-
선택한 경로가 찾아보기 필드에서 창의 창으로 전달됩니다
show
이벤트. -
자신을 '(으)로 등록
ejstbrowse
` xtype:CQ.Ext.reg('ejstbrowse', Ejst.CustomBrowseField);
를 사용하려면 사용자 지정 트리찾아보기 위젯 기반 대화 상자:
-
대화 상자 바꾸기 사용자 지정 위젯 구성 요소를 사용자 지정 트리찾아보기 대화 상자:
-
구성 요소를 편집합니다. 대화 상자는 다음과 같이 표시됩니다.
예제 3: 리치 텍스트 편집기(RTE) 플러그인 example-rich-text-editor-rte-plug-in
다음 리치 텍스트 편집기(RTE) 플러그인 기반 대화 상자는 대괄호 안에 사용자 지정 텍스트를 삽입할 수 있는 사용자 지정 단추가 있는 리치 텍스트 편집기 기반 대화 상자입니다. 사용자 지정 텍스트는 일부 서버측 논리(이 예에서 구현되지 않음)에서 구문 분석할 수 있습니다. 예를 들어 지정된 경로에 정의된 일부 텍스트를 추가할 수 있습니다.
다음 RTE 플러그인 기반 대화 상자:
-
은 다음에 있는 rteplugin 노드에 의해 정의됩니다.
/apps/extjstraining/components/customwidgets/rteplugin
-
를 요청하여 json 형식으로 렌더링됩니다.
http://localhost:4502/apps/extjstraining/components/customwidgets/rteplugin.-1.json
-
다음
rtePlugins
노드에 하위 노드가 있습니다.inserttext
(노드 유형 =nt:unstructured
) 플러그인의 이름을 따라 이름이 지정됩니다. 이 속성에는features
는 RTE에서 사용할 수 있는 플러그인 기능 중 하나를 정의합니다.
RTE 플러그인:
-
라는 javascript 개체입니다
Ejst.InsertTextPlugin
. -
에 정의되어 있습니다.
InsertTextPlugin.js
javascript 파일 위치:/apps/extjstraining/clientlib/js/InsertTextPlugin.js
-
를 확장합니다.
CQ.form.rte.plugins.Plugin
개체. -
다음 메서드는
CQ.form.rte.plugins.Plugin
개체 및 는 구현 플러그인에서 재정의됩니다.getFeatures()
플러그인을 사용할 수 있는 모든 기능의 배열을 반환합니다.initializeUI()
새 단추를 RTE 도구 모음에 추가합니다.notifyPluginConfig()
단추를 마우스로 가리키면 제목과 텍스트가 표시됩니다.execute()
버튼을 클릭하고 플러그인 작업을 수행하면 가 호출됩니다. 포함할 텍스트를 정의하는 데 사용되는 창이 표시됩니다.
-
insertText()
해당 대화 상자 개체를 사용하여 텍스트를 삽입합니다Ejst.InsertTextPlugin.Dialog
(나중에 참조). -
executeInsertText()
는apply()
대화 상자의 메서드로서, 확인 버튼을 클릭합니다. -
자신을 '(으)로 등록
inserttext
' 플러그인:CQ.form.rte.plugins.PluginRegistry.register("inserttext", Ejst.InsertTextPlugin);
-
a
Ejst.InsertTextPlugin.Dialog
개체는 플러그인 단추를 클릭할 때 열리는 대화 상자를 정의합니다. 대화 상자는 패널, 양식, 텍스트 필드 및 2개의 단추로 구성됩니다(확인 및 취소).
를 사용하려면 리치 텍스트 편집기(RTE) 플러그인 기반 대화 상자:
-
대화 상자 바꾸기 사용자 지정 위젯 구성 요소를 리치 텍스트 편집기(RTE) 플러그인 기반 대화 상자:
다음에 설명된 단계를 수행합니다. 예제 2: 단일 패널 대화 상자
-
구성 요소를 편집합니다.
-
오른쪽에 있는 마지막 아이콘(화살표 4개가 있는 아이콘)을 클릭합니다. 경로를 입력하고 를 클릭합니다. 확인:
패스는 대괄호(
[]
). -
클릭 확인 리치 텍스트 편집기를 닫습니다.
다음 리치 텍스트 편집기(RTE) 플러그인 기본 대화 상자는 다음과 같이 표시됩니다.
트리 개요 tree-overview
즉시 사용 가능한 CQ.Ext.tree.TreePanel
개체는 트리 구조화된 데이터의 트리 구조 UI 표현을 제공합니다. 에 포함된 트리 개요 구성 요소 ExtJS 위젯 사용 패키지는 TreePanel
지정된 경로 아래에 JCR 트리를 표시하는 개체입니다. The window itself can be docked/undocked. 이 예제에서 창 논리는 구성 요소 jsp 사이에 포함됩니다 <script></script> 태그 사이에 Analytics JavaScript 코드를 배치했습니다.
를 포함하려면 트리 개요 구성 요소를 샘플 페이지에 추가합니다.
-
추가 4. 트리 개요 구성 요소를 페이지의 ExtJS 위젯 사용 탭에서 다음을 수행합니다. 사이드킥입니다.
-
구성 요소가 표시됩니다.
- 텍스트가 있는 제목
- 속성 링크: 저장소에 저장된 단락의 속성을 표시하려면 을(를) 클릭합니다. 속성을 숨기려면 다시 클릭합니다.
- 리포지토리의 트리 표현이 있는 부동 창이며 확장할 수 있습니다.
구성 요소는 다음과 같이 표시됩니다.
트리 개요 구성 요소:
-
다음에서 정의됩니다.
/apps/extjstraining/components/treeoverview
-
이 대화 상자에서는 창 크기를 설정하고 창을 도킹/도킹 해제할 수 있습니다(아래 세부 정보 참조).
구성 요소 jsp:
-
저장소에서 너비, 높이 및 도킹 속성을 검색합니다.
-
트리 개요 데이터 형식에 대한 텍스트를 표시합니다.
-
javascript 태그 사이에 구성 요소 jsp에 창 논리를 포함합니다.
-
다음에서 정의됩니다.
apps/extjstraining/components/treeoverview/content.jsp
구성 요소 jsp에 포함된 Javascript 코드:
-
을(를) 정의합니다.
tree
페이지에서 트리 창을 검색하려고 하여 개체를 만듭니다. -
트리를 표시하는 창이 없으면
treePanel
(CQ.Ext.tree.TreePanel)가 만들어집니다.-
treePanel
창을 만드는 데 사용되는 데이터가 포함되어 있습니다. -
데이터는 다음에 등록된 서블릿을 호출하여 검색됩니다.
/bin/wcm/siteadmin/tree.json
-
-
다음
beforeload
리스너는 클릭한 노드가 로드되었는지 확인합니다. -
root
개체는 경로apps/extjstraining
을(를) 트리 루트로 설정합니다. -
tree
(CQ.Ext.Window
)은 사전 정의된 를 기반으로 설정됩니다treePanel
, 및에 표시됩니다.tree.show();
-
창이 이미 있으면 저장소에서 검색된 너비, 높이 및 도킹 속성에 따라 표시됩니다.
구성 요소 대화 상자:
-
2개의 필드가 있는 1개의 탭을 표시하여 트리 개요 창의 크기(너비 및 높이)와 창의 도킹/도킹 해제할 1개의 필드를 표시합니다
-
노드에 의해 정의됩니다(노드 유형 =
cq:Dialog
, xtype =panel
). -
패널에 크기 필드 위젯(노드 유형 =)이 있습니다
cq:Widget
, xtype =sizefield
) 및 선택 위젯(노드 유형 =cq:Widget
, xtype =selection
, 유형 =radio
). 옵션 2개(true/false) -
다음 위치의 대화 상자 노드에 의해 정의됩니다.
/apps/extjstraining/components/treeoverview/dialog
-
를 요청하여 json 형식으로 렌더링됩니다.
http://localhost:4502/apps/extjstraining/components/treeoverview/dialog.-1.json
-
다음과 같이 표시됩니다.
그리드 개요 grid-overview
그리드 패널은 테이블 형식의 행 및 열 형식으로 데이터를 나타냅니다. 다음과 같이 구성됩니다.
- 스토어 : 데이터 레코드(행)를 포함하는 모델.
- 열 모델 : 열 구성입니다.
- 보기 : 사용자 인터페이스를 캡슐화합니다.
- 선택 모델 : 선택 동작입니다.
에 포함된 그리드 개요 구성 요소 ExtJS 위젯 사용 패키지는 데이터를 테이블 형식으로 표시하는 방법을 보여 줍니다.
- 예제 1은 정적 데이터를 사용합니다.
- 예제 2는 저장소에서 검색된 데이터를 사용합니다.
샘플 페이지에 그리드 개요 구성 요소를 포함하려면 다음을 수행하십시오.
-
추가 5. 그리드 개요 구성 요소를 페이지의 ExtJS 위젯 사용 탭에서 다음을 수행합니다. 사이드킥입니다.
-
구성 요소가 표시됩니다.
- 텍스트가 있는 제목
- a 속성 링크: 저장소에 저장된 단락의 속성을 표시하려면 을(를) 클릭합니다. 속성을 숨기려면 다시 클릭합니다.
- 데이터를 테이블 형식으로 포함하는 부동 창.
구성 요소는 다음과 같이 표시됩니다.
예제 1: 기본 그리드 example-default-grid
기본 버전의 그리드 개요 구성 요소는 정적 데이터가 포함된 창을 테이블 형식으로 표시합니다. 이 예에서 논리는 다음 두 가지 방법으로 구성 요소 jsp에 포함됩니다.
- 일반 로직은 <script></script> 태그 사이에 정의됩니다
- 특정 로직은 별도의 .js 파일에서 사용할 수 있으며 jsp에서 연결되어 있습니다. 이 설정을 사용하면 원하는 <script> 태그에 댓글을 달아서 두 논리(정적/동적) 간을 쉽게 전환할 수 있습니다.
그리드 개요 구성 요소:
-
다음에서 정의됩니다.
/apps/extjstraining/components/gridoverview
-
이 대화 상자에서는 창 크기를 설정하고 창을 도킹/도킹 해제할 수 있습니다.
구성 요소 jsp:
-
저장소에서 너비, 높이 및 도킹 속성을 검색합니다.
-
일부 텍스트를 그리드 개요 데이터 형식의 소개로 표시합니다.
-
GridPanel 개체를 정의하는 javascript 코드를 참조합니다.
<script type="text/javascript" src="/apps/extjstraining/components/gridoverview/defaultgrid.js"></script>
defaultgrid.js
에서는 일부 정적 데이터를 GridPanel 개체의 기본으로 정의합니다. -
GridPanel 개체를 사용하는 Window 개체를 정의하는 Javascript 태그 사이에 Javascript 코드를 포함합니다.
-
다음에서 정의됩니다.
apps/extjstraining/components/gridoverview/content.jsp
구성 요소 jsp에 포함된 Javascript 코드:
-
을(를) 정의합니다
grid
페이지에서 창 구성 요소를 검색하여 객체를 검색합니다.var grid = CQ.Ext.getCmp("<%= node.getName() %>-grid");
-
If
grid
존재하지 않음, CQ.Ext.grid.GridPanel 개체 (gridPanel
)은 를 호출하여 정의됩니다.getGridPanel()
메서드(아래 참조). 이 메서드는defaultgrid.js
. -
grid
isCQ.Ext.Window
미리 정의된 GridPanel을 기반으로 하며 다음 항목이 표시됩니다.grid.show();
-
If
grid
이미 존재하는 경우 저장소에서 검색한 너비, 높이 및 도킹 속성에 따라 표시됩니다.
Javascript 파일( defaultgrid.js
) 구성 요소 jsp에서 참조되는 는 getGridPanel()
JSP에 포함된 스크립트에 의해 호출되고 CQ.Ext.grid.GridPanel
정적 데이터를 기반으로 하는 객체입니다. 논리는 다음과 같습니다.
-
myData
는 5열 및 4행 표로 형식이 지정된 정적 데이터의 배열입니다. -
store
isCQ.Ext.data.Store
사용하는 개체myData
. -
store
는 메모리에 로드됩니다.store.load();
-
gridPanel
isCQ.Ext.grid.GridPanel
사용하는 개체store
:-
열 너비는 항상 다시 조정됩니다.
forceFit: true
-
한 번에 한 행만 선택할 수 있습니다.
singleSelect:true
-
예제 2: 참조 검색 그리드 example-reference-search-grid
패키지를 설치하면 content.jsp
의 그리드 개요 구성 요소는 정적 데이터를 기반으로 하는 그리드를 표시합니다. 다음 특성을 사용하여 격자를 표시하도록 구성 요소를 수정할 수 있습니다.
- 3개의 열이 있습니다.
- 서블릿을 호출하여 저장소에서 검색한 데이터를 기반으로 합니다.
- 마지막 열의 셀을 편집할 수 있습니다. 값은
test
첫 번째 열에 표시된 경로에 정의된 노드 아래의 속성입니다.
이전 섹션에 설명된 대로 창 개체는 CQ.Ext.grid.GridPanel
를 호출하여 개체를 getGridPanel()
에 정의된 메서드 defaultgrid.js
파일 위치 /apps/extjstraining/components/gridoverview/defaultgrid.js
. 다음 그리드 개요 구성 요소는 을 위한 다른 구현을 제공합니다 getGridPanel()
메서드에서 정의됨 referencesearch.js
파일 위치 /apps/extjstraining/components/gridoverview/referencesearch.js
. 구성 요소 jsp에서 참조되는 .js 파일을 전환하면 그리드는 저장소에서 검색한 데이터를 기반으로 합니다.
구성 요소 jsp에서 참조되는 .js 파일을 전환합니다.
-
in CRXDE Lite 에서
content.jsp
구성 요소의 파일에서defaultgrid.js
다음과 같이 표시되도록 합니다.<!-- script type="text/javascript" src="/apps/extjstraining/components/gridoverview/defaultgrid.js"></script-->
-
를 포함하는 행에서 주석 제거
referencesearch.js
다음과 같이 표시되도록 합니다.<script type="text/javascript" src="/apps/extjstraining/components/gridoverview/referencesearch.js"></script>
-
변경 사항을 저장합니다.
-
샘플 페이지를 새로 고칩니다.
구성 요소는 다음과 같이 표시됩니다.
구성 요소 jsp(referencesearch.js
)은 을 정의합니다 getGridPanel()
구성 요소 jsp에서 호출된 메서드를 반환하고 CQ.Ext.grid.GridPanel
객체이며 저장소에서 동적으로 검색되는 데이터를 기반으로 합니다. 의 논리 referencesearch.js
에서는 일부 동적 데이터를 GridPanel의 기반으로 정의합니다.
-
reader
isCQ.Ext.data.JsonReader
3개 열에 대해 json 형식으로 서블릿 응답을 읽는 개체입니다. -
cm
isCQ.Ext.grid.ColumnModel
3열 객체입니다."테스트" 열 셀은 편집기로 정의된 대로 편집할 수 있습니다.
editor: new
CQ.Ext.form.TextField
({})
-
열은 정렬 가능한 열:
cm.defaultSortable = true;
-
store
isCQ.Ext.data.GroupingStore
개체:- 그러면 "에 등록된 서블릿을 호출하여 데이터를 가져옵니다.
/bin/querybuilder.json
" 쿼리를 필터링하는 데 사용되는 몇 가지 매개 변수와 함께 - 이 방법은
reader
, 미리 정의됨 - 테이블은 'jcr:path' 열 오름차순
- 그러면 "에 등록된 서블릿을 호출하여 데이터를 가져옵니다.
-
gridPanel
isCQ.Ext.grid.EditorGridPanel
편집할 수 있는 객체:-
사전 정의된
store
열 모델에서cm
-
한 번에 한 행만 선택할 수 있습니다.
sm: new
CQ.Ext.grid.RowSelectionModel
({singleSelect:true})
-
a
afteredit
리스너는 "테스트" 열이 편집되었습니다.- "jcr:path" 열에 정의된 경로에 있는 노드의 '
test
' 속성이 셀의 값으로 저장소에 설정되어 있습니다 - POST이 성공하면 값이
store
개체에 추가되고, 그렇지 않으면 거부됩니다
- "jcr:path" 열에 정의된 경로에 있는 노드의 '
-