다중 사이트 관리자 확장

이 페이지는 다중 사이트 관리자의 기능을 확장하는 데 도움이 됩니다.

  • MSM Java API의 기본 구성원에 대해 알아봅니다.
  • 롤아웃 구성에 사용할 수 있는 새 동기화 작업을 만듭니다.
  • 기본 언어 및 국가 코드를 수정합니다.
노트
주의

다중 사이트 관리자 및 해당 API는 웹 사이트를 작성할 때 사용되므로 작성 환경에서만 사용할 수 있습니다.

Java API개요

다중 사이트 관리는 다음 패키지로 구성됩니다.

기본 MSM API 개체는 다음과 같이 상호 작용합니다(사용된 용어 참조).

chlimage_1-35

  • Blueprint
    ( Blueprint 블루프린트 구성에서와 마찬가지로) Live Copy가 컨텐츠를 상속할 수 있는 페이지를 지정합니다.

    chlimage_1-36

    • 블루프린트 구성( Blueprint)의 사용은 선택 사항이지만, 다음과 같습니다.

      • 작성자가 이 소스에서 상속되는 Live Copy에 대한 수정 사항을 푸시할 소스(명시적으로)에서 롤아웃 옵션을 사용할 수 있습니다.
      • 작성자가 사이트 만들기;를 사용할 수 있습니다.따라서 사용자는 손쉽게 언어를 선택하고 live copy 구조를 구성할 수 있습니다.
      • 결과 Live Copy에 대한 기본 롤아웃 구성을 정의합니다.
  • LiveRelationship Live LiveRelationship Copy 분기의 리소스와 이에 상응하는 소스/블루프린트 리소스 간의 연결(관계)을 지정합니다.

    • 관계는 상속과 롤아웃을 구현할 때 사용됩니다.
    • LiveRelationship 객체는 롤아웃 구성(), 관계 RolloutConfigLiveCopy 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 live copy 리소스와 소스/블루프린트 리소스 간의 관계( LiveRelationship)에 대한 구성 세부 사항을 포함합니다.

    • LiveCopy 클래스를 사용하여 페이지의 경로, 소스/블루프린트 페이지의 경로, 롤아웃 구성 및 하위 페이지가 LiveCopy에 포함되는지 여부에 액세스합니다.
    • LiveCopy 노드는 사이트 만들기 또는 Live Copy 만들기​를 사용할 때마다 생성됩니다.
  • LiveStatus 객체는 의 런타임 상태에 액세스할 수 LiveRelationship있습니다. Live Copy의 동기화 상태를 쿼리하는 데 사용합니다.

  • LiveAction 롤아웃에 관련된 각 리소스에 대해 실행되는 작업입니다.

    • LiveActions는 RolloutConfigs에서만 생성됩니다.
  • LiveActionFactory 구성을 LiveAction 통해 객체를 LiveAction 만듭니다. 구성은 저장소에 리소스로 저장됩니다.

  • RolloutConfig 트리거할 때 사용할 목록 LiveActions을 보유합니다. LiveCopyRolloutConfig을 상속하고 결과는 LiveRelationship에 있습니다.

    • 처음으로 Live Copy를 설정하면 LiveActions를 트리거하는 RolloutConfig도 사용됩니다.

새 동기화 작업 만들기

롤아웃 구성에 사용할 사용자 정의 동기화 작업을 만듭니다. 설치된 작업이 사용자의 특정 응용 프로그램 요구 사항을 충족하지 않을 때 동기화 작업을 만듭니다. 이렇게 하려면 두 개의 클래스를 만듭니다.

LiveActionFactory은 지정된 구성에 대한 LiveAction 클래스의 인스턴스를 만듭니다.

  • LiveAction 클래스에는 다음 메서드가 포함되어 있습니다.

    • getName:작업 이름을 반환합니다. 작업을 참조하는 데 사용되는 이름입니다(예: 롤아웃 구성에서).
      • execute:작업의 작업을 수행합니다.
  • LiveActionFactory 클래스에는 다음 멤버가 포함됩니다.

    • LIVE_ACTION_NAME:연결된 이름이 포함된 필드입니다 LiveAction. 이 이름은 LiveAction 클래스의 getName 메서드에서 반환되는 값과 일치해야 합니다.
    • createAction:의 인스턴스를 LiveAction만듭니다. 선택적 Resource 매개 변수를 사용하여 구성 정보를 제공할 수 있습니다.
    • createsAction:연관된 이름을 반환합니다 LiveAction.

LiveAction 구성 노드액세스

저장소의 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);
}

Target 노드, 소스 노드 및 LiveRelationship액세스

다음 개체는 LiveAction 객체의 execute 메서드의 매개 변수로 제공됩니다.

  • Live Copy의 소스를 나타내는 Resource 개체

  • Live Copy의 대상을 나타내는 Resource 객체입니다.

  • Live Copy용 LiveRelationship 개체.

  • autoSave 값은 LiveAction이 저장소에 수행된 변경 내용을 저장할지 여부를 나타냅니다.

  • 재설정 값은 롤아웃 재설정 모드를 나타냅니다.

이러한 객체에서 LiveCopy에 대한 모든 정보를 얻을 수 있습니다. Resource 개체를 사용하여 ResourceResolver, SessionNode 개체를 가져올 수도 있습니다. 이러한 객체는 저장소 컨텐츠를 조작하는 데 유용합니다.

다음 코드의 첫 번째 줄에서 소스는 소스 페이지의 Resource 객체입니다.

ResourceResolver resolver = source.getResourceResolver();
Session session = resolver.adaptTo(javax.jcr.Session.class);
Node sourcenode = source.adaptTo(javax.jcr.Node.class);
노트

Resource 인수는 null 또는 Resources 개체(예: NonExistingResource 개체)에 적용되지 않는 개체일 수 있습니다.Node

새 롤아웃 구성 만들기

설치된 롤아웃 구성이 응용 프로그램 요구 사항을 충족하지 않을 때 롤아웃 구성을 만듭니다.

그러면 블루프린트 또는 Live Copy 페이지에서 롤아웃 구성을 설정할 때 새 롤아웃 구성을 사용할 수 있습니다.

노트

롤아웃을 사용자 지정하기 위한 우수 사례를 참조하십시오.

롤아웃 구성 만들기

새 롤아웃 구성을 만들려면:

  1. CRXDE Lite 열기;예를 들면 다음과 같습니다.
    http://localhost:4502/crx/de

  2. 다음으로 이동 :
    /apps/msm/<your-project>/rolloutconfigs

    노트

    프로젝트의 사용자 지정 버전:
    /libs/msm/wcm/rolloutconfigs
    첫 번째 구성인 경우 만들어야 합니다.

    노트

    /libs 경로에서 아무 것도 변경하면 안 됩니다.
    이는 다음에 인스턴스를 업그레이드할 때 /libs의 컨텐츠를 덮어쓰고 핫픽스 또는 기능 팩을 적용할 때 덮어쓸 수 있기 때문입니다.
    구성 및 기타 변경 사항에 대한 권장 방법은 다음과 같습니다.

    • /apps 아래의 필요한 항목(즉, /libs에 있는 항목이므로)을 다시 만듭니다.
    • /apps 내에서 변경
  3. 다음 속성을 갖는 노드를 만들기​합니다.

    • 이름:롤아웃 구성의 노드 이름입니다. md#installed-synchronization-actions)(예: contentCopy 또는 workflow).
    • 유형: cq:RolloutConfig
  4. 이 노드에 다음 속성을 추가합니다.

    • 이름: jcr:title

      유형: String
      :UI에 표시되는 식별 제목입니다.

    • 이름: jcr:description

      유형: String
      :선택적 설명입니다.

    • 이름: cq:trigger

      유형: String
      :사용할 롤아웃 트리거입니다. 다음 중에서 선택합니다.

      • rollout
      • modification
      • publish
      • deactivate
  5. 모두 저장​을 클릭합니다.

롤아웃 구성에 동기화 작업 추가

롤아웃 구성은 /apps/msm/<your-project>/rolloutconfigs 노드 아래에 만든 롤아웃 구성 노드 아래에 저장됩니다.

롤아웃 구성에 동기화 작업을 추가하려면 cq:LiveSyncAction 유형의 하위 노드를 추가합니다. 동기화 작업 노드의 순서는 작업이 발생하는 순서를 결정합니다.

  1. 여전히 CRXDE Lite에서 롤아웃 구성 노드를 선택합니다.

    예:
    /apps/msm/myproject/rolloutconfigs/myrolloutconfig

  2. 다음 노드 속성을 사용하여 노드를 만듭니다.

    • 이름:동기화 작업의 노드 이름입니다.
      이름은 동기화 작업 아래의 테이블에 있는 작업 이름​과 같아야 합니다(예: contentCopy 또는 workflow).
    • 유형: cq:LiveSyncAction
  3. 필요한 만큼 동기화 작업 노드를 추가하고 구성합니다. 작업 노드를 다시 정렬하여 해당 순서가 수행하려는 순서와 일치하도록 합니다. 맨 위 작업 노드가 먼저 발생합니다.

  4. 모두 저장​을 클릭합니다.

간단한 LiveActionFactory 클래스 만들기 및 사용

이 섹션의 절차를 따라 LiveActionFactory을(를) 개발한 후 롤아웃 구성에 사용합니다. 절차는 Maben 및 Eclipse를 사용하여 LiveActionFactory을(를) 개발하고 배포합니다.

  1. 전문적인 프로젝트를 만들어 Eclipse로 가져올 수 있습니다.
  2. POM 파일에 종속성을 추가합니다.
  3. 인터페이스를 LiveActionFactory 구현하고 OSGi 번들을 배포합니다.
  4. 롤아웃 구성을 생성합니다.
  5. Live Copy를 만듭니다.

Java 클래스의 Maven 프로젝트와 소스 코드는 공개 Git 리포지토리에서 사용할 수 있습니다.

GITHUB에 대한 코드

GitHub에서 이 페이지의 코드를 찾을 수 있습니다

마스터 프로젝트 만들기

다음 절차를 수행하려면 Maven 설정 파일에 adobe-public 프로필을 추가해야 합니다.

  1. 터미널 또는 명령줄 세션을 열고 디렉토리를 변경하여 프로젝트를 만들 위치를 지정합니다.

  2. 다음 명령을 입력합니다.

    mvn archetype:generate -DarchetypeGroupId=com.day.jcr.vault -DarchetypeArtifactId=multimodule-content-package-archetype -DarchetypeVersion=1.0.0 -DarchetypeRepository=adobe-public-releases
    
  3. 대화형 프롬프트에서 다음 값을 지정합니다.

    • groupId: com.adobe.example.msm
    • artifactId: MyLiveActionFactory
    • version: 1.0-SNAPSHOT
    • package: MyPackage
    • appsFolderName: myapp
    • artifactName: MyLiveActionFactory package
    • packageGroup: myPackages
  4. Eclipse를 시작하고 Maven 프로젝트를 가져옵니다.

POM 파일에 종속성 추가

Eclipse 컴파일러가 LiveActionFactory 코드에 사용된 클래스를 참조할 수 있도록 종속성을 추가합니다.

  1. Eclipse 프로젝트 탐색기에서 파일을 엽니다.

    MyLiveActionFactory/pom.xml

  2. 편집기에서 pom.xml 탭을 클릭하고 project/dependencyManagement/dependencies 섹션을 찾습니다.

  3. dependencyManagement 요소 내에 다음 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>
    
  4. MyLiveActionFactory-bundle/pom.xml에서 프로젝트 탐색기​의 번들의 POM 파일을 엽니다.

  5. 편집기에서 pom.xml 탭을 클릭하고 프로젝트/종속성 섹션을 찾습니다. 종속성 요소 내에 다음 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 구현

다음 LiveActionFactory 클래스는 소스 및 대상 페이지에 대한 메시지를 로깅하는 LiveAction을 구현하고 소스 노드에서 대상 노드로 cq:lastModifiedBy 속성을 복사합니다. 라이브 액션 이름은 exampleLiveAction입니다.

  1. Eclipse 프로젝트 탐색기에서 MyLiveActionFactory-bundle/src/main/java/com.adobe.example.msm 패키지를 마우스 오른쪽 단추로 클릭하고 새로 만들기 > 클래스​를 클릭합니다. 이름​에 ExampleLiveActionFactory를 입력한 다음 완료​를 클릭합니다.

  2. ExampleLiveActionFactory.java 파일을 열고 내용을 다음 코드로 바꾼 후 파일을 저장합니다.

    package com.adobe.example.msm;
    
    import java.util.Collections;
    
    import org.apache.felix.scr.annotations.Component;
    import org.apache.felix.scr.annotations.Property;
    import org.apache.felix.scr.annotations.Service;
    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.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(metatype = false)
    @Service
    public class ExampleLiveActionFactory implements LiveActionFactory<LiveAction> {
     @Property(value="exampleLiveAction")
     static final String actionname = LiveActionFactory.LIVE_ACTION_NAME;
    
     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(actionname, configs);
     }
     public String createsAction() {
      return actionname;
     }
     /************* 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(com.day.cq.wcm.msm.api.MSMNameConstants.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 {
      }
     }
    }
    
  3. 터미널 또는 명령 세션을 사용하여 디렉토리를 MyLiveActionFactory 디렉토리(Maben 프로젝트 디렉토리)로 변경합니다. 그런 다음 다음 다음 명령을 입력합니다.

    mvn -PautoInstallPackage clean install
    

    AEM error.log 파일은 번들이 시작되었음을 나타내야 합니다.

    예: http://localhost:4502/system/console/status-slinglogs.

    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]
    

롤아웃 구성 예 만들기

만든 LiveActionFactory을 사용하는 MSM 롤아웃 구성을 만듭니다.

  1. 표준 프로시저](/docs/experience-manager-64/administering/introduction/msm-sync.html?lang=ko#creating-a-rollout-configuration)로 [롤아웃 구성을 만들고 구성하고 속성을 사용합니다.

    • 제목:롤아웃 구성 예
    • 이름:expleroloutconfig
    • cq:trigger: publish

라이브 작업을 예제 롤아웃 구성에 추가합니다.

이전 프로시저에서 만든 롤아웃 구성을 구성하여 ExampleLiveActionFactory 클래스를 사용합니다.

  1. CRXDE Lite 열기;예: http://localhost:4502/crx/de.

  2. /apps/msm/rolloutconfigs/examplerolloutconfig/jcr:content 아래에 다음 노드를 만듭니다.

    • 이름: exampleLiveAction
    • 유형: cq:LiveSyncAction
  3. 모두 저장​을 클릭합니다.

  4. exampleLiveAction 노드를 선택하고 다음 속성을 추가합니다.

    • 이름: repLastModBy
    • 유형: Boolean
    • : true

    이 속성은 ExampleLiveAction 클래스에 cq:LastModifiedBy 속성이 소스에서 대상 노드로 복제되어야 함을 나타냅니다.

  5. 모두 저장​을 클릭합니다.

Live Copy만들기

롤아웃 구성 을 사용하여 We.Retail 참조 사이트의 영어/제품 분기의 라이브 카피를 만듭니다.

  • 출처: /content/we-retail/language-masters/en/products

  • 롤아웃 구성:롤아웃 구성 예

소스 분기의 제품(영어) 페이지를 활성화하고 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 ***

언어 이름 및 기본 국가변경

AEM에서는 기본 언어 및 국가 코드 세트를 사용합니다.

  • 기본 언어 코드는 ISO-639-1에서 정의한 소문자 2자 코드입니다.
  • 기본 국가 코드는 ISO 3166에서 정의한 소문자 또는 대문자 2자 코드입니다.

MSM은 언어 및 국가 코드의 저장된 목록을 사용하여 페이지의 언어 버전 이름과 연결된 국가 이름을 결정합니다. 필요한 경우 목록의 다음 측면을 변경할 수 있습니다.

  • 언어 제목
  • 국가 이름
  • 언어 기본 국가(예: en, de 등 기타 코드의 경우)

언어 목록은 /libs/wcm/core/resources/languages 노드 아래에 저장됩니다. 각 하위 노드는 언어 또는 언어 국가를 나타냅니다.

  • 노드의 이름은 언어 코드(예: en 또는 de) 또는 language_country 코드(예: en_us 또는 de_ch)입니다.

  • 노드의 language 속성은 코드의 전체 언어 이름을 저장합니다.

  • 노드의 country 속성은 코드의 국가 전체 이름을 저장합니다.

  • 노드 이름이 언어 코드(예: en)로만 구성되면 country 속성은 *이고 추가 defaultCountry 속성은 사용할 국가를 나타내는 언어 국가 코드를 저장합니다.

chlimage_1-38

언어를 수정하려면:

  1. 웹 브라우저에서 CRXDE Lite 열기;예: http://localhost:4502/crx/de

  2. /apps 폴더를 선택하고 만들기​를 클릭한 다음 폴더 만들기.

    새 폴더 이름을 wcm 지정합니다.

  3. 이전 단계를 반복하여 /apps/wcm/core 폴더 트리를 만듭니다. resources이라는 코어에 sling:Folder 유형의 노드를 만듭니다.

  4. /libs/wcm/core/resources/languages 노드를 마우스 오른쪽 단추로 클릭하고 복사​를 클릭합니다.

  5. /apps/wcm/core/resources 폴더를 마우스 오른쪽 단추로 클릭하고 붙여넣기​를 클릭합니다. 필요에 따라 하위 노드를 수정합니다.

  6. 모두 저장​을 클릭합니다.

  7. 도구, 작업​을 클릭한 다음 웹 콘솔​을 클릭합니다. 이 콘솔에서 OSGi​을 클릭한 다음 구성​을 클릭합니다.

  8. Day CQ WCM 언어 관리자​를 찾아 클릭하고 언어 목록​의 값을 /apps/wcm/core/resources/languages로 변경한 다음 저장​을 클릭합니다.

    chlimage_1-40

페이지 속성에서 MSM 잠금 구성(터치 지원 UI)

사용자 지정 페이지 속성을 만들 때 새 속성을 Live Copy로 롤아웃할 수 있는지 여부를 고려해야 할 수 있습니다.

예를 들어, 2개의 새 페이지 속성이 추가되고 있는 경우:

  • 연락처 이메일:

    • 이 속성은 각 국가(또는 브랜드 등)마다 다르므로 롤아웃할 필요가 없습니다.
  • 주요 시각적 스타일:

    • 프로젝트 요구 사항은 (일반적으로) 모든 국가(또는 브랜드 등)에 공통으로 이 속성을 롤아웃해야 합니다.

그런 다음 다음을 확인해야 합니다.

  • 연락처 이메일:

    • 롤아웃된 속성에서 제외됩니다.동기화에서 속성 및 노드 유형 제외를 참조하십시오.
  • 주요 시각적 스타일:

    • 상속이 취소되지 않는 한 터치가 활성화된 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 믹싱을 ./image에 추가하고 cq:isCancelledForChildrentrue에 설정하여 상속이 취소됩니다.
      • 체인을 닫으면 상속이 취소됩니다.
노트

cq-msm-lockable은 편집할 리소스의 첫 번째 하위 수준에 적용되며 값이 절대 또는 상대적 값으로 정의되는지 여부에 관계없이 더 높은 수준 상위 항목에서 작동하지 않습니다.

노트

상속을 다시 활성화하면 Live Copy 페이지 속성이 소스 속성과 자동으로 동기화되지 않습니다. 필요한 경우 동기화를 수동으로 요청할 수 있습니다.

이 페이지에서는