現在表示中:

ここでは、Multi Site Manager の機能を拡張する方法について説明します。

  • MSM Java API の主な構成要素について学習します。 
  • ロールアウト設定で使用できる、新しい同期アクションを作成します。
  • サイトを作成ウィザードで「章」ステップを削除します。
  • デフォルトの言語コードと国コードを変更します。

注意:

このページは、コンテンツの再利用:Multi Site Managerと併せて読んでください。

警告:

Multi Site Manager とその API は Web サイトのオーサリング時に使用するものなので、オーサー環境での使用のみを目的としています。

Java API の概要

Multi Site Management は、以下のパッケージで構成されています。

主要な MSM API オブジェクトは、次のような関係にあります(使用される用語も参照してください)。

chlimage_1
  • Blueprint
    Blueprintブループリント設定)は、ライブコピーのコンテンツ継承元となるページを指定します。

    chlimage_1
    • ブループリント設定(Blueprint)の使用は任意ですが、これを使用すると、
      • 作成者がソースに対して「ロールアウト」オプションを使用できます(これにより、このソースから継承するライブコピーに変更を(明示的に)プッシュできます)。
      • 作成者が「サイトを作成」を使用できます(これにより、ユーザーが簡単に言語を選択し、ライブコピーの構造を設定できます)。
      • 作成されるすべてのライブコピーに対するデフォルトのロールアウト設定を定義できます。
  • LiveRelationship

    LiveRelationship は、ライブコピーブランチのリソースと、同等のソースまたはブループリントのリソースとの関連付け(関係)を指定します。

    • この関係は、継承およびロールアウトの実現時に使用されます。
    • LiveRelationship オブジェクトは、ロールアウト設定(RolloutConfig)、LiveCopy および関係に関連付けられた LiveStatus オブジェクトへのアクセス(参照)を可能にします。
    • 例えば、/content/we-retail/language-masters にあるソースまたはブループリントから、/content/copy/us にライブコピーが作成されるとします。この場合、リソース /content/we.retail/language-masters/en/jcr:content/content/copy/us/en/jcr:content が関係を形成します。
  • Livecopy

    LiveCopy は、ライブコピーのリソースとそのソースまたはブループリントのリソースとの関係(LiveRelationship)の詳細な設定を保持します。

    • LiveCopy クラスを使用すると、ページのパスや、ソースまたはブループリントページのパス、ロールアウト設定、さらに子ページも LiveCopy に含まれるかどうかにアクセスできます。
    •  LiveCopy ノードは、「サイトを作成」または「ライブコピーを作成」が使用されるたびに作成されます。
  • LiveStatus

    LiveStatus オブジェクトは、LiveRelationship の実行時ステータスへのアクセスを可能にします。このオブジェクトを使用して、ライブコピーの同期ステータスを問い合わせます。

  • LiveAction

    LiveAction は、ロールアウトに含まれる各リソースに対して実行されるアクションです。

    • LiveAction は、RolloutConfig によってのみ生成されます。
  • LiveActionFactory

    LiveAction 設定を指定して、LiveAction オブジェクトを作成します。設定は、リポジトリ内にリソースとして保存されます。

  • RolloutConfig

    RolloutConfig は、呼び出し時に使用される LiveAction のリストを保持します。LiveCopyRolloutConfig を継承し、その結果が LiveRelationship に含まれます。

    • 初めてライブコピーを設定するときは、(LiveAction を呼び出す)RolloutConfig も使用します。

新しい同期アクションの作成

カスタム同期アクションを作成して、ロールアウト設定と併用します。インストール済みのアクションが特定のアプリケーション要件を満たさない場合に同期アクションを作成します。同期アクションを作成するには、次の 2 つのクラスを作成します。

LiveActionFactory は、指定された設定の LiveAction クラスのインスタンスを作成します。

  • LiveAction クラスには次のメソッドが含まれます。
    • getName:アクション名を返します。この名前は、ロールアウト設定などで、アクションを参照するために使用します。
    • execute:アクションのタスクを実行します。
  • LiveActionFactory クラスには次のメンバーが含まれます。
    • LIVE_ACTION_NAME:関連付けられた LiveAction の名前を格納するフィールド。この名前は、LiveAction クラスの getName メソッドが返す値と一致する必要があります。
    • createActionLiveAction のインスタンスを作成します。オプションの 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);
}

ターゲットノード、ソースノード、LiveRelationship へのアクセス

LiveAction オブジェクトの execute メソッドのパラメーターとして、以下のオブジェクトを指定します。

  • ライブコピーのソースを表す Resource オブジェクト。
  • ライブコピーのターゲットを表す Resource オブジェクト。
  • ライブコピーの LiveRelationship オブジェクト。
  • autoSave は、LiveAction がリポジトリに対しておこなわれた変更を保存する必要があることを示します。
  • 値 reset は、ロールアウトのリセットモードを示します。

これらのオブジェクトから、LiveCopy に関するすべての情報を取得できます。Resource オブジェクトを使用して、ResourceResolver オブジェクト、Session オブジェクトおよび Node オブジェクトも取得できます。これらのオブジェクトは、リポジトリコンテンツの操作に役立ちます。

以下のコードの先頭行で、source はソースページの Resource オブジェクトです。

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

注意:

Resource 引数には、null、または NonExistingResource オブジェクトなどの Node オブジェクトに適応しない Resource オブジェクトを指定できます。

新しいロールアウト設定の作成

インストールされるロールアウト設定がアプリケーションの要件を満たさない場合は、ロールアウト設定を作成します。

ブループリントまたはライブコピーページでロールアウト設定を指定すると、新しいロールアウト設定が使用可能になります。

ロールアウト設定の作成

  1. クラシック UI でツールコンソールを開きます(例:http://localhost:4502/miscadmin#/etc)。

    注意:

    タッチ操作向け UI では、レールエントリのツール運営設定を使用してクラシック UI のツールコンソールに移動できます。

  2. フォルダーツリーで、ツールMSMロールアウト設定フォルダーを選択します。

  3. 新規」をクリックし、次に「新しいページ」をクリックしてロールアウト設定のプロパティを定義します。

    • タイトル:ロールアウト設定のタイトル(例:My Rollout Configuration)
    • 名前:プロパティ値を格納するノードの名前(例:myrolloutconfig)
    • RolloutConfig テンプレート」を選択します。
  4. 「作成」をクリックします。

  5. 作成したロールアウト設定をダブルクリックして開き、追加の設定をおこないます。

  6. 編集」をクリックします。

  7. ロールアウトの設定ダイアログで、「トリガーを同期」を選択して、ロールアウトを発生させるアクションを定義します。

  8. OK」をクリックして、変更を保存します。

ロールアウト設定への同期アクションの追加

ロールアウト設定は、/etc/msm/rolloutconfigs ノードの下に保存されます。タイプ cq:LiveSyncAction の子ノードを追加して、同期アクションをロールアウト設定に追加します。同期アクションノードの順序によって、アクションが実行される順序が決まります。

  1. CRXDE Lite を開きます。例:http://localhost:4502/crx/de

  2. ロールアウト設定ノードの下にある jcr:content ノードを選択します。

    例えば、名前プロパティが myrolloutconfig のロールアウト設定の場合は、次のノードを選択します。

    /etc/msm/rolloutconfigs/myrolloutconfig/jcr:content

  3. 作成」をクリックして、「ノードを作成」をクリックします。次のノードプロパティを設定して、「OK」をクリックします。

    • 名前:同期アクションのノード名。名前は、同期アクションの下の表の「アクション名」と同じである必要があります。例えば、contentCopy または workflow です。
    • タイプcq:LiveSyncAction
  4. 作成したアクションノードを選択し、次のプロパティをそのノードに追加します。

    • 名前:アクションのプロパティ名。名前は、同期アクションの下の表の「プロパティ名」と同じである必要があります。例えば、enabledです。
    • タイプ:String
    • :アクションのプロパティ値。有効な値については、同期アクションプロパティ列を参照してください。例えば、true です。
  5. 必要に応じてさらに同期アクションノードを追加して設定します。アクションノードを実行する順序に並べ替えます。一番上のアクションノードが最初に実行されます。

  6. すべて保存」をクリックします。

シンプルな LiveActionFactory クラスの作成と使用

この節の手順を実行して LiveActionFactory を作成し、ロールアウト設定で使用します。この手順では、Maven と Eclipse を使用して、LiveActionFactory を作成およびデプロイします。

  1. Maven プロジェクトを作成し、Eclipse に読み込みます。
  2. POM ファイルに依存関係を追加します。
  3. LiveActionFactory インターフェイスを実装し、OSGi バンドルをデプロイします。
  4. ロールアウト設定を作成します。
  5. ライブコピーを作成します。

Maven プロジェクトと Java クラスのソースコードは、公開されている Git リポジトリで入手できます。

GitHub のコード

このページのコードは GitHub にあります

Maven プロジェクトの作成

以下の手順では、adobe-public プロファイルを Maven 設定ファイルに追加している必要があります。

  1. 端末またはコマンドラインセッションを開き、ディレクトリがプロジェクトを作成する場所を指すように変更します。

  2. 以下のコマンドを入力します。

    mvn archetype:generate -DarchetypeGroupId=com.day.jcr.vault -DarchetypeArtifactId=multimodule-content-package-archetype -DarchetypeVersion=1.0.0 -DarchetypeRepository=adobe-public-releases
  3. インタラクティブなプロンプトで、次の値を指定します。

    • groupIdcom.adobe.example.msm
    • artifactIdMyLiveActionFactory
    • version1.0-SNAPSHOT
    • packageMyPackage
    • appsFolderNamemyapp
    • artifactNameMyLiveActionFactory package
    • packageGroupmyPackages
  4. Eclipse を起動して、Maven プロジェクトを読み込みます

POM ファイルへの依存関係の追加

LiveActionFactory コード内で使用されるクラスを Eclipse コンパイラーが参照できるようにするために、依存関係を追加します。

  1. Eclipse Project Explorer から次のファイルを開きます。

    MyLiveActionFactory/pom.xml  

  2. エディターで、「pom.xml」タブをクリックし、project/dependencyManagement/dependencies セクションを探します。

  3. 次の XML を dependencyManagement 要素内に追加して、ファイルを保存します。

    	<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. Project Explorer から、バンドルの POM ファイル MyLiveActionFactory-bundle/pom.xml を開きます。

  5. エディターで、「pom.xml」タブをクリックし、project/dependencies セクションを探します。次の XML を dependencies 要素内に追加して、ファイルを保存します。

    	<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 クラスは、ソースページとターゲットページに関するメッセージをログに記録し、ソースノードからターゲットノードに cq:lastModifiedBy プロパティをコピーする LiveAction を実装します。ライブアクション名は exampleLiveAction です。

  1. Eclipse Project Explorer で、MyLiveActionFactory-bundle/src/main/java/com.adobe.example.msm パッケージを右クリックし、NewClass をクリックします。「Name」に「ExampleLiveActionFactory」と入力し、「Finish」をクリックします。

  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.api.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 {
    		}
    	}
    }
    
  3. 端末またはコマンドセッションを使用して、ディレクトリを MyLiveActionFactory ディレクトリ(Maven プロジェクトディレクトリ)に変更します。以下のコマンドを入力します。

    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. 次のプロパティと標準の手順を使用して、ロールアウト設定を作成および設定します。
    1. 作成:
      1. タイトル:ロールアウト設定例
      2. 名前: examplerolloutconfig
      3. RolloutConfig テンプレートを使用
    2. 編集:
      1. トリガーを同期:アクティベート時

ロールアウト設定例へのライブアクションの追加

前の手順で作成したロールアウト設定で ExampleLiveActionFactory クラスを使用するように設定します。

  1. CRXDE Lite を開きます。例:http://localhost:4502/crx/de

  2. /etc/msm/rolloutconfigs/examplerolloutconfig/jcr:content の下に次のノードを作成します。

    • 名前exampleLiveAction
    • タイプcq:LiveSyncAction
    chlimage_1
  3. すべて保存」をクリックします。

  4. exampleLiveAction ノードを選択して、次のプロパティを追加します。

    • 名前repLastModBy
    • タイプBoolean
    • true

    このプロパティは、cq:LastModifiedBy プロパティをソースノードからターゲットノードにレプリケートする必要がある ExampleLiveAction クラスを示します。

  5. すべて保存」をクリックします。

ライブコピーの作成

ロールアウト設定を使用して、We.Retail 参照サイトの English/Products ブランチのライブコピーを作成します。

  • ソース/content/we-retail/language-masters/en/products
  • ロールアウト設定:ロールアウト設定例

ソースブランチの Products(english)ページをアクティベートし、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 ***

サイトを作成ウィザードでの章ステップの削除

場合によっては、サイトを作成ウィザードで、「」の選択は必要ありません(「言語」の選択は必要です)。デフォルトの We.Retail English ブループリントでこの手順を削除するには、以下の手順を実行します。

  1. CRX Explorer で、次のノードを削除します。
    /etc/blueprints/weretail-english/jcr:content/dialog/items/tabs/items/tab_chap
  2. /libs/wcm/msm/templates/blueprint/defaults/livecopy_tab/items に移動して、新しいノードを作成します。
    1. Name = chapters; Type = cq:Widget.
  3. 以下のプロパティを新しいノードに追加します。
    1. Name =name; Type = String; Value = msm:chapterPages
    2. Name = value; Type = String; Value = all
    3. Name = xtype; Type = String; Value = hidden

言語名とデフォルトの国の変更

AEM では、言語コードと国コードのデフォルトセットを使用します。 

  • デフォルトの言語コードは、ISO-639-1 で定義されている小文字 2 文字のコードです。
  • デフォルトの国コードは、ISO 3166 で定義されている小文字または大文字 2 文字のコードです。

MSM は、保存されている言語コードと国コードのリストを使用して、ページの言語バージョン名に関連付けられている国名を判断します。必要に応じて、リストの次の要素を変更できます。

  • 言語タイトル
  • 国名
  • (特に ende などのコードの)言語に対するデフォルトの国

言語のリストは、/libs/wcm/core/resources/languages ノードの下に保存されています。各子ノードは、言語または言語-国を表します。

  • ノード名は、言語コード(en または de など)や言語_国コード(en_us または de_ch など)です。
  • ノードの language プロパティには、そのコードが表す言語の正式名称が格納されます。
  • ノードの country プロパティには、そのコードが表す国の正式名称が格納されます。
  • ノード名が言語コードのみ(en など)で構成されている場合、country プロパティは * で、追加の defaultCountry プロパティに使用する国を示す言語-国のコードが格納されます。
chlimage_1

言語の変更手順

  1. Web ブラウザーで CRXDE Lite を開きます。例:http://localhost:4502/crx/de

  2. /apps フォルダーを選択し、「作成」をクリックして、「フォルダーを作成」をクリックします。

    新しいフォルダーに「wcm」という名前を付けます。

  3. 前のステップを繰り返して、/apps/wcm/core フォルダーツリーを作成します。タイプ sling:Folder resources というノードを core に作成します。

    chlimage_1
  4. /libs/wcm/core/resources/languages ノードを右クリックして、「コピー」をクリックします。

  5. /apps/wcm/core/resources フォルダーを右クリックして、「貼り付け」をクリックします。必要に応じて子ノードを変更します。

  6. すべて保存」をクリックします。

  7. ツール操作Web コンソールの順にクリックします。このコンソールから「OSGi」をクリックし、次に「設定」をクリックします。

  8. Day CQ WCM Language Managerを探してクリックし、「言語リスト」の値を /apps/wcm/core/resources/languages に変更して、「保存」をクリックします。

    chlimage_1

ページプロパティに対する MSM ロックの設定(タッチ操作向け UI)

カスタムページプロパティの作成時に、新しいプロパティをすべてのライブコピーへのロールアウトの対象にするかどうかを検討しなければならない場合があります。

例えば、次の 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 に追加および削除します。
      • ダイアログのロジックと異なり、MSM は深いプロパティ(./image/fileReference など)を操作しません。チェーンがオープンされている場合、ページのロールアウトは ./image/fileReference を上書きします。image ノードのロールアウトは、親ノードまで遡って cq:propertyInheritanceCancelled を確認しないからです。
    • 絶対指定の場合(例:/image
      • チェーンを解除すると、cq:LiveSyncCancelled mixin が ./image に追加され、cq:isCancelledForChildrentrue に設定されて、継承がキャンセルされます。
      • チェーンを閉じると、継承が元に戻ります。

注意:

継承を再度有効にしても、ライブコピーページのプロパティはソースのプロパティとは自動的には同期されません。必要な場合は、手動で同期をリクエストできます。

本作品は Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License によってライセンス許可を受けています。  Twitter™ および Facebook の投稿には、Creative Commons の規約内容は適用されません。

リーガルノーティス   |   プライバシーポリシー