2012-10-18 8 views
6

私は、SDL Tridion CMEの多くのアイテムビュー(コンポーネント、ページ、スキーマなど)にタブを追加するGUI拡張を作成しました。また、URLにタブ名を指定してビューをロードした場合に、そのタブを直接ロードするJavaScriptを作成しました。Tridion.Cme.Commands.Open.prototype._execute()のデフォルトの動作をどのように拡張できますか?

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

よりもむしろ

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

Infoタブのデフォルトを上にロードされます代わりに、:

結果は次のようにページがタブ名がロードされている場合は、追加したことです一般タブの。これは、次のコードで実行し、非常にうまく機能している:

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

は今、私は私の新しい機能を使用して、タブにアイテムとのリンクを開くには、コンテキストメニュー項目を作成したいと思います。私の最初の考えは、Item URLを自分で作成し、単にexecuteメソッドで新しいウィンドウを開くことでした。そこで、GUIの標準機能Open.prototype_execute()のデフォルト機能を調べました。これはCMEのnavigation.jsファイルに格納され、Tridion.Cme.Commands.Open.prototype._executeメソッドで実行されます。コードは、共有アイテムやアクセス権などを扱うため、私が予想していたよりもはるかに複雑です。

このコードをすべて自分の関数にコピーするのではなく、エレガントに拡張する方法があるのでしょうか既存のOpen.prototype_execute()関数を追加し、自分自身の関数のために "& tab = MyTab"を$cme.Popups.OPEN_ITEM_OPTIONS.URL定数に追加します。

アドバイスをいただければ幸いです。

答えて

3

最後に、開くコマンドで$config.getEditorUrl(item_type)を使用して、アイテムビュー(item_type - $const.ItemType.COMPONENTなど)のURLを取得します。機能のこの部分には拡張ポイントはありませんが、あなた自身のリスクでいつでも上書きすることができます。