残念ながら、Adam Najmanowicz's answerに記載されているパイプラインは、DroplinkやMultilistのような他のタイプでも機能しますが、パイプラインはDroptreeフィールドでは実行されません。
この深くに見た後、私はアダムが述べたようにDroptreeフィールドのソースは、間違ったコンテキスト項目を使用していることがわかったが、コードはDroptreeフィールド自体から来ている: -
Sitecore.Shell.Applications.ContentEditor.Tree, Sitecore.Kernel
活用しますAdamの回答のクエリ文字列コードでは、通常のDroptreeとほぼ同じですが、代わりに正しいコンテキスト項目を使用する、固定のDroptreeカスタムフィールドを作成できます。 コードは通常のTreeコントロールを継承し、Sourceプロパティの設定方法のみを変更します。私たちは私たちがしていることを検出した場合、我々はURLから適切なコンテキスト項目を見つけ出すことを除いて
public class QueryableTree : Sitecore.Shell.Applications.ContentEditor.Tree
{
// override the Source property from the base class
public new string Source
{
get
{
return StringUtil.GetString(new string[]
{
base.Source // slightly altered from the original
});
}
set
{
Assert.ArgumentNotNull(value, "value");
if (!value.StartsWith("query:", StringComparison.InvariantCulture))
{
base.Source = value; // slightly altered from the original
return;
}
Item item = Client.ContentDatabase.GetItem(this.ItemID);
// Added code that figures out if we're looking at rendering parameters,
// and if so, figures out what the context item actually is.
string url = WebUtil.GetQueryString();
if (!string.IsNullOrWhiteSpace(url) && url.Contains("hdl"))
{
FieldEditorParameters parameters = FieldEditorOptions.Parse(new UrlString(url)).Parameters;
var currentItemId = parameters["contentitem"];
if (!string.IsNullOrEmpty(currentItemId))
{
Sitecore.Data.ItemUri contentItemUri = new Sitecore.Data.ItemUri(currentItemId);
item = Sitecore.Data.Database.GetItem(contentItemUri);
}
}
if (item == null)
{
return;
}
Item item2 = item.Axes.SelectSingleItem(value.Substring("query:".Length));
if (item2 == null)
{
return;
}
base.Source = item2.ID.ToString(); // slightly altered from the original
}
}
上記のコードは、かなりのベースツリーフィールド上のSourceプロパティと同じですレンダリングパラメータダイアログ。
カスタムフィールドを作成するには、Web.Configファイルをhereのように編集する必要があります。次に、hereの説明に従って、カスタムフィールドをコアデータベースに追加します。
これは、パラメータがソースのクエリを持つようになり、利用可能なアイテムをコンテンツエディタに制限できるようになりました。 (マルチサイトソリューションに便利です)。
このフィールドでデータソースを「設定」タイプのアイテムにすると、説明したようにクエリソースを持つ通常のDroptreeコントロールを持つことができます。さらに、データソースに固執しているので、コントロールは簡単にパーソナライズ可能で、多変量テスト可能です。 –
パーソナライズとテストのことは真ですが、このコントロールは既にコントロールの別のプロパティとしてDataSourceフィールドを使用しています。しかし、唯一の選択可能なプロパティであればDataSourceを代わりに使用できます。 –