2010-01-12 3 views
2

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

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

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

ответ

2

OK ... после некоторой помощи от поддержки 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 расслоение плотной. Примечание: Я считаю, что для этого требуется Sitecore 6.2.

0

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

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

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

+0

К сожалению, это точно противоположно тому, что мне нужно. Я хочу показать asp: DropDownList при редактировании поля Droplist для моего элемента. Таким образом, пользователь может просто выбрать новое значение из раскрывающегося списка, например, в Редакторе содержимого, не выходя из Редактора страниц. – Bryan

0

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

<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, если вы хотите что-то еще, используйте свойство datasource элемента управления editFrame и установите его, например, для некоторого ID.

+0

Спасибо. Вероятно, это то, что я в конечном итоге сделаю. Я немного раздражен тем, что создание варианта редактирования INLINE настолько сложно. – Bryan

 Смежные вопросы

  • Нет связанных вопросов^_^