1. Definice webpartů v modulu

    Článek: AN0001583Aktualizováno:: 10.09.2018

    Pro přidání webpartu do modulu, implementujte ve třídě ModuleInterface přetížení metody GetWebPartInfos(), která vrací kolekci WPInfoList s definicí vašich webpartů. Počet webpartů není omezen.

    Pro každý webpart vytvořte potomka třídy WPInfo a vložte jej do kolekce. Tento potomek je zodpovědný za vytvoření instance vlastního webpartu a ovládacího prvku pro konfiguraci webpartu.

     

    public class ModuleInterface : ModuleInterfaceBase
    {
        ...

        public override WPInfoList GetWebPartInfos()
        {
            WPInfoList l = new WPInfoList();

            l.Add( new MenuWPInfo(this));

            return l;
        }
    }


        public class MenuWPInfo : WPInfo
        {
            public readonly Guid gwpMenu = new Guid("{  ZADEJTE NOVY GUID PRO WEBPART  }");

            private ModuleInterface module;

            public MenuWPInfo(ModuleInterface module) : base( new MenuWebPart())
            {
                this.module = module;
                InfoId = gwpMenu;
            }

            public override WebPartBase GetWebPartInstance(ContentPage cp, WPBase wp, bool isDesign)
            {
                return new MenuWebPart(wp, cp, isDesign, module);
            }

            public override EditWebPart GetWebPartEditControl()
            {
                return new MenuEditControl();
            }
        }

    Při vytvoření nového potomka WPInfo nezapomeňte zadat nové jedinečné ID (typ guid).

    Funkce GetWebPartInstance vrátí novou instanci webpartu. Ta bude systémem vložena na stránku.
    Funkce GetWebPartEditControl vrátí instanci ovládacího prvku pro editaci webpartu.

     

    Nyní vytvořte třídu pro vlastní webpart.

    public class MenuWebPart : WebPartBase
    {
        public ModuleInterface Module { get; private set; }

        public MenuWebPart() : base()
        { }

        public MenuWebPart(WPBase webPart, ContentPage contentPage, bool isWPDesign, ModuleInterface module)
            : base(webPart, contentPage, isWPDesign)
        {
            this.Module = module;
        }

        public override string Title
        {
            get { return "cs-CZ::Webpart Menu~en-US::Webpart Menu"; }
        }

        public override string Description
        {
            get { return "cs-CZ::Nazev~en-US::Name"; }
        }

        public override string TitleImageUrl
        {
            get { return "./Modules/" + Module.SubDirectory + "/ImagesData/menu.png"; }
        }

        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

        //initialize
        //my_property = (WebPart == null ? null : WebPart.Text1);

        if (IsWpSet())
        {
            Page.ClientScript.RegisterClientScriptInclude("Module_Menu", "./modules/OG.menu/Module_Menu.js");
        }
    }

    protected override void OnPreRender(EventArgs e)
    {
        base.OnPreRender(e);

        try
        {
            if (IsWpSet())
            {
                // your code...

                //insert css file
                //Page.Header.Controls.Add(new LiteralControl("");
            }
        }
        catch (Exception ex)
        {
            Module.Application.OG.Log.WriteException(ex, Module);
            RenderError();
        }

    Vlastnosti Title, Description a TitleImageUrl se zobrazují v dialogovém okně pro výběr nového webpartu na stránku.

    Metoda RenderError vypíše do stránky standartní chybové hlášení.

    Ve vlastnosti Module.SubDirectory je uložen název adresáře, ve kterém je modul uložen (viz. kód u vlastnosti TitleImageUrl). Doporučujeme ukládat moduly do jednotlivých adresářů, aby byly dobře oddělené.

    Editace webpartu

    Pokud je webpart složitější, pak budete potřebovat vytvořit ovládací prvek pro jeho nastavení.

    public class MenuEditControl : EditWebPart
    {
        private TextItem ti;

        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            EnsureChildControls();
        }

        protected override void CreateChildControls()
        {
            base.CreateChildControls();

            OGRow ro = new OGRow();
            ro.ID = "ro";
            Controls.Add(ro);

            OGCol co = new OGCol() { ID = "cc1", OneColumn = true };
            ro.Controls.Add(co);


            TitleItem2 titleItem = new TitleItem2();
            titleItem.ID = "titi";
            titleItem.Text = "Definice menu";

            ti = new TextItem();
            ti.ID = "texi";
            ti.Rows = 10;

            OGItem ic = new OGItem(titleItem, ti) { ID = "item" };
            co.Controls.Add(ic);
        }

        public override void LoadWebPart(WPBase wp)
        {
            EnsureChildControls();
            ti.SetData(wp.Text1);
        }

        public override void PreSaveWebPart(WPBase wp)
        {
            EnsureChildControls();
            wp.Text1 = ti.GetDataAsString();
        }

        public virtual void SaveWebPart(WPBase wp)
        {
        }

        public override string GetHelpUrl()
        {
            return "http://www.objectgears.cz";
        }
    }

    V metodě CreateChildControls vytvořte ovládací prvky pro editaci.
    Metoda LoadWebPart slouží pro naplnění ovládacích prvků daty z webpartu. Pokud ukládáte data pro webpart do vaší vlastní tabulky, pak je zde podle ID webpartu načtěte.
    Před vlastním uložením můžete v metodě PreSaveWebPart uložit data z ovládacích prvků do webpartu (proměnná wp). Případně v metodě SaveWebPart lze uložit data do vlastní tabulky.
    Funkce GetHelpUrl vrátí URL na dokumentaci pro webpart. Uživateli je dostupná kliknutím na ikonu otazníku vpravo nahoře.

    Uložení dat

    Konfigurační data pro webpart můžete uložit přímo do datové instance webpartu (WPBase) nebo do vaší vlastní tabulky. Při použití vlastní tabulky musíte data sami načítat, aktualizovat a mazat. Jako vazbu můžete použít ID webpartu.

    V případě, že nepotřebujete zvláštní vlastnosti pro konfiguraci, pak přímo ve webpartu můžete použít následující vlastnosti.

    Datový typ Vlastnost Popis
    string Text1
    Text2
    Text3
    Text4
    Text5
    Text6
    Textová vlastnost.
    bool Bool1
    Bool2
    Bool3
    Příznak Ano/Ne.
    int Int1
    Int2
    Int3
    Celé číslo.
    DateTime? DateTime1
    DateTime2
    DateTime3
    Datum (nullable).

    Pro ušetření práce s vlastní tabulkou, můžete vaši konfiguraci uložit do xml a použít např. vlastnost Text1.

    Smazání webpartu

    Pokud pro uložení konfigurace webpartu použijete vlastnosti z webpartu, pak se o mazání nemusíte starat. Pokud však použijete vlastní tabulku, pak je třeba ve třídě ModuleInterface implementovat metody DeleteWebPartInstance a DeleteWebPartInstances. První je volána při mazání jednoho webpartu, druhá při mazání celé stránky.

    Proto při použití vlastní tabulky je třeba, abyste si do ní uložili ID webpartu a ID stránky.

×