Stworzyłem nowy edytor dla SDL Tridion, który dodaje nowe funkcje do paska wstążki. Jest to możliwe po dodaniu następującego fragmentu kodu do editor.config

    <!-- 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>

Jest to stosowane do wszystkich widoków przy użyciu symbolu wieloznacznego w węźle. Powoduje to dodanie mojego nowego przycisku do wstążki każdego widoku, w tym głównego pulpitu nawigacyjnego. Czy istnieje sposób, aby dodać to do wszystkich widoków z wyjątkiem pulpitu nawigacyjnego? A może muszę stworzyć coś takiego?

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

Jeśli to jedyny sposób na osiągnięcie pożądanego rezultatu, czy jest gdzieś lista wszystkich nazw widoków?

8
Chris Summers 19 październik 2012, 01:45

2 odpowiedzi

Najlepsza odpowiedź

Obejście dostarczone przez Jaime nie zadziała, ponieważ:

  • Pasek narzędzi wstążki ukryje przyciski tylko na karcie Utwórz, jeśli isAvailable metoda odpowiedniego polecenia zwróci false.
  • Większość przycisków w RibbonToolbar implementuje specyficzny interfejs Tridion.Controls.RibbonButton. Oznacza to, że kiedy spróbujesz aby uzyskać kontrolę Tridion.Controls.Button dla tego samego elementu - będziesz uzyskaj zupełnie inną kontrolę, opartą na tym samym elemencie html. Więc RibbonToolbar nie będzie o tym wiedział i będzie działał nieprawidłowo.
  • Jeśli chcesz ukryć przycisk na pasku narzędzi RibbonToolbar, powinieneś zamiast tego użyć metod publicznych na pasku narzędzi RibbonToolbar i RibbonPage. Dzięki temu będzie prawidłowo obsługiwany przez pasek narzędzi RibbonToolbar. Przykład:
var toolbar = $controls.getControl($("#ItemToolbar"), "Tridion.Controls.RibbonToolbar");
var page = toolbar.getPageById("HomePage");
page.hideItem(buttonId);
page.showItem(buttonId);

Jeśli chodzi o pierwotne pytanie, oto całkiem proste i najłatwiejsze rozwiązanie:

<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>
8
Chris Summers 7 listopad 2012, 20:58

O ile wiem, musisz określić wszystkie widoki lub użyć symbolu wieloznacznego. Fajnie będzie, że funkcja isAvailable będzie działać z przyciskami paska narzędzi wstążki, prawda? Oznacza to, że jeśli polecenie zwróci false w metodzie _isAvailable, przycisk nie będzie wyświetlał...

Cóż, znalazłem pracę. Możesz zrobić coś takiego w swojej metodzie isAvailable w swoim poleceniu:

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

Myślę, że to właściwie dobra praktyka, ponieważ „ukryje” polecenia, jeśli nie powinny być dostępne, prawda?

Daj mi znać, jak to działa.

2
Jeremy Grand-Scrutton 19 październik 2012, 12:10