Customizing: Öffnen des Content-Editors innerhalb des PageEditors

Es gibt Situationen in denen man gerne innerhalb des Page-Editors auf die Werkzeuge des Content-Editors zugreifen möchte. Für diese Anforderungen kann man in Sitecore den PageEditor-Ribbon mit weiteren Buttons einfach und ohne Programmieranpassungen erweitern:

Die Gruppen und Buttons des PageEditor-Ribbon sind unter /sitecore/conent/Applications/WebEdit/Ribbons/WebEdit/ in der Core-Datenbank ersichtlich. Hier können auch die bereits vorhanden Gruppen und Buttons verändert, gelöscht oder modifiziert werden. Auch die Erzeugung neuer Menü-Einträge sollte so einfach ersichtlich sein. Um einen neuen „Reiter“ im Ribbon zu erzeugen muss ein Item vom Template /sitecore/templates/System/Ribbon/Strip erzeugt werden. Darunter, die Gruppierung innerhalb dieser Lasche werden mit Items des Templates /sitecore/templates/System/Ribbon/Chunk erstellt. Grafisch erkennt man keinen Unterschied und alle Items besitzen die gleiche Icon-Präsentation:

Wie in der Grafik ersichtlich haben wir einen „Strip“ mit dem Namen „myRibbon“ und einen „Chunk“ namens „Edit“. Darunter gibt es einige Buttons die als Basis das Template /sitecore/templates/System/Ribbon/Small Button besitzen.

Elementar bei diesem Item ist der Anzeigetext unter „Header“, sowie die Angabe des Sitecore-Commands unter „Click“. Alle Commands sind in Sitecore in der Commands.Config definiert/registriert. So auch das angegebene webdedit:opencontenteditor.
Das oben erwähnte Beispiel öffnet nun beim Click auf den Button „Edit Current Page“ den Content-Editor des aktuellen Context-Items.

Folgende Möglichkeiten bietet der Command „Opencontenteditor“ :

  • Öffnen des Context-Items im Content-Editor:
    webedit:opencontenteditor(mo=edit)
  • Öffnen eines bestimmten Items im Content-Editor:
    webedit:opencontenteditor(fo={C1926B32-9EDF-4DA4-BA7B-15A23800A062}, mo=edit)
  • Öffnen eines bestimmten Items im Content-Editor mit definiertem Root:
    webedit:opencontenteditor(fo={C1926B32-9EDF-4DA4-BA7B-15A23800A062}, ro={C1926B32-9EDF-4DA4-BA7B-15A23800A062}, mo=edit)

Dynamische Variante:

Die statische Variante bietet einem meist die gewünschte Flexibilität. Man kann den Content-Editor aus dem Page-Editor heraus öffnen – im Fokus das Context-Item oder ein vordefiniertes Item, beispielsweise ein bestimmtes Projekt-Settings-Item.
Wenn die Anforderungen jedoch mehr verlangen, kann auch ein eigener Button mit gewünschter Funktionalität erstellt werden. Beispielsweise, wenn es sich um kein statisches Item handelt, sondern ein bestimmtes Setting in Bezug auf den momentanen Context (aber nicht das Context-Item selber) steht. Beispielsweise bei einer Multi-Mandanten-Lösung, bei dem der Button die Konfigurationsdateien des Mandanten X öffnen sollte.

Folgend eine kleine drei Punkte Anleitung, die einem bei diesem Problem helfen sollte:

1. Der Code
Hierfür erstellen wir nun einen eigenen Button. Basisklasse ist die Sitecore.Shell.Framework.Commands.Command-Klasse:

public class OpenSampleWindow : Command
{
///
/// The execute.
///

////// The context.
/// public override void Execute(CommandContext context)
{
var url = new UrlString("/sitecore/shell/Applications/Content Manager/default.aspx");
url.Add("ro", OverlaysRoot.ToString());

if (HttpContext.Current != null && !string.IsNullOrEmpty(HttpContext.Current.Request.QueryString["id"]))
{
var item = Client.ContentDatabase.GetItem(new ID(HttpContext.Current.Request.QueryString["id"]));

if (item != null && item.TemplateName.Equals("SampleTemplateNameCheckIfisItInterestingForYour", System.StringComparison.InvariantCultureIgnoreCase))
{
url.Add("fo", SelectedItem.ToString());
}
}

url.Add("mo", "edit");
SheerResponse.Eval("window.open('" + url + "', 'ContentEditor', 'location=0,resizable=1')");
}

///
/// Gets the overlays root.
///

private ID OverlaysRoot
{
get
{
Item overlaysRoot = Client.ContentDatabase.GetItem("/sitecore/content/myPath");
Assert.IsNotNull(overlaysRoot, "Could not find Container at /sitecore/content/myPath");
return overlaysRoot.ID;
}
}

///
/// Gets the selected item.
///

private ID SelectedItem
{
get
{
Item item = Client.ContentDatabase.GetItem("/sitecore/content/myPath/itemSpecial");

Assert.IsNotNull(item, "Could not find Item with the current context");
return item.ID;
}
}

}

Die Herleitung des Items ist natürlich spezifisch und Anforderungs-Abhängig. Schlussendlich öffnet dieser Button den Content-Editor als internes Popup-Window mit dem hergeleiteten Root-Item (wenn benötigt) mit dem im Code definierten Item.

2. Die Registration des Buttons
Damit dieser Button nun verwendet werden kann, muss er in der Commands.Config (App_Config\Commands.config) registriert werden. Genügend-Beispiele gibt es hier auch von den bestehenden Buttons bereits – hier unsere Beispielsvariante:

<command type="mySample.Namics.Blog.Commands.OpenSampleWindow,mySaple.Namics.Blog"></command>

3. Core-DB konfigurieren
Der dritte Schritt ist der bereits bekannte Schritt aus der statischen Variante. Ein Button-Item in der Core-DB erstellen:

Voilà! Wenn alles geklappt hat, erscheint nun im Page-Editor ein neuer Button mit der gewünschten Funktionalität für den Author. Effekt: Produktionssteigerung für Content-Authoren in wenigen Schritten.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>