Access Checklist、Multilist、Treelist、およびTreelistExフィールド

Version: 10.1
日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

Sitecore.Data.Fields.MultilistFieldクラスを使用して、ユーザーがChecklistMultilistTreelistTreelistExなどの複数の項目を選択できるフィールド タイプにアクセスできます。

Sitecore.Data.Fields.MultilistField.GetItems() メソッドを使用すると、フィールドで指定されたアイテムを表すSitecore.Data.Item.Itemオブジェクトの一覧にアクセスできます。たとえば、次のC# コードは、relatedという名前のMultilistフィールドで指定された項目を反復処理する方法を示しています。

RequestResponse
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クラスを使用して、DroplinkDroptree、およびGrouped Droplinkタイプのフィールドにアクセスすることもできます。このアプローチでは、1つ以上のSitecoreアイテムのIDを格納するすべてのフィールド タイプに対して1つのプログラミング モデルが提供され、フィールドのタイプを変更した場合にコードを更新する必要性を減らすことができます。 DroplinkDroptree、および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アイテムは指定しないようにするには、次のようにします。

RequestResponse
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();
}

何かフィードバックはありますか?

この記事を改善するための提案がある場合は、