다중 사이트 관리자 확장 extending-the-multi-site-manager
이 페이지는 다중 사이트 관리자의 기능을 확장하는 데 도움이 됩니다.
- MSM Java API의 주요 멤버에 대해 알아봅니다.
- 롤아웃 구성에서 사용할 수 있는 동기화 작업을 만듭니다.
- 기본 언어 및 국가 코드를 수정합니다.
Java API 개요 overview-of-the-java-api
다중 사이트 관리는 다음 패키지로 구성됩니다.
기본 MSM API 개체는 다음과 같이 상호 작용합니다(사용된 용어 참조).
-
Blueprint
Blueprint
(블루프린트 구성에서와 같이)은 Live Copy에서 콘텐츠를 상속할 수 있는 페이지를 지정합니다.-
블루프린트 구성(
Blueprint
) 사용은 선택 사항이며, 이 구성은 다음과 같은 역할을 합니다.- 작성자는 소스에서 상속되는 라이브 카피에 대해 롤아웃 옵션을 (명시적으로) 푸시할 수 있습니다.
- 작성자는 사이트 만들기 를 사용할 수 있습니다. 이를 통해 사용자는 손쉽게 언어를 선택하고 라이브 카피 구조를 구성할 수 있습니다.
- 결과 라이브 카피에 대한 기본 롤아웃 구성을 정의합니다.
-
-
LiveRelationship
LiveRelationship
은(는) 라이브 카피 분기에 있는 리소스와 이에 해당하는 소스/블루프린트 리소스 간의 연결(관계)을 지정합니다.-
이 관계는 상속 및 롤아웃을 실현할 때 사용됩니다.
-
LiveRelationship
오브젝트는 관계와 관련된 롤아웃 구성(RolloutConfig
),LiveCopy
및LiveStatus
오브젝트에 대한 액세스(참조)를 제공합니다. -
예를 들어 Live Copy는
/content/we-retail/language-masters
의 소스/블루프린트로/content/copy/us
에 만들어집니다. 리소스/content/we.retail/language-masters/en/jcr:content
및/content/copy/us/en/jcr:content
는 관계를 형성합니다.
-
-
LiveCopy
LiveCopy
은(는) Live Copy 리소스와 소스/블루프린트 리소스 간의 관계(LiveRelationship
)에 대한 구성 세부 정보를 보관합니다.-
LiveCopy
클래스를 사용하여 페이지 경로, 소스/블루프린트 페이지 경로, 롤아웃 구성,LiveCopy
에 하위 페이지도 포함되는지 여부에 액세스합니다. -
LiveCopy
노드는 사이트 만들기 또는 Live Copy 만들기 를 사용할 때마다 만들어집니다.
-
-
LiveStatus
LiveStatus
개체는LiveRelationship
의 런타임 상태에 대한 액세스를 제공합니다. Live Copy의 동기화 상태를 쿼리하는 데 사용합니다. -
LiveAction
LiveAction
은(는) 롤아웃과 관련된 각 리소스에서 실행되는 작업입니다.- LiveActions는 RolloutConfigs에서만 생성됩니다.
-
LiveActionFactory
LiveAction
구성이 지정된LiveAction
개체를 만듭니다. 구성은 저장소에 리소스로 저장됩니다. -
RolloutConfig
RolloutConfig
에는 트리거될 때 사용할LiveActions
목록이 있습니다.LiveCopy
는RolloutConfig
를 상속하며 결과는LiveRelationship
에 표시됩니다.- 처음 Live Copy를 설정하는 경우에도 LiveActions를 트리거하는 RolloutConfig를 사용합니다.
새 동기화 작업 만들기 creating-a-new-synchronization-action
롤아웃 구성에 사용할 사용자 지정 동기화 작업을 만듭니다. 설치된 작업이 특정 응용 프로그램 요구 사항에 맞지 않으면 동기화 작업을 만듭니다. 이렇게 하려면 다음과 같이 두 개의 클래스를 만듭니다.
- 작업을 수행하는
com.day.cq.wcm.msm.api.LiveAction
인터페이스의 구현. com.day.cq.wcm.msm.api.LiveActionFactory
인터페이스를 구현하고LiveAction
클래스의 인스턴스를 만드는 OSGI 구성 요소입니다.
LiveActionFactory
는 주어진 구성에 대한 LiveAction
클래스의 인스턴스를 만듭니다.
-
LiveAction
클래스에는 다음 메서드가 포함됩니다.getName
: 작업의 이름을 반환합니다. 이 이름은 작업을 참조하는 데 사용됩니다(예: 롤아웃 구성).execute
: 작업의 작업을 수행합니다.
-
LiveActionFactory
클래스에는 다음과 같은 멤버가 포함됩니다.-
LIVE_ACTION_NAME
: 연결된LiveAction
의 이름이 포함된 필드입니다. 이 이름은LiveAction
클래스의getName
메서드에 의해 반환되는 값과 일치합니다. -
createAction
:LiveAction
의 인스턴스를 만듭니다. 선택 사항인Resource
매개변수를 사용하여 구성 정보를 제공할 수 있습니다. -
createsAction
: 연결된LiveAction
의 이름을 반환합니다.
-
LiveAction 구성 노드에 액세스 accessing-the-liveaction-configuration-node
저장소의 LiveAction
구성 노드를 사용하여 LiveAction
인스턴스의 런타임 동작에 영향을 미치는 정보를 저장합니다. LiveAction
구성을 저장하는 저장소의 노드는 런타임 시 LiveActionFactory
오브젝트에 사용할 수 있습니다. 따라서 구성 노드에 속성을 추가하여 필요에 따라 LiveActionFactory
구현에서 사용할 수 있습니다.
예를 들어 LiveAction
은 블루프린트 작성자의 이름을 저장해야 합니다. 구성 노드의 속성에는 정보를 저장하는 블루프린트 페이지의 속성 이름이 포함됩니다. 런타임 시 LiveAction
이 구성에서 속성 이름을 검색한 다음 속성 값을 가져옵니다.
LiveActionFactory.createAction
메서드의 매개변수는 Resource
오브젝트입니다. 이 Resource
개체는 롤아웃 구성에서 이 라이브 작업에 대한 cq:LiveSyncAction
노드를 나타냅니다. 롤아웃 구성 만들기를 참조하십시오. 평소와 같이 구성 노드를 사용할 때 이를 ValueMap
오브젝트에 맞게 조정해야 합니다.
public LiveAction createAction(Resource resource) throws WCMException {
ValueMap config;
if (resource == null || resource.adaptTo(ValueMap.class) == null) {
config = new ValueMapDecorator(Collections.<String, Object>emptyMap());
} else {
config = resource.adaptTo(ValueMap.class);
}
return new MyLiveAction(config, this);
}
대상 노드, 소스 노드 및 LiveRelationship 액세스 accessing-target-nodes-source-nodes-and-the-liverelationship
LiveAction
오브젝트의 execute
메서드의 매개변수로 다음 오브젝트가 제공됩니다.
-
Live Copy의 소스를 나타내는
Resource
개체입니다. -
Live Copy 대상을 나타내는
Resource
개체입니다. -
Live Copy에 대한
LiveRelationship
개체입니다. -
autoSave
값은LiveAction
이(가) 저장소에 대한 변경 내용을 저장해야 하는지 여부를 나타냅니다. -
재설정 값은 롤아웃 재설정 모드를 나타냅니다.
이러한 개체를 통해 LiveCopy
에 대한 모든 정보를 얻을 수 있습니다. 또한 Resource
오브젝트를 사용하여 ResourceResolver
, Session
및 Node
오브젝트를 얻을 수 있습니다. 이러한 오브젝트는 저장소 콘텐츠를 조작하는 데 유용합니다.
다음 코드의 첫 번째 줄에서 소스는 소스 페이지의 Resource
오브젝트입니다.
ResourceResolver resolver = source.getResourceResolver();
Session session = resolver.adaptTo(javax.jcr.Session.class);
Node sourcenode = source.adaptTo(javax.jcr.Node.class);
새 롤아웃 구성 만들기 creating-a-new-rollout-configuration
설치된 롤아웃 구성이 애플리케이션 요구 사항에 부합하지 않는 경우 롤아웃 구성을 생성합니다.
새 롤아웃 구성을 만들었다면 블루프린트 또는 Live Copy 페이지에서 롤아웃 구성을 설정할 때 사용할 수 있습니다.
롤아웃 구성 만들기 create-the-rollout-configuration
-
오픈 CRXDE Lite. 예:
http://localhost:4502/crx/de -
다음으로 이동:
/apps/msm/<your-project>/rolloutconfigs
note note NOTE 이는 프로젝트의 사용자 정의 버전입니다. /libs/msm/wcm/rolloutconfigs
이것이 최초의 구성인 경우 이/libs
분기를 템플릿으로 사용해/apps
아래에 새 분기를 만들어야 합니다.note note NOTE /libs
경로에서 아무 것도 변경하지 마십시오.
이는 다음에 인스턴스를 업그레이드할 때/libs
의 콘텐츠가 덮어쓰기되기 때문입니다(핫픽스 또는 기능 팩을 적용할 때 덮어쓸 수도 있음).
구성 및 기타 변경에 권장되는 방법은 다음과 같습니다./apps
아래에 필요한 항목(즉,/libs
에 존재하는 항목)을 다시 만듭니다./apps
내에서 변경
-
이 만들기 아래에 다음 속성을 가진 노드가 있습니다.
- 이름: 롤아웃 구성의 노드 이름입니다. md#installed-synchronization-actions)(예:
contentCopy
또는workflow
. - 유형:
cq:RolloutConfig
- 이름: 롤아웃 구성의 노드 이름입니다. md#installed-synchronization-actions)(예:
-
이 노드에 다음 속성을 추가합니다.
-
이름:
jcr:title
유형:
String
값: UI에 표시되는 식별 제목입니다. -
이름:
jcr:description
유형:
String
값: 선택적 설명입니다. -
이름:
cq:trigger
유형:
String
값: 사용할 롤아웃 트리거. 다음 중에서 선택:rollout
modification
publish
deactivate
-
-
모두 저장 을 클릭합니다.
롤아웃 구성에 동기화 작업 추가 add-synchronization-actions-to-the-rollout-configuration
롤아웃 구성은 /apps/msm/<your-project>/rolloutconfigs
노드에서 만든 롤아웃 구성 노드 아래에 저장됩니다.
cq:LiveSyncAction
유형의 하위 노드를 추가하여 롤아웃 구성에 동기화 작업을 추가합니다. 동기화 작업 노드의 순서에 따라 작업이 발생하는 순서가 결정됩니다.
-
아직 CRXDE Lite 상태입니다. 롤아웃 구성 노드를 선택하십시오.
예:
/apps/msm/myproject/rolloutconfigs/myrolloutconfig
-
다음 노드 속성이 있는 노드를 만들기:
- 이름: 동기화 작업의 노드 이름입니다.
이름은 동기화 작업 아래 테이블의 작업 이름 과(와) 같아야 합니다(예:contentCopy
또는workflow
). - 유형:
cq:LiveSyncAction
- 이름: 동기화 작업의 노드 이름입니다.
-
필요한 만큼 동기화 작업 노드를 추가하고 구성합니다. 작업 노드의 순서를 원하는 순서와 일치하도록 작업 노드를 재배열합니다. 최상위 작업 노드가 먼저 발생합니다.
간단한 LiveActionFactory 클래스 만들기 및 사용 creating-and-using-a-simple-liveactionfactory-class
이 섹션의 절차에 따라 LiveActionFactory
를 개발하여 롤아웃 구성에서 사용하십시오. 이 절차에서는 Maven 및 Eclipse를 사용하여 LiveActionFactory
를 개발하고 배포합니다.
- Maven 프로젝트를 만들어 Eclipse로 가져옵니다.
- POM 파일에 종속성을 추가합니다.
LiveActionFactory
인터페이스를 구현하고 OSGi 번들을 배포합니다.- 롤아웃 구성을 만듭니다.
- Live Copy를 만듭니다.
Maven 프로젝트 및 Java 클래스의 소스 코드는 공용 Git 저장소에서 사용할 수 있습니다.
GITHUB의 코드
GitHub에서 이 페이지의 코드를 확인할 수 있습니다
- GitHub에서 experiencemanager-java-msmrollout 프로젝트 열기
- 프로젝트를 ZIP 파일(으)로 다운로드
Maven 프로젝트 만들기 create-the-maven-project
다음 절차를 수행하려면 Maven 설정 파일에 adobe-public 프로필을 추가해야 합니다.
- adobe-public 프로필에 대한 자세한 내용은 콘텐츠 패키지 Maven 플러그인 얻기를 참조하십시오.
- Maven 설정 파일에 대한 내용은 Maven 설정 참조를 참조하십시오.
-
터미널 또는 명령줄 세션을 열고 디렉터리를 변경하여 프로젝트를 만들 위치를 가리키도록 합니다.
-
다음 명령을 입력합니다.
code language-xml mvn archetype:generate -DarchetypeGroupId=com.day.jcr.vault -DarchetypeArtifactId=multimodule-content-package-archetype -DarchetypeVersion=1.0.0 -DarchetypeRepository=adobe-public-releases
-
대화형 프롬프트에서 다음 값을 지정합니다.
groupId
:com.adobe.example.msm
artifactId
:MyLiveActionFactory
version
:1.0-SNAPSHOT
package
:MyPackage
appsFolderName
:myapp
artifactName
:MyLiveActionFactory package
packageGroup
:myPackages
-
Eclipse를 시작하고 Maven 프로젝트를 가져옵니다.
POM 파일에 종속성 추가 add-dependencies-to-the-pom-file
Eclipse 컴파일러가 LiveActionFactory
코드에서 사용되는 클래스를 참조할 수 있도록 종속성을 추가합니다.
-
Eclipse 프로젝트 탐색기에서 다음 파일을 엽니다.
MyLiveActionFactory/pom.xml
-
편집기에서
pom.xml
탭을 클릭하고project/dependencyManagement/dependencies
섹션을 찾습니다. -
dependencyManagement
요소 내에 다음 XML을 추가한 다음 파일을 저장합니다.code language-xml <dependency> <groupId>com.day.cq.wcm</groupId> <artifactId>cq-msm-api</artifactId> <version>5.6.2</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.sling</groupId> <artifactId>org.apache.sling.api</artifactId> <version>2.4.3-R1488084</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.day.cq.wcm</groupId> <artifactId>cq-wcm-api</artifactId> <version>5.6.6</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.sling</groupId> <artifactId>org.apache.sling.commons.json</artifactId> <version>2.0.6</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.day.cq</groupId> <artifactId>cq-commons</artifactId> <version>5.6.4</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.sling</groupId> <artifactId>org.apache.sling.jcr.jcr-wrapper</artifactId> <version>2.0.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.day.cq</groupId> <artifactId>cq-commons</artifactId> <version>5.6.4</version> <scope>provided</scope> </dependency>
-
프로젝트 탐색기 의
MyLiveActionFactory-bundle/pom.xml
에서 번들의 POM 파일을 엽니다. -
편집기에서
pom.xml
탭을 클릭하고 프로젝트/종속성 섹션을 찾습니다. 종속성 요소 내에 다음 XML을 추가한 다음 파일을 저장합니다.code language-xml <dependency> <groupId>com.day.cq.wcm</groupId> <artifactId>cq-msm-api</artifactId> </dependency> <dependency> <groupId>org.apache.sling</groupId> <artifactId>org.apache.sling.api</artifactId> </dependency> <dependency> <groupId>com.day.cq.wcm</groupId> <artifactId>cq-wcm-api</artifactId> </dependency> <dependency> <groupId>org.apache.sling</groupId> <artifactId>org.apache.sling.commons.json</artifactId> </dependency> <dependency> <groupId>com.day.cq</groupId> <artifactId>cq-commons</artifactId> </dependency> <dependency> <groupId>org.apache.sling</groupId> <artifactId>org.apache.sling.jcr.jcr-wrapper</artifactId> </dependency> <dependency> <groupId>com.day.cq</groupId> <artifactId>cq-commons</artifactId> </dependency>
LiveActionFactory 구현 implement-liveactionfactory
다음 LiveActionFactory
클래스는 소스 및 대상 페이지에 대한 메시지를 로깅하고 소스 노드에서 대상 노드로 cq:lastModifiedBy
속성을 복사하는 LiveAction
을 구현합니다. 라이브 작업의 이름은 exampleLiveAction
입니다.
-
Eclipse 프로젝트 탐색기에서
MyLiveActionFactory-bundle/src/main/java/com.adobe.example.msm
패키지를 마우스 오른쪽 단추로 클릭하고 새로 만들기 > 클래스 를 클릭합니다. 이름 으로ExampleLiveActionFactory
를 입력한 다음 마침 을 클릭합니다. -
ExampleLiveActionFactory.java
파일을 열고 내용을 다음 코드로 바꾼 후 파일을 저장합니다.code language-java package com.adobe.example.msm; import java.util.Collections; import com.day.cq.wcm.api.NameConstants; import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ResourceResolver; import org.apache.sling.api.resource.ValueMap; import org.apache.sling.api.wrappers.ValueMapDecorator; import org.apache.sling.commons.json.io.JSONWriter; import org.apache.sling.commons.json.JSONException; import org.osgi.service.component.annotations.Component; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.jcr.Node; import javax.jcr.RepositoryException; import javax.jcr.Session; import com.day.cq.wcm.msm.api.ActionConfig; import com.day.cq.wcm.msm.api.LiveAction; import com.day.cq.wcm.msm.api.LiveActionFactory; import com.day.cq.wcm.msm.api.LiveRelationship; import com.day.cq.wcm.api.WCMException; @Component( service = LiveActionFactory.class, property = {LiveActionFactory.LIVE_ACTION_NAME + "=" + ExampleLiveActionFactory.LIVE_ACTION_NAME}) public class ExampleLiveActionFactory implements LiveActionFactory<LiveAction> { private static final Logger logger = LoggerFactory.getLogger(ExampleLiveActionFactory.class); public static final String LIVE_ACTION_NAME = "CustomAction"; public LiveAction createAction(Resource config) { ValueMap configs; /* Adapt the config resource to a ValueMap */ if (config == null || config.adaptTo(ValueMap.class) == null) { configs = new ValueMapDecorator(Collections.<String, Object>emptyMap()); } else { configs = config.adaptTo(ValueMap.class); } return new ExampleLiveAction(LIVE_ACTION_NAME, configs); } public String createsAction() { return LIVE_ACTION_NAME; } /************* LiveAction ****************/ private static class ExampleLiveAction implements LiveAction { private String name; private ValueMap configs; private static final Logger log = LoggerFactory.getLogger(ExampleLiveAction.class); public ExampleLiveAction(String nm, ValueMap config){ name = nm; configs = config; } public void execute(Resource source, Resource target, LiveRelationship liverel, boolean autoSave, boolean isResetRollout) throws WCMException { String lastMod = null; log.info(" *** Executing ExampleLiveAction *** "); /* Determine if the LiveAction is configured to copy the cq:lastModifiedBy property */ if ((Boolean) configs.get("repLastModBy")){ /* get the source's cq:lastModifiedBy property */ if (source != null && source.adaptTo(Node.class) != null){ ValueMap sourcevm = source.adaptTo(ValueMap.class); lastMod = sourcevm.get(NameConstants.PN_PAGE_LAST_MOD_BY, String.class); } /* set the target node's la-lastModifiedBy property */ Session session = null; if (target != null && target.adaptTo(Node.class) != null){ ResourceResolver resolver = target.getResourceResolver(); session = resolver.adaptTo(javax.jcr.Session.class); Node targetNode; try{ targetNode=target.adaptTo(javax.jcr.Node.class); targetNode.setProperty("la-lastModifiedBy", lastMod); log.info(" *** Target node lastModifiedBy property updated: {} ***",lastMod); }catch(Exception e){ log.error(e.getMessage()); } } if(autoSave){ try { session.save(); } catch (Exception e) { try { session.refresh(true); } catch (RepositoryException e1) { e1.printStackTrace(); } e.printStackTrace(); } } } } public String getName() { return name; } /************* Deprecated *************/ @Deprecated public void execute(ResourceResolver arg0, LiveRelationship arg1, ActionConfig arg2, boolean arg3) throws WCMException { } @Deprecated public void execute(ResourceResolver arg0, LiveRelationship arg1, ActionConfig arg2, boolean arg3, boolean arg4) throws WCMException { } @Deprecated public String getParameterName() { return null; } @Deprecated public String[] getPropertiesNames() { return null; } @Deprecated public int getRank() { return 0; } @Deprecated public String getTitle() { return null; } @Deprecated public void write(JSONWriter arg0) throws JSONException { } }
-
터미널 또는 명령 세션을 사용하여 디렉터리를
MyLiveActionFactory
디렉터리(Maven 프로젝트 디렉터리)로 변경합니다. 이어서 다음 명령을 입력합니다.code language-shell mvn -PautoInstallPackage clean install
AEM
error.log
파일은 번들이 시작되었음을 나타내야 합니다.예: https://localhost:4502/system/console/status-slinglogs.
code language-xml 13.08.2013 14:34:55.450 *INFO* [OsgiInstallerImpl] com.adobe.example.msm.MyLiveActionFactory-bundle BundleEvent RESOLVED 13.08.2013 14:34:55.451 *INFO* [OsgiInstallerImpl] com.adobe.example.msm.MyLiveActionFactory-bundle BundleEvent STARTING 13.08.2013 14:34:55.451 *INFO* [OsgiInstallerImpl] com.adobe.example.msm.MyLiveActionFactory-bundle BundleEvent STARTED 13.08.2013 14:34:55.453 *INFO* [OsgiInstallerImpl] com.adobe.example.msm.MyLiveActionFactory-bundle Service [com.adobe.example.msm.ExampleLiveActionFactory,2188] ServiceEvent REGISTERED 13.08.2013 14:34:55.454 *INFO* [OsgiInstallerImpl] org.apache.sling.audit.osgi.installer Started bundle com.adobe.example.msm.MyLiveActionFactory-bundle [316]
롤아웃 구성 예 만들기 create-the-example-rollout-configuration
앞서 만든 LiveActionFactory
를 사용하는 MSM 롤아웃 구성을 만듭니다.
-
표준 절차를 사용하여 롤아웃 구성을 만들고 구성 - 다음 속성을 사용합니다.
- 제목: Example Rollout Configuration
- 이름: examplerolloutconfig
- cq:trigger:
publish
롤아웃 구성 예에 라이브 작업 추가 add-the-live-action-to-the-example-rollout-configuration
이전 절차에서 만든 롤아웃 구성을 ExampleLiveActionFactory
클래스를 사용하도록 구성합니다.
-
CRXDE Lite 열기(예: https://localhost:4502/crx/de).
-
/apps/msm/rolloutconfigs/examplerolloutconfig/jcr:content
아래에 다음 노드를 만듭니다.- 이름:
exampleLiveAction
- 유형:
cq:LiveSyncAction
- 이름:
-
모두 저장 을 클릭합니다.
-
exampleLiveAction
노드를 선택하고 다음 속성을 추가하십시오.- 이름:
repLastModBy
- 유형:
Boolean
- 값:
true
이 속성은
cq:LastModifiedBy
속성을 원본에서 대상 노드로 복제해야 함을ExampleLiveAction
클래스에 표시합니다. - 이름:
-
모두 저장 을 클릭합니다.
Live Copy 만들기 create-the-live-copy
롤아웃 구성을 사용하여 We.Retail 참조 사이트의 영어/제품 분기에 대한 Live Copy 만들기:
-
소스:
/content/we-retail/language-masters/en/products
-
롤아웃 구성: Example Rollout Configuration
소스 분기의 제품(영어) 페이지를 활성화하고 LiveAction
클래스가 생성하는 로그 메시지를 관찰합니다.
16.08.2013 10:53:33.055 *INFO* [Thread-444535] com.adobe.example.msm.ExampleLiveActionFactory$ExampleLiveAction ***ExampleLiveAction has been executed.***
16.08.2013 10:53:33.055 *INFO* [Thread-444535] com.adobe.example.msm.ExampleLiveActionFactory$ExampleLiveAction ***Target node lastModifiedBy property updated: admin ***
언어 이름 및 기본 국가 변경 changing-language-names-and-default-countries
AEM은 기본 언어 및 국가 코드 세트를 사용합니다.
- 기본 언어 코드는 ISO-639-1에서 정의한 소문자 두 자리 코드입니다.
- 기본 국가 코드는 ISO 3166에서 정의된 소문자 또는 대문자 두 자리 코드입니다.
MSM은 저장된 언어 및 국가 코드 목록을 사용하여 페이지의 언어 버전 이름과 연결된 국가 이름을 결정합니다. 필요한 경우 목록의 다음 측면을 변경할 수 있습니다.
- 언어 제목
- 국가 이름
- 언어 기본 국가(
en
,de
등 코드의 경우)
언어 목록은 /libs/wcm/core/resources/languages
노드 아래에 저장됩니다. 각 하위 노드는 언어 또는 언어 국가를 나타냅니다.
-
노드 이름은 언어 코드(예:
en
또는de
) 또는 language_country 코드(예:en_us
또는de_ch
)입니다. -
노드의
language
속성은 코드 언어의 전체 이름을 저장합니다. -
노드의
country
속성은 코드 국가의 전체 이름을 저장합니다. -
노드 이름이 언어 코드로만 구성된 경우(예:
en
) 국가 속성은*
이며, 추가defaultCountry
속성에 사용할 국가를 나타내는 언어 국가 코드가 저장됩니다.
언어를 수정하려면 다음 작업을 수행하십시오.
-
웹 브라우저에서 CRXDE Lite 열기(예: https://localhost:4502/crx/de)
-
/apps
폴더를 선택하고 만들기 를 클릭한 다음 폴더 만들기 를 클릭합니다.새 폴더의 이름을
wcm
으로 지정합니다. -
이전 단계를 반복하여
/apps/wcm/core
폴더 트리를 만듭니다.resources
(이)라는core
에sling:Folder
유형의 노드를 만듭니다. -
마우스 오른쪽 버튼으로
/libs/wcm/core/resources/languages
노드를 클릭하고 복사 를 클릭합니다. -
마우스 오른쪽 버튼으로
/apps/wcm/core/resources
폴더를 클릭하고 붙여넣기 를 클릭합니다. 필요에 따라 하위 노드를 수정합니다. -
모두 저장 을 클릭합니다.
-
도구, 작업 을 클릭한 다음 웹 콘솔 을 클릭합니다. 이 콘솔에서 OSGi 를 클릭한 다음 구성 을 클릭합니다.
-
일별 CQ WCM 언어 관리자 를 찾아 클릭하고 언어 목록 의 값을
/apps/wcm/core/resources/languages
로 변경한 다음 저장 을 클릭합니다.
페이지 속성에 대한 MSM 잠금 구성(터치 사용 UI) configuring-msm-locks-on-page-properties-touch-enabled-ui
사용자 정의 페이지 속성을 만들 때 새 속성이 모든 Live Copy에 롤아웃될 수 있는지 여부를 고려해야 할 수 있습니다.
다음과 같이 새 페이지 속성 두 개를 추가하는 경우를 예로 들 수 있습니다.
-
연락처 이메일:
- 이 속성은 각 국가(또는 브랜드 등)에서 다르므로 롤아웃할 필요가 없습니다.
-
주요 시각 스타일:
- 프로젝트 요구 사항은 이 속성이 모든 국가(또는 브랜드 등)에 (일반적으로) 공통된 상태로 롤아웃되어야 한다는 것입니다.
그렇다면 다음과 같이 작업해야 합니다.
-
연락처 이메일:
-
롤아웃된 속성에서 제외됩니다. 동기화에서 속성 및 노드 유형 제외를 참조하십시오.
-
주요 시각 스타일:
-
상속이 취소되지 않는 한 터치 사용 UI에서 이 속성을 편집할 수 없도록 하십시오. 그런 다음 상속을 복원할 수도 있습니다. 이는 연결 상태를 나타내도록 전환하는 체인/끊어진 체인 링크를 클릭하여 제어합니다.
페이지 속성이 롤아웃 대상인지 여부와 편집 시 상속 취소/복원 대상인지 여부는 다음과 같은 대화 상자 속성에 의해 제어됩니다.
-
cq-msm-lockable
-
터치 활성화 UI 대화 상자의 항목에 적용할 수 있습니다
-
대화 상자에 체인 링크 기호가 만들어집니다.
-
상속이 취소(체인 연결이 끊어진 경우)된 경우에만 편집할 수 있습니다.
-
리소스의 첫 번째 하위 수준에만 적용됩니다.
-
유형:
String
-
값: 고려 중인 속성의 이름을 사용하며 속성
name
의 값과 비슷합니다. 예를 들어 다음을 참조하십시오./libs/foundation/components/page/cq:dialog/content/items/tabs/items/basic/items/column/items/title/items/title
-
-
cq-msm-lockable
이 정의된 경우 체인을 끊거나 닫으면 다음과 같은 방식으로 MSM과 상호 작용합니다.
-
cq-msm-lockable
의 값이 다음과 같은 경우:-
상대(예:
myProperty
또는./myProperty
)cq:propertyInheritanceCancelled
에서 속성을 추가하고 제거합니다.
-
절대(예:
/image
)-
체인을 끊으면
cq:LiveSyncCancelled
mixin을./image
에 추가하고cq:isCancelledForChildren
을(를)true
(으)로 설정하여 상속이 취소됩니다. -
체인을 닫으면 상속이 취소됩니다.
-
-
cq-msm-lockable
은 편집할 리소스의 첫 번째 하위 수준에 적용되며, 값이 절대 또는 상대로 정의되었는지 여부에 관계없이 더 깊은 수준의 상위 항목에서는 작동하지 않습니다.