Как получить ссылку на текущий отредактированный элемент, когда он находится внутри настраиваемого поля в Sitecore - PullRequest
0 голосов
/ 16 ноября 2011

В Sitecore я создал настраиваемое поле (по этому рецепту: http://sdn.sitecore.net/Articles/API/Creating%20a%20Composite%20Custom%20Field/Adding%20a%20Custom%20Field%20to%20Sitecore%20Client.aspx) Поле предназначено для использования в редакторе контента. К пользовательскому полю прикреплен пункт меню (небольшая текстовая кнопка, отображаемая чуть выше поля) Настраиваемое поле работает как положено, и пункт menu подключается к коду в классе настраиваемого поля, как и должно быть. Однако логика, которую я должен реализовать для элемента меню, требует, чтобы я получил ссылку на элемент, который в данный момент редактируется пользователем в редакторе контента.

Однако, к моему удивлению, это не работает:

Sitecore.Context.Item

Это не дает мне элемент, который пользователь в данный момент редактирует, а вместо этого элемент "редактора контента", который всегда один и тот же. Я бы подумал, что в API просто будет свойство какого-то объекта, но я не могу его найти.

Ответы [ 3 ]

2 голосов
/ 16 ноября 2011

Если вы следуете этой статье, то вы определили свойство в вашем элементе управления.

public string ItemID { get; set;}

.. это будет заполнено идентификатором элемента, который вы редактируете.Вы должны иметь возможность разрешить объект Item по этому идентификатору, используя что-то вроде:

Sitecore.Data.Database.GetDatabase("master").GetItem(ItemID)

.. Если вы просто ищете значение поля, которое вы редактируете, вы можете использовать base.Valueполе.

0 голосов
/ 26 апреля 2013

Стивен Поуп прав, хотя есть и другие свойства, которые вы можете «автоматически» извлечь из Sitecore.Некоторые свойства, такие как ItemID, добавляются в поле с помощью отражения.Также есть ItemVersion и Source, которые могут быть полезны для ваших пользовательских элементов управления.

Если вы заинтересовались, загляните внутрь класса Sitecore.Shell.Applications.ContentEditor.EditorFormatter и особенно его метода SetProperties:

ReflectionUtil.SetProperty(editor, "ItemID", field.ItemField.Item.ID.ToString());
ReflectionUtil.SetProperty(editor, "ItemVersion", field.ItemField.Item.Version.ToString());
0 голосов
/ 16 ноября 2011

Лучше всего спросить об этом на форуме разработчиков , там вы получите хороший ответ.

Хотя, просматривая код Sitecore, похоже, что это то, что вы хотите. Попробуйте прочитать его из ViewState:

public string ItemID
{
    get
    {
        return base.GetViewStateString("ItemID");
    }
    set
    {
        Assert.ArgumentNotNullOrEmpty(value, "value");
        base.SetViewStateString("ItemID", value);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...