Skip to content
honzaskopal edited this page Sep 19, 2016 · 3 revisions

#Programers support documents [[TOC]]

Článek popisuje možnosti přidání nebo potlačení položek menu v systému K4.

##Menu Menu v systému K4 je možno rozdělit do dvou oblastí: Hlavní a kontextové.

###Hlavní menu Hlavní menu je "schované" pod tlačítkem Více, je dostupné odkudkoliv a obsahuje akce, které nejsou závislé na aktuálním výběru.

Main menu

###Kontextové menu Kontextové menu se zobrazí pouze v případech, kdy máme vybraný jeden nebo více titulů, tj. při zobrazení konkrétního titulu nebo při hledávání. Jednotlivé akce kontextového menu s aktuálním výběrem nějak operují.

Context menu

Hlavní a kontextové menu jsou rozděleny na dvě části, administrátorskou a veřejnou. To, jestli se zobrazí administrační část daného menu je řízeno akcí display_admin_menu viz Prava#akce.

#Programová realizace menu Každá položka menu je realizovaná vlastní třídou, která se stará o její vyrendrování v podobě html snippetu. Všechny položky musí implementovat rozhraní MenuItem z balíčku cz.incad.Kramerius.exts.menu.

Pro položky z kontextového menu existuje značkovací rozrhaní ContextMenuItem resp. AdminContextMenuItem pro položku z administrátorské části menu a PublicContextMenuItem pro položky veřejné.

Podobné je tomu i u hlavního menu. Zde je společné rozrhaní MainMenuItem, administrační položky jsou reprezentovány AdminMenuItem a PublicMainMenuItem pro položky veřejné.

Všechny položky jsou spojovány konfiguračního modulem pomocí techlonogie guice, konkrétně metodou, která se v terminilogii guice nazývá multibinding. Vše nejlépe demonstrují následující kusy kódu.

Definice položky

/**
 * Reprezentuje polozku menu pro spusteni dialogu procesu
 */        
public class ProcessesDialog extends AbstractMainMenuItem implements AdminMenuItem {

    @Override
    public boolean isRenderable() {
        return hasUserAllowedAction(SecuredActions.MANAGE_LR_PROCESS.getFormalName());
    }

    @Override
    public String getRenderedItem() throws IOException {
        return renderMainMenuItem(
            "javascript:processes.processes(); javascript:hideAdminMenu();",
            "administrator.menu.dialogs.lrprocesses.title", false);
    }
}

Zapojení položky do modulu

        ...
        Multibinder<AdminMenuItem> adminItems
        = Multibinder.newSetBinder(binder(), AdminMenuItem.class);
        adminItems.addBinding().to(ProcessesDialog.class);
        ...

#Přidání vlastní položky Přidání vlastní položky spočívá pouze v implementaci správného rozhraní a vytvoření jednoho guice modulu a definici manifestu pro načtení modulu.

Bude doplněno.

Clone this wiki locally