Как мне перехватить событие Save в редакторе страниц Sitecore? - PullRequest
2 голосов
/ 12 января 2010

Я создаю пользовательский элемент управления для редактирования, чтобы мои авторы контента могли использовать его в редакторе страниц. Конечно, это означает, что я хочу, чтобы мой элемент управления сохранял данные в элементе, когда пользователь нажимает кнопку «Сохранить».

Как это сделать? Я просмотрел множество документов ... чувствую, что мне не хватает чего-то простого. Конечно, я могу добавить свой собственный обработчик событий здесь?

ПРИМЕЧАНИЕ. Я хочу, чтобы это было редактирование INLINE в редакторе страниц. Кажется, что это очень простая функция, отсутствующая в Sitecore. Я, конечно, мог видеть использование флажка также для поля флажка (Что за сумасшедшее понятие?!?!). Единственными встроенными опциями для редактирования являются текстовое поле или редактор RichText. Я что-то упускаю из виду?

Ответы [ 3 ]

2 голосов
/ 20 января 2010

ОК ... после некоторой помощи службы поддержки Sitecore, я наконец-то получил ответ на этот вопрос. Чтобы редактор страниц мог получать новые значения для полей, необходимо вызвать функцию javascript Sitecore.WebEdit.setFieldValue (). Это создает скрытое поле ввода, которое затем читает PageEditor при нажатии кнопки «Сохранить» или «Сохранить / Закрыть».

//RenderItem is the item in question, DropListField is the string name of
//the target Droplist field we want rendered
string itemID = RenderItem.ID.ToShortID().ToString();
string fieldID = RenderItem.Fields[DropListField].ID.ToShortID().ToString();
string language = RenderItem.Language.ToString();
string version = RenderItem.Version.ToString();
string revision = RenderItem[FieldIDs.Revision].Replace("-", string.Empty);

ddlList.Attributes.Add("onchange", string.Format("var ddl = getElementById('{5}');var itemURI = new Sitecore.ItemUri('{0}','{1}','{2}','{3}');Sitecore.WebEdit.setFieldValue(itemURI,'{4}',ddl.options[ddl.selectedIndex].value);",itemID,language,version,revision,fieldID,ddlList.ClientID));

Итак, мы просто добавляем обработчик onchange на стороне клиента для DropDownList, который вызывает эту функцию Sitecore js. Примечание: Я считаю, что для этого требуется Sitecore 6.2 .

0 голосов
/ 15 января 2010

Вы также можете использовать редактор полей, чтобы вызвать всплывающее окно для редактирования необходимой информации. Скажем, например, вы делаете:

<sc:EditFrame runat="server" Buttons="MyThing">
<!-- any html, or other controls -->
</sc:EditFrame>

Так что, когда кто-то в режиме PageEditor (Edit) наведет курсор на HTML, который вы поместили в EditFrame, он получит всплывающее меню. В этом меню вы можете отобразить любое количество команд, обычной будет опция «Редактировать», которая затем открывает диалоговое окно, где вы можете редактировать любые поля, которые вы хотите, из любого элемента содержимого в дереве.

Как настроить доступные параметры? Через свойство Buttons он должен указывать на папку в основной базе данных в папке / sitecore / content / Applications / WebEdit / Edit Frame Buttons (см. Пример по умолчанию). Там же вы можете указать, какие поля редактировать. В приведенном выше фрагменте Sitecore ожидает найти папку с именем MyThing.

Как узнать, из какого элемента можно редактировать поля? Если вы ничего не указали, это будет Context.Item, если вы хотите что-то еще, используйте свойство источника данных элемента управления editFrame и установите для него, например, некоторый идентификатор.

0 голосов
/ 13 января 2010

Когда мне нужно создать пользовательский элемент управления, я использую его в обычном режиме, а затем просто использую sc: Text (или любой другой), пока пользователь находится в режиме редактирования. Таким образом, я получаю все добро Sitecore без хлопот. Один из способов сделать это - использовать Multiview, который выглядит примерно так:

<MultiView>
  <View id=NormalView>
    <MyAwesomeCustomControl />
  </View>
  <View id=EditView>
    <sc:Text />
  </View>
</MultiView>

Затем в выделенном фрагменте кода убедитесь, что вы выбрали правильный вид для правильного режима.

...