2012-10-18 11 views
8

Ich habe einen neuen Editor für SDL Tridion erstellt, der der Multifunktionsleiste einige neue Funktionen hinzufügt. Dies wird durch Zugabe der folgenden Ausschnitt zum editor.config aktiviertWie konfigurieren Sie eine SDL Tridion CME-Erweiterung für eine Teilmenge von Ansichten?

<!-- ItemCommenting PowerTool --> 
    <ext:extension assignid="ItemCommenting" name="Save and&lt;br/&gt;Comment" pageid="HomePage" groupid="ManageGroup" insertbefore="SaveCloseBtn"> 
     <ext:command>PT_ItemCommenting</ext:command> 
     <ext:title>Save and Comment</ext:title> 
     <ext:issmallbutton>false</ext:issmallbutton> 
     <ext:dependencies> 
     <cfg:dependency>PowerTools.Commands</cfg:dependency> 
     </ext:dependencies> 
     <ext:apply> 
     <ext:view name="*" /> 
     </ext:apply> 
    </ext:extension> 

dies für alle Ansichten angelegt wird, durch einen Platzhalter Wert in dem Knoten verwendet wird. Dies hat zur Folge, dass meine neue Schaltfläche der Multifunktionsleiste jeder Ansicht hinzugefügt wird, einschließlich des Haupt-Dashboards. Gibt es eine Möglichkeit, dies allen Ansichten außer dem Dashboard hinzuzufügen? Oder muss ich etwas so erstellen?

<ext:apply> 
     <ext:view name="PageView" /> 
     <ext:view name="ComponentView" /> 
     <ext:view name="SchemaView" /> 
    </ext:apply> 

Wenn dies der einzige Weg ist, das Ergebnis muss ich zu erreichen, gibt es eine Liste aller View-Namen irgendwo?

Antwort

8

Umgehung von Jaime bereitgestellt wird nicht funktionieren, weil:

  • Ribbon Toolbar-Schaltflächen versteckt nur auf der Registerkarte Erstellen, wenn isAvailable Methode des entsprechenden Befehls wird false zurück.
  • Die meisten Schaltflächen in RibbonToolbar implementiert spezifische Tridion.Controls.RibbonButton Schnittstelle. Das heißt, wenn Sie versuchen, Tridion.Controls.Button Steuerelement für das gleiche Element zu erhalten - werden Sie erhalten völlig unterschiedliche Kontrolle, basierend auf dem gleichen HTML-Element. So RibbonToolbar wird nicht darüber wissen, und es wird falsch funktionieren.
  • Wenn Sie Schaltfläche in RibbonToolbar ausblenden möchten, sollten Sie stattdessen öffentliche Methoden für RibbonToolbar und RibbonPage verwenden. So wird es von RibbonToolbar korrekt behandelt. Beispiel:
var toolbar = $controls.getControl($("#ItemToolbar"), "Tridion.Controls.RibbonToolbar"); 
var page = toolbar.getPageById("HomePage"); 
page.hideItem(buttonId); 
page.showItem(buttonId); 

Was die ursprüngliche Frage, hier ist ziemlich einfach und einfachste Lösung:

<ext:add> 
    <ext:extension assignid="ItemCommenting" name="Save and&lt;br/&gt;Comment" pageid="HomePage" groupid="ManageGroup" insertbefore="SaveCloseBtn"> 
     <ext:command>PT_ItemCommenting</ext:command> 
     <ext:title>Save and Comment</ext:title> 
     <ext:issmallbutton>false</ext:issmallbutton> 
     <ext:dependencies> 
      <cfg:dependency>PowerTools.Commands</cfg:dependency> 
     </ext:dependencies> 
     <ext:apply> 
      <ext:view name="*" /> 
     </ext:apply> 
    </ext:extension> 
</ext:add> 
<ext:remove> 
    <ext:extension id="ItemCommenting"> 
     <ext:apply> 
      <ext:view name="DashboardView" /> 
     </ext:apply> 
    </ext:extension> 
</ext:remove> 
+0

kommt zusammen Sehr schöner Boris. Gut zu wissen, dass das möglich ist ... es wäre schön, einen Hinweis darauf zu haben, was in der Konfigurationsdatei getan werden kann. Wenn Sie also etwas haben, was Sie teilen können, wäre das großartig. –

+0

Leider ist alles in meinem Kopf :) –

+0

Ist es möglich, die für ein Out of the Box-Feld wie Underscore zu verwenden? –

2

Soweit ich weiß, müssen Sie alle Ansichten angeben oder den Platzhalter verwenden. Es ist schön, dass die isAvailable-Funktionalität für die Ribbon-Werkzeugleiste funktioniert, richtig? Das heißt, wenn der Befehl false in der _isAvailable-Methode zurückgibt, wird die Schaltfläche nicht angezeigt ...

Nun, ich habe eine Arbeit gefunden. Sie können in Ihrem Befehl so etwas wie dies in Ihrer isAvailable Methode tun:

Your.Namespace.PT_ItemCommenting.prototype._isAvailable = function PT_ItemCommenting$_isAvailable(selection) { 
    var isAvailable = $display.getView().getId()!='DashboardView'; 
    if(isAvailable){ 
     return true; 
    } 
    var button = $controls.getControl($("#ItemCommenting"), "Tridion.Controls.Button"); 
    button.hide(); 
    return false; 
}; 

Ich denke, das ist eigentlich eine gute Praxis, da es „verstecken“ die Befehle, wenn sie nicht verfügbar sein, nicht wahr?

Lassen Sie mich wissen, wie es funktioniert.

+0

Ich liebe es, wenn eine Abhilfe –