アイテムの挿入グループの一覧に表示されるアイテムの種類(テンプレート)の一覧は uiGetMasters パイプラインを使用して作成されます。
挿入オプションパイプラインにカスタムプロセッサを設定することで、すべてのアイテムに対して挿入グループに表示するアイテムの種類(テンプレート) を追加、削除する制御(ルール)を適用することができるようになります。
今回は データ定義クックブックに改定あるサンプルプロセッサを使用しています。
検証環境は次の通りです
- Sitecore CMS 6.6 Service Pack 1
- .NET 4.0
1.カスタムプロセッサの作成
2種類のカスタムプロセッサを作成します。AllowFolderAnywhe と LimitChildren というクラスを作成しました。 AllowFolderAnyWherはフォルダアイテムを作成できるようにするパイプラインプロセッサになります。 LimitChildren は サブアイテムの数が MaxChildren パラメータ(タグ) で設定された値より多い場合は 挿入オプションをクリアすることでサブアイテムを作成できないようにするパイプラインプロセッサになります。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace SCSupport.Core
{
/// <summary>
/// 常に挿入オプションにフォルダデータテンプレートを設定する
/// パイプラインプロセッサ
/// </summary>
public class AllowFolderAnywhe
{
public void Process(Sitecore.Pipelines.GetMasters.GetMastersArgs args)
{
Sitecore.Data.Items.Item folder = args.Item.Database.Items[Sitecore.TemplateIDs.Folder];
if (!args.Masters.Contains(folder))
{
args.Masters.Add(folder);
}
}
}
/// <summary>
/// サブアイテムの数がMaxChildren 以上の場合、挿入オプションをクリアする
/// パイプラインプロセッサ
/// </summary>
public class LimitChildren
{
private int _maxChildren = 25;
public int MaxChildren
{
set
{
_maxChildren = value;
}
get
{
return _maxChildren;
}
}
public void Process(Sitecore.Pipelines.GetMasters.GetMastersArgs args)
{
if (MaxChildren > -1 && args.Item.Children.Count >= MaxChildren)
{
args.Masters.Clear();
}
}
}
}
プロセッサを作成したら ビルドしてアセンブリをbinフォルダに配置します。
2. カスタムプロセッサをWeb.config に設定
作成したプロセッサのクラスをWeb.config の uiGetMasters パイプラインに追加します。
例えば次のように processor タグを追加して クラスのシグネチャを設定してください。今回は MaxChildren プロパティにマークアップから値を設定しています。
<processor mode="on" type="SCSupport.Core.LimitChildren, SCSupport">
<maxChildren>2</maxChildren>
</processor>
このように uiGetMasters パイプラインにプロセッサを追加することで アイテムの挿入オプションを作成するたびに プロセッサで実装したロジックが実行されるようになります。
3.まとめ
説明は以上です。今回は データ定義リファレンス のサンプルに従って カスタムの挿入オプションパイプラインプロセッサを作成しました。挿入ルールはアイテムやデータテンプレートに関連した アイテムに対して適用されるのに対し、 挿入オプションパイプラインプロセッサを実装すると すべてのアイテムに対して 挿入オプションのルールを適用することができるようになります。