请注意,本站并不支持低于IE8的浏览器,为了获得最佳效果,请下载最新的浏览器,推荐下载 Chrome浏览器
欢迎光临。交流群:166852192

创建一个带文本编辑器的模块


下面文档中,我会创建一个简单的电子商务网站,只带一个简单的文本编辑器。

搭建Orchard网站

我这里就不详细说明了,具体的本网站中已经有很多文档说明,方面大家,我整理了下,如下:

如何安装Orchard   如何安装Orchard(IIS篇)  如何安装设置汉化包  第一次运行Orchard

看了上面的文章,Orchard安装肯定没问题了。
在安装目录下 bin\orchard.exe运行Orchard.exe文件,启动命令窗口:
在光标位置键入help命令来获取可用命令的列表(注意:输入命令是注意路径必须是在Orchard>)。目前,只有帮助和设置命令是可用的,但是,随着Orchard逐渐发展和模块被激活,新命令将成为可能性。(Orchard命令执行命令行,实际执行是模块的内部应用程序)。
建立网站可以见第一次运行Orchard,也可以输入以下命令


setup /SiteName:Orchard /AdminUsername:admin /AdminPassword:123456 /DatabaseProvider:SqlCe

siteName:网站名;AdminUsername:用户名;AdminPassword:登陆密码。
下面开始模块创建。

模块生成

Orchard提供了代码生成功能,设置生成一个空的模块,默认情况下,代码生成被禁用。 所以,你必须首先安装并启用该功能。 首先安装code generation模块,点击“展厅”选项卡。 收索“code generation”,然后安装模块,点击启用,如下:

也可以代码启用,如果你没有做正确安装后,你可以在命令窗口中输入以下命令:
feature enable Orchard.CodeGeneration




然后输入以下命令,建立一个模块;
codegen module SimpleCommerce




打开,window窗体,游览安装的模块文件夹,安装目录下\Modules\SimpleCommerce,如下:
用记事本打开Module.txt文件,更改描述(Description)信息,如你想描述的。改完的内容如下:
Name: SimpleCommerceAntiForgery: enabledAuthor: The Orchard TeamWebsite: http://orchardproject.netVersion: 1.0OrchardVersion: 1.0Description: A simple commerce moduleFeatures:    SimpleCommerce:        Description: A simple product part.

创建模块部件

接下来,您将创建一个数据模型,它是一个repesentation将存储在数据库中。
在目录下,Modules/SimpleCommerce/Models,创建一个Product.cs的文件,并添加以下内容:
using System.ComponentModel.DataAnnotations;using Orchard.ContentManagement;using Orchard.ContentManagement.Records;namespace SimpleCommerce.Models {  public class ProductPartRecord : ContentPartRecord {    public virtual string Sku { get; set; }    public virtual float Price { get; set; }  }  public class ProductPart : ContentPart<ProductPartRecord> {    [Required]    public string Sku {      get { return Record.Sku; }      set { Record.Sku = value; }    }    [Required]    public float Price {      get { return Record.Price; }      set { Record.Price = value; }    }  }}

这段代码有两个属性, SkuPrice ,这是虚拟的,以便创建一个创建一个动态代理。代码还定义了一个内容部分来源于ContentPartProductPartRecord
,而且公开sku和price作为一个公共属性,属性要在Ui页面中使用,为了能让程序获取文件,要在项目文件中添加模块,打开项目文件:SimpleCommerce.csproj,然后找到“assemblyinfo.cs”,在他的后面,添加如下代码;
<Compile Include=Models\Product.cs />

保存文件,关闭文件,保证可以动态编译。
在浏览器中刷新网站,保证网站可以动态编译,然后在控制面板模块中,在模块中就可以看到添加的模块:
在命令窗口中,用以下命令启用或是直接在模块中启用:
feature enable SimpleCommerce

创建初始数据文件

数据迁移是一种模式,使应用程序或组件来处理新版本,没有任何数据丢失。主要的思想是,系统跟踪当前版本安装和每个数据迁移描述变化能够从一个版本到下一个。如果系统发现有一个新的安装版本,并且当前数据是前一个版本的,管理员地点的提示升级。然后系统运行所有必要的迁移方法直到数据版本和代码版本保持同步。
开始创建新的模块的初始迁移, 在命令窗口,输入以下命令:
codegen datamigration SimpleCommerce


在目录创建的DataMigrations下新建文件Migrations.cs,添加如下内容:
但是在1.4以上版本中,执行上面语句后,自动会在SimpleCommerce下创建Migrations.cs文件,所以将下面SimpleCommerce.DataMigrations 改为simplecommerce;
using System;using System.Collections.Generic;using System.Data;using Orchard.ContentManagement.Drivers;using Orchard.ContentManagement.MetaData;using Orchard.ContentManagement.MetaData.Builders;using Orchard.Core.Contents.Extensions;using Orchard.Data.Migration;namespace SimpleCommerce.DataMigrations {    public class Migrations : DataMigrationImpl {        public int Create() {            // Creating table ProductPartRecord            SchemaBuilder.CreateTable(ProductPartRecord, table => table                .ContentPartRecord()                .Column(Sku, DbType.String)                .Column(Price, DbType.Single)            );            return 1;        }    }}

该方法的名称创建的惯例是初始数据迁移。它调用SchemaBuilder,创建一个表ProductPartRecord包含 Sku和price基本字段列。
注意,代码中“return 1”,1是初始迁移的版本号。
注意:如果想把当前模块当做一个部件使用,在Create() 方法return前面添加下面代码:同时添加引用 using Product.Models;
ContentDefinitionManager.AlterPartDefinition(typeof(ProductPart).Name, part => part                  .Attachable()

加入另一个方法,以说明如何可以在以后改变现有的模式和类型的元数据模块时数据迁移。 在这种情况下,你将以此为契机,添加一个功能,数据迁移类添加以下方法:
public int UpdateFrom1() {  ContentDefinitionManager.AlterPartDefinition(ProductPart,    builder => builder.Attachable());  return 2;}

这个新方法UpdateFrom1命名,这是惯例,为升级,从版本1。你的下一个方法应该被称为UpdateFrom2和返回3,等等。
还有一点,添加文件后,确保在项目文件中.csproj存在Migrations.cs配置。如下:
<Compile Include=Migrations.cs />

添加一个Handler

Orchard的处理程序是类似于在ASP.NET MVC中的过滤器。 为了处理特定的应用程序,但并非特定于给定的内容类型。例如,您可以构建一个分析模块,加载事件统计日志使用数据。需要处理什么事件就要加相应的Handler,检查ContentHandlerBase的源代码。
Handler实现了一些细节,我希望这种方式在以后的Orchard版本中会消失,可能更喜欢以声明的方式,比如使用属性。
创建一个处理程序文件夹,并添加ProductHandler.cs文件,它包含下面的代码:
using Orchard.ContentManagement.Handlers;using SimpleCommerce.Models;using Orchard.Data;namespace SimpleCommerce.Handlers {  public class ProductHandler : ContentHandler {    public ProductHandler(IRepository<ProductPartRecord> repository) {      Filters.Add(StorageFilter.For(repository));    }  }}

打开项目文件:SimpleCommerce.csproj,添加如下代码;
 <Compile Include=Handlers\ProductHandler.cs />


添加驱动程序

Orchard的驱动程序是类似于在ASP.NET MVC中的控制器(controller),但在网站内容管理系统是必要的组成部分。 它是专门为特定的内容指定特定的执行方法,管理页面行为
驱动程序通常具有覆盖显示和编辑操作。 对于部分产品,创造新的Drivers文件夹和在该文件夹中创建一个ProductDriver.cs的文件,包含下面的代码:
using SimpleCommerce.Models;using Orchard.ContentManagement.Drivers;using Orchard.ContentManagement;namespace SimpleCommerce.Drivers {  public class ProductDriver : ContentPartDriver<ProductPart> {    protected override DriverResult Display(        ProductPart part, string displayType, dynamic shapeHelper)    {      return ContentShape(Parts_Product,          () => shapeHelper.Parts_Product(              Sku: part.Sku,              Price: part.Price));    }    //GET    protected override DriverResult Editor(ProductPart part, dynamic shapeHelper)    {      return ContentShape(Parts_Product_Edit,          () => shapeHelper.EditorTemplate(              TemplateName: Parts/Product,              Model: part,              Prefix: Prefix));    }    //POST    protected override DriverResult Editor(        ProductPart part, IUpdateModel updater, dynamic shapeHelper)    {      updater.TryUpdateModel(part, Prefix, null, null);      return Editor(part, shapeHelper);    }  }}

Display定义了一个前端页面显示需要调用的方法。
打开项目文件:SimpleCommerce.csproj,添加如下代码;添加在handler下。
<Compile Include=Drivers\ProductDriver.cs />

Editor的方法也创建了一个模板名为EditorTemplate 。 模板有TemplateName属性,指示Orchard在哪里寻找渲染模板。 该代码还指定该模板模型的一部分,而不是形状(这是默认的)。
在模块或主题的文件夹的最大根目录下创建placement.info文件。 该文件中,视图,可以从一个主题覆盖。 创建placement.info文件包含以下内容:
<Placement>    <Place Parts_Product_Edit=Content:3/>    <Place Parts_Product=Content:3/></Placement>

添加 placement.info 到项目文件SimpleCommerce.csproj中,添加如下行:
<Content Include=placement.info />

添加模板

为了做新的内容的一部分工作的最后一件事是写在驱动程序中配置的两个模板(前端和管理)。
首先创建前端模板。 创建一个PartsViews文件夹,并添加一个Product.cshtml文件包含下面的代码:
<br/>@T(Price): <b>$@Model.Price</b><br />@Model.Sku<br/>

在Views下创建一个EditorTemplates文件夹,添加文件Product.cshtml,添加如下代码:
@model SimpleCommerce.Models.ProductPart<fieldset>    <label class=sub for=Sku>@T(Sku)</label><br />    @Html.TextBoxFor(m => m.Sku, new { @class = text })<br />    <label class=sub for=Price>@T(Price)</label><br />    @Html.TextBoxFor(m => m.Price, new { @class = text })</fieldset>

加入这两个模板文件到SimpleCommerce.csproj文件,使用以下行
<Content Include=Views\Parts\Product.cshtml /><Content Include=Views\EditorTemplates\Parts\Product.cshtml />

添加内容类型

内容部件已经完成,你可以从管理员控制面板插入部件在层级中(Orchard内容类型管理)。
你现在可以在Orchard中建立一个新的产品内容类型,包括产品部分和数量的部分。到目前为止,你一直专注于你的特定的域。现在,这将改变,你就会开始融入Orchard。
构建内容类型从一个新的迁移方法、打开Migrations.cs文件并添加以下方法类:
public int UpdateFrom2() {  ContentDefinitionManager.AlterTypeDefinition(Product, cfg => cfg    .WithPart(CommonPart)    .WithPart(RoutePart)    .WithPart(BodyPart)    .WithPart(ProductPart)    .WithPart(CommentsPart)    .WithPart(TagsPart)    .WithPart(LocalizationPart)    .Creatable()    .Indexed());  return 3;}

在文件里必须添加索引引用using Orchard.Indexing;
下面我们做的事情是创建(或更新)产品内容类型,并添加到它能够拥有自己的网址(url)和标题(RoutePart),拥有一个文本描述(BodyPart),添加产品评论(CommentsPart),标签(TagsPart)和本地化(LocalizationPart)。这将添加一个创建产品菜单项,同时添加搜索索引( Indexed )。
启用你的新模块,打开Orchard控制面板和单击模块。选择特性选项卡,找到SimpleCommerce模块,并单击启用

添加一个新产品的内容类型,请点击控制面板上的内容 ,选择“ 内容类型 ”选项卡,找到产品 ,并单击“ 创建新产品
点击建立新Product。完成。
参考网站:http://docs.orchardproject.net/Documentation/Creating-a-module-with-a-simple-text-editor


作者原创内容不容易,如果觉得内容不错,请点击右侧“打赏”,赏俩给作者花花,也算是对作者付出的肯定,也可以鼓励作者原创更多更好内容。
更多详情欢迎到QQ群 166852192 交流。