Orchardcms Orchard 1.7中的Crating自定义小部件
我刚到乌节。所以,如果有什么看起来很愚蠢的事情,请原谅我 我想为我的Orchard网站创建一个自定义小部件,以鼓励访问者注册我的时事通讯服务。我已经看到有一个使用HTML小部件的选项,但我想创建一个新的小部件类型,如“新闻稿”,我将在AsideFirst块有条件地使用它 这可能吗?我只想获取访问者的姓名和电子邮件地址,表单提交将使用操作控制器完成 我必须在VS中手工编码来创建这个小部件吗?事实上,我想这样做,而不是通过Orchard管理控制台 寻求帮助。有什么建议吗 编辑: 我已经按照Sipke Schoorstra的建议创建了这个小部件。我想显示小部件的区域现在显示在我将其添加到区域时从admin设置的标题旁边。但是我在视图中创建的内容(表单元素)没有显示 视图:(Views/newslettesignuppart/newslettesignup.cshtml) 简讯Orchardcms Orchard 1.7中的Crating自定义小部件,orchardcms,Orchardcms,我刚到乌节。所以,如果有什么看起来很愚蠢的事情,请原谅我 我想为我的Orchard网站创建一个自定义小部件,以鼓励访问者注册我的时事通讯服务。我已经看到有一个使用HTML小部件的选项,但我想创建一个新的小部件类型,如“新闻稿”,我将在AsideFirst块有条件地使用它 这可能吗?我只想获取访问者的姓名和电子邮件地址,表单提交将使用操作控制器完成 我必须在VS中手工编码来创建这个小部件吗?事实上,我想这样做,而不是通过Orchard管理控制台 寻求帮助。有什么建议吗 编辑: 我已经按照Sipke
我哪里做错了?在
/admin
界面中,单击功能选项卡上的模块,搜索自定义表单,然后单击启用。这将在左侧添加一个新的表单管理链接
接下来,创建一个名为新闻稿的自定义内容类型(在“内容定义”下),并添加两个名为“名称”和“电子邮件”的字段(文本字段类型)
最后,单击表单并添加新的自定义表单。给它一个标题:这将是访问的默认URL,例如,“新闻稿表单”的URL将为/Newsletter Form,默认为Orchard。在“内容类型”下,从下拉列表中选择新创建的内容类型“新闻稿”。自定义此页面上需要的任何其他内容,然后单击“立即发布”
如果您想使其成为小部件,请编辑内容类型并添加小部件部分。创建一个包含所需规则的层,您可以将“新闻稿”小部件添加到该层上所需的任何区域。如果您不想或不需要自己编写代码,自定义表单模块非常棒。如果您确实希望自己处理表单提交而不使用自定义表单,您可以这样做:
你能详细解释一下为什么要硬编码吗?默认情况下,使用自定义表单模块可以使用这种功能。什么是自定义表单模块?不,我不想硬编码任何东西。我只想通过我已经构建的自定义模块中的代码创建一个小部件。Orchard提供了一些开箱即用的小部件,如博客存档,ProjeAction Widget等。我想创建另一个类似于这些的可重用小部件。自定义表单,您提到过,我可以在管理中找到它吗?我可以像小部件/可重用控件一样使用它吗?谢谢您的建议。但是我的要求可能比这简单得多。我只想创建一个小部件和相应的控制器来处理postback。数据库中不会存储任何数据,因此我不需要Migration.cs中的任何表定义。简而言之,我需要的是一个可重用的小部件(如asp.net中的usercontrol),一个用于定义表单元素的razor视图和一个用于处理回发的控制器,我可以将回发放在网站的任何位置。我如何实现这一点?再次为这些史前问题感到抱歉!我遵循了您的方式,但视图中的内容没有呈现在页面上。我已经用我迄今为止所做的编辑了我的原始问题。我错在哪里oing?:(视图的名称似乎不正确。您的小部件内容类型是“NewsletterWidget”,因此请将您的视图重命名为“widget NewsletterWidget.cshtml”。我感到困惑:在我的回答中,我从未提到存储数据。而您却创建了“NewsletterSignupRecord”类。如果不需要存储数据,则不需要创建记录类。只需让您的新闻稿SignupPart从ContentPart而不是ContentPart派生即可。是的,您是对的。我不需要存储数据,因此记录类不应该存在。我将删除它。我将很快进行更改,并用我得到的更新。
@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>
}
public int UpdateFrom15()
{
ContentDefinitionManager.AlterTypeDefinition(
"NewsletterWidget", cfg => cfg
.WithPart("NewsLetterSignupPart")
.WithPart("CommonPart")
.WithPart("WidgetPart")
.WithSetting("Stereotype", "Widget")
);
return 16;
}
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; }
}
}
public class NewsletterSignupRecord : ContentPartRecord
{
public virtual string Name { get; set; }
public virtual string Email { get; set; }
}