Orchardcms 如何在Orchard 1.9中创建布局元素
有人可以指导我如何在Orchard 1.9中创建布局元素吗。我在网上找不到任何资源。一般来说,创建新布局元素类似于创建新零件。在这个过程中有一个驱动程序和一些视图。切中要害-您需要按照以下方式实施:Orchardcms 如何在Orchard 1.9中创建布局元素,orchardcms,Orchardcms,有人可以指导我如何在Orchard 1.9中创建布局元素吗。我在网上找不到任何资源。一般来说,创建新布局元素类似于创建新零件。在这个过程中有一个驱动程序和一些视图。切中要害-您需要按照以下方式实施: 元素类。。从包含所有元素数据的元素继承的类。可以说是一个模型 驱动程序。从ElementDriver继承的类,其中TElement是您在上面创建的类型。每个元素都有自己的驱动程序,用于处理显示管理编辑器(以及回发)和前端显示视图 形状。按照惯例,所有形状都应放在/Views/Elements/文件
- 元素类。。从包含所有元素数据的
元素继承的类。可以说是一个模型
- 驱动程序。从
继承的类,其中ElementDriver
是您在上面创建的类型。每个元素都有自己的驱动程序,用于处理显示管理编辑器(以及回发)和前端显示视图TElement
- 形状。按照惯例,所有形状都应放在/Views/Elements/文件夹下
- 显示形状。以您的元素命名,即
。这一个在前端呈现您的元素MyElement.cshtml
- 设计显示形状。。以您的元素命名,带有
后缀,即.Design
。这一个在布局编辑器中呈现您的元素MyElement.Design.cshtml
- 编辑器形状。。这个应该放在/Views/EditorTemplates/文件夹中。默认命名约定为
。当您在布局编辑器画布上放置新元素时,它会呈现所显示的编辑器Elements.MyElement.cshtml
- 显示形状。以您的元素命名,即
如果您想执行一些更复杂的元素,请检查现有的实现。Layouts模块有一个非常好的架构,所以你们应该很快就能跟上速度。请记住我上面写的必要步骤。要创建自定义布局元素,首先创建一个继承自
元素的类Element
位于Orchard.Layouts
命名空间中,因此需要添加引用。要遵循Orchard标准,请将此文件放在名为“元素”的文件夹中
public class MyElement : Element
{
public override string Category
{
get { return "Content"; }
}
public string MyCustomProperty
{
get { return this.Retrieve(x => x.MyCustomProperty); }
set { this.Store(x => x.MyCustomProperty, value); }
}
}
接下来,在名为Drivers的文件夹中创建一个driver类。此类继承自ElementDriver
,您可能希望覆盖OnBuildEditor
和ondisplay
方法OnBuildEditor
用于在保存编辑器时创建编辑器形状和更新数据库<当我们需要在显示元素时执行操作时,使用code>ondisplay
。通常,您需要向形状添加属性,这可以通过context.ElementShape.MyAdditionalProperty=“My Value”完成代码>
公共类MyElementDriver:ElementDriver
{
受保护的重写EditorResult OnBuildEditor(MyElement元素、ElementEditorContext上下文)
{
var viewModel=新的MyElementEditorViewModel
{
MyCustomProperty=element.MyCustomProperty
};
var editor=context.ShapeFactory.EditorTemplate(TemplateName:“Elements.MyElement”,Model:viewModel);
if(context.Updater!=null)
{
context.Updater.TryUpdateModel(viewModel,context.Prefix,null,null);
element.MyCustomProperty=viewModel.MyCustomProperty;
}
返回编辑器(上下文、编辑器);
}
受保护的覆盖无效显示(Reddit元素、ElementDisplayContext上下文)
{
context.ElementShape.MyAdditionalProperty=“我的值”;
}
}
然后我们只需要我们的观点。我们的编辑器视图进入视图/编辑器模板。文件名必须是我们设置的编辑器形状的模板名。在本例中,视图名称为Elements.MyElement.cshtml
@model MyNameSpace.ViewModels.MyElementEditorViewModel
<fieldset>
<div>
@Html.LabelFor(m => m.MyCustomProperty, T("My Custom Property"))
@Html.TextBoxFor(m => m.MyCustomProperty, new { @class = "text medium" })
</div>
</fieldset>
@using MyNameSpace.Elements
@using MyNameSpace.Models
@{
var element = (MyElement)Model.Element;
}
<h1>@element.MyCustomProperty</h1>
@model MyNameSpace.ViewModels.MyElementEditorViewModel
@LabelFor(m=>m.MyCustomProperty,T(“我的自定义属性”))
@TextBoxFor(m=>m.MyCustomProperty,新的{@class=“text medium”})
最后,我们只需要前端的一个视图。此视图进入以下文件夹视图/元素。视图文件的名称与我们的元素类名相同。对于本例,该文件将被称为MyElement.cshtml
@model MyNameSpace.ViewModels.MyElementEditorViewModel
<fieldset>
<div>
@Html.LabelFor(m => m.MyCustomProperty, T("My Custom Property"))
@Html.TextBoxFor(m => m.MyCustomProperty, new { @class = "text medium" })
</div>
</fieldset>
@using MyNameSpace.Elements
@using MyNameSpace.Models
@{
var element = (MyElement)Model.Element;
}
<h1>@element.MyCustomProperty</h1>
使用MyNameSpace.Elements的@
@使用MyNameSpace.Models
@{
var元素=(MyElement)Model.element;
}
@element.MyCustomProperty
然后,您将拥有一个新元素,可以使用布局编辑器将其拖动到布局中
有关从头到尾创建元素的详细信息,请查看我的博客文章。查看此博客我已经查看了本文。这是不完整的。请更具体一些。它缺少什么?所以您不需要创建模块?链接的博客文章从创建模块开始。我跳过了创建一个模块,但我并没有在布局工具箱中看到它。如果没有创建模块,您将代码放在哪里?在已经存在的模块中?模块/功能是否已启用?代码是否编译?如果我没记错的话,驱动程序中的一个参数的一个类名被更改了(应该很明显是哪一个,这是一个很容易修复的问题)。日志中有错误吗?我已经把它添加到了主题中,我想这是一个模块。我的问题是,解决方案中没有包含主题,因此没有编译添加的文件。像这样使用codegen重新添加主题修复了它:codegen主题ThemeNameHere/CreateProject:true/IncludeSolution:true