0

我是果园的新手。所以如果有什么看起来很傻,请原谅我!

我想为我的 Orchard 网站创建一个自定义小部件,以鼓励访问者注册我的时事通讯服务。我已经看到有一个使用 HTML 小部件的选项,但我想创建一个新的小部件类型,如“Newsletter”,我将在 AsideFirst 块有条件地使用它。

这可能吗?我只想获取访问者的姓名和电子邮件地址,表单提交将使用动作控制器完成。

我是否必须通过 VS 中的手动编码来创建这个小部件?实际上我想这样,而不是通过 Orchard 管理控制台。

寻求帮助。请问有什么建议吗?

编辑:我设法按照 Sipke Schoorstra 的建议创建了小部件。我要显示小部件的区域现在与我在将其添加到区域时从管理员设置的标题一起显示。但是我在视图中创建的内容(表单元素)没有显示。

视图:(Views/NewsLetterSignupPart/NewsletterSignup.cshtml)

@model Emfluence.Intrust.Models.NewsLetterSignupPart
@{
ViewBag.Title = "Newsletter Signup";
}
@using (Html.BeginForm("NewsletterSignup", "NewsLetter", FormMethod.Post))
{
@Html.AntiForgeryToken()
<div class="row-fluid">
<div class="span6">
<label>Name</label>
<input type="text" name="txtNewsletterUserName" required maxlength="50" style="width: 95%" />
<label>Email</label>
<input name="txtNewsletterUserEmail" type="email" required maxlength="85" style="width: 95%" />
<button class="btn pull-right">Submit</button>
</div>
</div>
}

迁移.cs

public int UpdateFrom15()
{
ContentDefinitionManager.AlterTypeDefinition(
"NewsletterWidget", cfg => cfg
.WithPart("NewsLetterSignupPart")
.WithPart("CommonPart")
.WithPart("WidgetPart")
.WithSetting("Stereotype", "Widget")
);
return 16;
}

NewsLetterSignupPart.cs

public class NewsLetterSignupPart : ContentPart<NewsletterSignupRecord>
{
[Required]
public string Name
{
get { return Record.Name; }
set { Record.Name = value; }
}
[Required]
public string Email
{
get { return Record.Email; }
set { Record.Email = value; }
}
}

和 NewsletterSignupRecord.cs

public class NewsletterSignupRecord : ContentPartRecord
{
public virtual string Name { get; set; }
public virtual string Email { get; set; }
}

我在哪里做错了?

4

2 回答 2

1

如果您不想或不需要自己编写代码,自定义表单模块非常棒。如果您确实想在不使用自定义表单的情况下自己处理表单提交,您可以这样做:

  1. 创建自定义模块
  2. 创建一个定义新小部件内容类型的迁移类(有关如何执行此操作的详细信息,请参阅文档。注意:您不需要创建自定义部件。您甚至不需要创建迁移文件来创建内容类型 - 您可以使用配方文件来完成。不过,迁移的好处是它会在启用模块功能时自动执行)。
  3. 为您的小部件类型的内容项创建一个特定的视图(例如 Widget-Newsletter.cshtml)。
  4. 在此视图中,编写包含表单元素和输入元素的标记。将此表格发回您的控制器。
  5. 创建你的控制器。
于 2013-08-04T20:15:01.987 回答
0

/admin界面中,单击Modules,在 Features` 选项卡上搜索Custom Forms并单击Enable。这将在左侧添加一个新的表单管理链接。

接下来,创建一个名为Newsletter的自定义内容类型(在 Content Definition 下) ,并添加两个名为 Name 和 E-mail 的字段(文本字段类型)。

最后,单击表单并添加一个新的自定义表单。给它一个标题:这将是访问的默认 URL,例如“Newsletter Form”的 URL 将是 Orchard 默认的 /newsletter-form。在Content Type下,从下拉列表中选择您新创建的内容类型Newsletter 。在此页面上自定义您想要的任何其他内容,然后单击立即发布

如果您想让它成为一个小部件,请编辑内容类型并添加 Widget Part。使用您需要的规则创建一个图层,您可以将“通讯”小部件添加到该图层上您需要的任何区域。

于 2013-08-04T12:50:02.543 回答