2012-10-18 10 views
6

Ich habe eine GUI-Erweiterung geschrieben, die eine zusätzliche Registerkarte zu vielen der Artikelansichten in SDL Tridion CME (z. B. Komponente, Seite und Schema usw.) hinzufügt. Ich habe auch etwas JavaScript geschrieben, das diese Registerkarte direkt lädt, wenn die Ansicht mit einem Tabnamen geladen ist, wird in der URL angegeben.Wie können Sie das Standardverhalten von Tridion.Cme.Commands.Open.prototype._execute() erweitern?

Das Ergebnis ist, dass, wenn eine Seite mit dem Namen der Registerkarte geladen wird wie folgt hinzugefügt:

http://localhost/WebUI/item.aspx?tcm=64#id=tcm:1-48-64&tab=InfoTab 

Anstatt der Standard von

http://localhost/WebUI/item.aspx?tcm=64#id=tcm:1-48-64 

die Registerkarte Informationen auf geladen werden, statt des allgemeinen Tabs. Dies wird mit dem folgenden Code-Schnipsel ausgeführt und funktioniert sehr gut:

$evt.addEventHandler($display, "start", onDisplayStarted); 

// This callback is called when any view has finished loading 
function onDisplayStarted() { 

    $evt.removeEventHandler($display, "start", onDisplayStarted); 
    var tabname = $url.getHashParam("tab"); 
    if (tabname != '') { 
     var tabControl = $controls.getControl($("#MasterTabControl"), "Tridion.Controls.TabControl"); 
     tabControl.selectItem(tabname);   
    } 
} 

Nun möchte ich ein Kontextmenüpunkt machen möchten, um Elemente und Link zu den Registerkarten öffnen meine neue Funktion verwenden. Mein erster Gedanke war, die Item-URL selbst zu erstellen und einfach ein neues Fenster in meiner execute-Methode zu öffnen. Also habe ich mir die Standardfunktionalität in der Standard-Open.prototype_execute()-Funktionalität der GUI angeschaut. Dies wird in der Datei navigation.js der CME gespeichert und wird von der Methode Tridion.Cme.Commands.Open.prototype._execute ausgeführt. Der Code ist viel komplizierter als ich erwartet hatte, da er sich mit geteilten Objekten und Berechtigungen usw. befasst.

Anstatt nur diesen ganzen Code in meine eigene Funktion zu kopieren, habe ich mich gefragt, ob es einen Weg gibt, elegant zu erweitern die bestehende Open.prototype_execute() Funktion und füge meine "& Registerkarte = MyTab" an die $cme.Popups.OPEN_ITEM_OPTIONS.URL Konstante für meine eigenen Funktionen an.

Jeder Rat würde sehr geschätzt werden.

Antwort

3

Am Ende verwendet der Befehl Öffnen $config.getEditorUrl(item_type), um die URL für die Artikelansicht zu erhalten (item_type - $const.ItemType.COMPONENT, usw.). Es gibt keine Erweiterungspunkte für diesen Teil der Funktionalität, aber Sie könnten immer versuchen, sie auf eigene Gefahr zu überschreiben.

Verwandte Themen