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.