通过ID加载晔小部件?(Load Ektron widget by ID?)

2019-10-17 06:05发布

我在寻找一些帮助,一个晔问题。

该方案是我们拥有一批该坐在多个页面的小部件。 这些部件都需要用户输入。 当用户移动通过网页填写表单,我们挽救他们的场响应到会话状态对象,这些得到后写入到数据库中。 当用户到达我们要显示所有,他们已经在只读模式下填写了小部件的形式结束。 这将作为一个摘要页面。

我们可以很容易地设定每个输入控件上的小工具,以通过查询字符串参数或CMS可编辑字段的方式是只读的。 我们也可以加载用户响应回从会话状态的小部件。

我们正与加载的CMS的问题编辑的内容背到小工具。

有没有我们可以重新加载先前查看插件的方法吗? 也许通过晔API的ID?

我们已经打得四处的WidgetBase.Host对象,但一直无法使它发挥作用。 我们也试图在会话状态保存完整widget对象并重新加载它到另一个页面,但是这并没有工作过。

Answer 1:

在你的代码,
using Ektron.Cms.PageBuilder;
using Ektron.Cms.Widget;

// The CMS Content ID of the first page of your form. 
const long otherPageId = 1036;

PageModel pm = new PageModel();
PageData pd = null;
pm.Get(otherPageId, out pd, false);
foreach (Ektron.Cms.PageBuilder.WidgetData w in pd.Widgets)
{

    WidgetTypeData myWidgetType;
    IWidgetTypeModel typeModel = Ektron.Cms.Widget.WidgetTypeFactory.GetModel();
    typeModel.FindByControlURL(w.ControlURL, out myWidgetType);

    // you may have to prefix the ControlURL with "/Widgets/" + w.ControlURL
    UserControl myWidget = Page.LoadControl(w.ControlURL) as UserControl;

    // _host is your page's widget host controller. 
    _host.PopulateWidgetProperties(ref myWidget, ref myWidgetType, w.Settings);
}

现在,您可以添加myWidget到您的网页。
如果你想读它的属性。 首先,你需要你的控件的类型。 在ASPX页面,则可以使用<%@ Reference Control="~/widgets/YourWidget.ascx" %>然后在您的代码旁文件可以引用该控件的类型为widgets_YourWidget 。 您可以键入投myWidget,因为widgets_YourWidget



Answer 2:

你提出一个有趣的情况。 在最后,我不知道我会用PageBuilder。 如果你可以存储路径每个插件控制文件(的.ascx),那么我会在那个刚刚加载每个部件的那些作为对照的结尾.aspx页。

为了做到这一点,你可能需要稍微修改部件,基本上验证_host是不是在使用前空。 像这样:

_host = Ektron.Cms.Widget.WidgetHost.GetHost(this);
if (_host != null)
{
    _host.Title = "Widget Name";
    _host.Edit += new EditDelegate(EditEvent);
    _host.Maximize += new MaximizeDelegate(delegate() { Visible = true; });
    _host.Minimize += new MinimizeDelegate(delegate() { Visible = false; });
    _host.Create += new CreateDelegate(delegate() { EditEvent(""); });
}

这应该允许您使用控件作为一个标准的.NET控件,它可以动态地在适当的时候被添加到页面。

除非有一个原因让这些被装入pagebuilder UI,这是我走的路线。



文章来源: Load Ektron widget by ID?
标签: ektron