Frage

Ich erstelle ein benutzerdefiniertes Bearbeitungssteuerelement für meine Inhaltsautoren zur Verwendung im Seiteneditor.Das bedeutet natürlich, dass mein Steuerelement Daten in einem Element speichern soll, wenn der Benutzer auf die Schaltfläche „Speichern“ klickt.

Wie wird das gemacht?Ich habe viele Unmengen an Dokumentation durchgesehen ...Ich habe das Gefühl, dass mir etwas Grundlegendes fehlt.Sicherlich kann ich hier meinen eigenen Event-Handler hinzufügen?

NOTIZ:Ich möchte, dass dies eine INLINE-Bearbeitung im Seiteneditor ist.Es scheint eine sehr grundlegende Funktion zu sein, die in Sitecore fehlt.Ich könnte mir durchaus vorstellen, einen Checkbox-Eintrag auch für ein Checkbox-Feld zu verwenden (Was für eine verrückte Idee?!?!).Die einzigen integrierten Optionen zum Bearbeiten scheinen ein Textfeld oder ein RichText-Editor zu sein.Übersehe ich etwas Offensichtliches?

War es hilfreich?

Lösung

OK ... Nach einiger Hilfe von Sitecore -Unterstützung habe ich endlich die Antwort auf diese Frage erhalten. Damit der Page -Editor neue Werte für Fields erhalten kann, muss die Funktion von Sitecore.Webedit.SetfieldValue () JavaScript aufrufen. Dadurch wird ein verstecktes Eingabefeld erstellt, auf dem der Seite mit dem Seitenstamm gelesen wird, wenn die Schaltfläche Speichern oder Speichern/Schließen klickt.

//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));

Grundsätzlich fügen wir nur einen clientseitigen Onchange-Handler für die DropdownList hinzu, die diese Sitecore-JS-Funktion aufruft. Notiz: Ich glaube, das erfordert Sitecore 6.2.

Andere Tipps

Wenn ich eine benutzerdefinierte Steuerung erstellen muss, verwende ich sie im normalen Modus und verwende dann einfach einen SC: Text (oder was auch immer), während der Benutzer im Bearbeitungsmodus ist. Auf diese Weise bekomme ich die gesamte Sitecore -Güte ohne den Ärger. Eine Möglichkeit, dies zu tun, besteht darin, eine Multiviews zu verwenden, die wie folgt aussieht:

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

Stellen Sie dann im Code-Behind sicher, dass Sie die richtige Ansicht für den richtigen Modus auswählen.

Sie können auch den Feldeditor verwenden, um ein Popup aufzurufen, in dem Sie die benötigten Informationen bearbeiten können.Nehmen wir zum Beispiel an, Sie tun Folgendes:

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

Wenn also jemand im PageEditor-Modus (Bearbeiten) mit der Maus über den HTML-Code fährt, den Sie in den EditFrame eingefügt haben, wird ein Popup-Menü angezeigt.In diesem Menü können Sie eine beliebige Anzahl von Befehlen anzeigen. Der normale Befehl wäre eine „Bearbeiten“-Option, die dann einen Dialog öffnet, in dem Sie alle gewünschten Felder aus jedem Inhaltselement in der Baumstruktur bearbeiten können.

Wie konfigurieren Sie die verfügbaren Optionen?Über die Schaltflächen-Eigenschaft muss auf einen Ordner in der Kerndatenbank unter den Frame-Schaltflächen /sitecore/content/Applications/WebEdit/Edit verwiesen werden (siehe Standardeinstellung als Beispiel).Dort können Sie auch festlegen, welche Felder bearbeitet werden sollen.Im obigen Snippet erwartet Sitecore, einen Ordner namens MyThing zu finden.

Woher weiß es, von welchem ​​Element Felder bearbeitet werden sollen?Wenn Sie nichts angeben, handelt es sich um das Context.Item. Wenn Sie etwas anderes wünschen, verwenden Sie die datasource-Eigenschaft des editFrame-Steuerelements und legen Sie beispielsweise eine ID fest.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top