1

我在 Orchard CMS 中创建了一个自定义模块。该模块包含几个小部件。其中一个小部件(我们称之为WinnersFeedWidget)包含几个自定义的Contant Part Records(我们称之为NumberOfWinnersToShow 和SkinName)。

我可以使用以下命令将 WinnersFeedWidget 添加到区域

widget create WinnersFeedWidget /Title:"Recent Winners" /Zone:"AsideSecond" /Position:"2" /Layer:"Default" /Identity:"WinnersContainerWidget" /RenderTitle:true

但我也希望能够从命令行设置 NumberOfWinnersToShow 和 SkinName 的值。

我怎样才能做到这一点?

4

1 回答 1

0

为了任何寻求此问题答案的人的利益-

因为我正在创建一个配方,所以我可以通过将以下 XML 添加到配方的元素中来实现相同的效果:

<WinnersFeedWidget Id="/Identifier=WinnersFeed" Status="Published">
  <WinnersFeedPart NumberOfWinnersToShow="15" SkinName="Blue"/>
  <CommonPart Owner="/User.UserName=OrchardAdmin" Container="/Layer.LayerName=Default" CreatedUtc="2012-11-20T17:08:00Z" PublishedUtc="2012-11-20T17:08:00Z" ModifiedUtc="2012-11-20T17:08:00Z" />
  <WidgetPart Title="Recent Winners" Position="2" Zone="AsideSecond" RenderTitle="true" />
</WinnersFeedWidget>

在本例中,WinnersFeedPart 是小部件上部件的名称。

我还必须使用导入和导出的覆盖来更新我的驱动程序类(以允许导出功能能够正确生成所需的 XML):

    protected override void Exporting(WinnersFeedPart part, ExportContentContext context)
    {
        context.Element(part.PartDefinition.Name).SetAttributeValue("NumberOfWinnersToShow", part.NumberOfWinnersToShow);
        context.Element(part.PartDefinition.Name).SetAttributeValue("SkinName", part.SkinName);
    }

    protected override void Importing(WinnersFeedPart part, ImportContentContext context)
    {
        part.NumberOfWinnersToShow= GetIntegerValue(part, context, "NumberOfWinnersToShow");
        part.SkinName= context.Attribute(part.PartDefinition.Name, "SkinName");
    }

(GetIntegerValue 是一个辅助方法,将导入器提供的值转换为 int)

对于这个工作的一个很好的例子,我建议从 Gallery 下载 Featured Item Slider 模块,并查看他们的 Driver 类。

于 2012-11-23T12:37:39.753 回答