Как создать динамический источник для мультилиста в Sitecore?

У меня есть следующая структура дерева контента:

  • Home
    • Products
      • Product A
      • Продукт Б
    • Organizations
      • Org 1
      • Org 2
        • Org Config X
        • Конфигурация организации Y

Каждая организация в разделе «Организации» имеет поле «Сопутствующие товары», которое представляет собой мультисписок. Это сообщает системе, какие продукты поставляются с каждой организацией. В шаблоне данных конфигурации организации есть поле под названием «Выбранные продукты». Когда я добавляю новый элемент контента «Конфигурация организации» (который всегда находится непосредственно под организацией), я хотел бы иметь возможность ограничить элементы, отображаемые в поле «Выбранные продукты» (которое представляет собой мультисписок), чтобы отображались только продукты, которые уже связан с родительской организацией. Я думаю, что может быть способ сделать это с помощью Sitecore Query, но я не могу понять это. Любые идеи?


person Corey Burnett    schedule 02.05.2013    source источник


Ответы (2)


С помощью Sitecore я разобрался. В основном вам нужно создать собственный элемент управления, который наследуется от MultilistEx. Затем вам нужно переопределить событие DoRender(). Прежде чем вызывать base.DoRender(), вы должны изменить источник (this.Source), чтобы использовать запрос Sitecore. Раньше я пытался сделать это в событии OnLoad. Итак, мой код теперь выглядит так:

public class CustomMultiList : MultilistEx
{
  private void ExcludeItems()
  {
    ...custom code here that builds a list of Item IDs to exclude from the Multilist source...
    ...list should look like this "@@id != 'some guid' and @@id != 'some guid' and so forth...
    ...you could also build a list of item ids to include. Any Sitecore query will do...
    ...you can use this.ItemID to get a reference to the current item that is being edited in the Content Editor...

    this.Source = "query:" + this.Source + "/*[" + myListOfItemIdsToExclude + "]";
  }

  protected override void DoRender(output)
  {
    this.ExcludeItems();
    base.DoRender(output);
  }
}
person Corey Burnett    schedule 14.05.2013
comment
источники данных с кодированными полями также будут хорошим способом это тоже. - person jammykam; 27.05.2013

Я думаю, вам, вероятно, потребуется создать для этого настраиваемое поле. Вот несколько статей по теме:

person Martin Davies    schedule 02.05.2013
comment
Не уверен, почему за вас проголосовали, это хороший способ добиться этого, не связываясь с другими типами Sitecore ... - person jammykam; 06.05.2013