2012-10-18 20 views
6

Napisałem rozszerzenie GUI, które dodaje dodatkową kartę do wielu widoków elementów w CML Tridion CME (np. Komponent, strona i schemat itp.). Napisałem też trochę JavaScriptu, który ładuje tę kartę bezpośrednio, jeśli w widoku jest załadowany nazwa karty podana w adresie URL.Jak można rozszerzyć domyślne zachowanie Tridion.Cme.Commands.Open.prototype._execute()?

Rezultatem jest to, że jeśli strona jest ładowany z nazwą zakładki w brzmieniu:

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

zamiast domyślnego

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

informacji Tab zostanie załadowany na górze, zamiast zakładki Ogólne. Jest to wykonywane z poniższym fragmencie kodu i działa bardzo dobrze:

$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);   
    } 
} 

Teraz chciałbym zrobić menu kontekstowego, aby otworzyć pozycje i odnośnik do zakładek za pomocą moją nową funkcjonalność. Moją pierwszą myślą było skonstruowanie adresu URL produktu i po prostu otworzyć nowe okno w mojej metodzie wykonywania. Tak więc przyjrzałem się domyślnej funkcjonalności standardowej funkcjonalności GUI w postaci Open.prototype_execute(). Jest to przechowywane w pliku CME navigation.js i jest wykonywane przy użyciu metody Tridion.Cme.Commands.Open.prototype._execute. Kod jest o wiele bardziej skomplikowany, niż się spodziewałem, ponieważ zajmuje się udostępnionymi przedmiotami i pozwoleniami, itp.

Zamiast tylko kopiować cały ten kod do mojej własnej funkcji, zastanawiałem się, czy istnieje sposób na eleganckie przedłużenie istniejącą funkcję Open.prototype_execute() i dołącz moją "& tab = MyTab" do stałej $cme.Popups.OPEN_ITEM_OPTIONS.URL dla moich własnych funkcji.

Każda rada byłaby mile widziana.

Odpowiedz

3

Na koniec polecenie Otwórz używa $config.getEditorUrl(item_type), aby uzyskać adres URL dla widoku elementu (item_type - $const.ItemType.COMPONENT, itp.). Nie ma punktów rozszerzenia dla tej części funkcji, ale zawsze można spróbować zastąpić ją na własne ryzyko.

Powiązane problemy