Access Checklist、Multilist、Treelist、およびTreelistExフィールド
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
Sitecore.Data.Fields.MultilistFieldクラスを使用して、ユーザーがChecklist、Multilist、Treelist、TreelistExなどの複数の項目を選択できるフィールド タイプにアクセスできます。
Sitecore.Data.Fields.MultilistField.GetItems() メソッドを使用すると、フィールドで指定されたアイテムを表すSitecore.Data.Item.Itemオブジェクトの一覧にアクセスできます。たとえば、次のC# コードは、relatedという名前のMultilistフィールドで指定された項目を反復処理する方法を示しています。
public ActionResult Index()
{
DogModel myDog;
var dogs = new List<DogModel>();
//Get the current page using Sitecore Item API
var currentPage = Sitecore.Context.Item;
//Cast to a Sitecore item
Sitecore.Data.Items.Item myItem = (Sitecore.Data.Items.Item)currentPage;
//Read the Multifield List
Sitecore.Data.Fields.MultilistField multiselectField = myItem.Fields["related"];
Sitecore.Data.Items.Item[] items = multiselectField.GetItems();
//Iterate through each item
if (items != null && items.Length > 0)
{
for (int i = 0; i < items.Length; i++)
{
//Allocate memory to the model
myDog = new DogModel();
Sitecore.Data.Items.Item dogItem = items[i];
myDog.name = FieldRenderer.Render(dogItem, "Name");
myDog.long_description = FieldRenderer.Render(dogItem, "LongDescription");
myDog.breed = FieldRenderer.Render(dogItem, "Breed");
//Get the link to the page
var myLink = Sitecore.Links.LinkManager.GetItemUrl(dogItem);
//Need to check and if /en is there - remove it
if (myLink.StartsWith("/en"))
//remove it
myLink = myLink.Substring(myLink.LastIndexOf("/Dogs"));
myDog.uri = myLink;
//push to the list
dogs.Add(myDog);
}
}
//Return the collection to the view
return View(dogs);
}
Sitecore.Data.Fields.MultilistField.GetItems()メソッドによって返されるリストの個々のメンバーは、決してNullではありません。ユーザーがそのアイテムへの参照を更新せずにアイテムを削除した場合、Sitecore.Data.Fields.MultilistField.GetItems() メソッドはそのアイテムを結果から除外します。
また、Sitecore.Data.Fields.MultilistFieldクラスを使用して、Droplink、Droptree、およびGrouped Droplinkタイプのフィールドにアクセスすることもできます。このアプローチでは、1つ以上のSitecoreアイテムのIDを格納するすべてのフィールド タイプに対して1つのプログラミング モデルが提供され、フィールドのタイプを変更した場合にコードを更新する必要性を減らすことができます。 Droplink、Droptree、およびGrouped Droplinkは複数の項目の選択をサポートしていないため、Sitecore.Data.Fields.Multilistクラスを使用してこれらの種類のフィールドを更新しないでください。
サポートされているフィールド タイプに項目を追加するにはSitecore.Data.Fields.MulitlistField.Add() メソッドを使用し、項目を削除するにはSitecore.Data.Fields.MulitlistField.Remove() メソッドを使用します。たとえば、Master データベースの /Sitecore/Content/HomeアイテムのTreelistEx Multiselectフィールドが /Sitecore/Content/Home/Sample1アイテムを指定し、/Sitecore/Content/Home/Sample2アイテムは指定しないようにするには、次のようにします。
Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Sitecore.Data.Items.Item home = master.GetItem("/sitecore/content/home");
Sitecore.Data.Items.Item sample1 = master.GetItem("/sitecore/content/home/sample1");
Sitecore.Data.Items.Item sample2 = master.GetItem("/sitecore/content/home/sample2");
Sitecore.Data.Fields.MultilistField multiselectField = home.Fields["multiselect"];
if(multiselectField.Contains(sample2.ID.ToString()) || !multiselectField.Contains(sample1.ID.ToString()))
{
home.Editing.BeginEdit();
if(!multiselectField.Contains(sample1.ID.ToString()))
{
multiselectField.Add(sample1.ID.ToString());
}
if(multiselectField.Contains(sample2.ID.ToString()))
{
multiselectField.Remove(sample2.ID.ToString());
}
home.Editing.EndEdit();
}