Orchard:如何生成Hello World模块Orchard:使用VS2010来生成一个地图Content PartOrchard:生成一个Content Part中介绍了如何生成Orchard的module,本篇简要介绍一下Orchard的展现流程以及之前介绍的一些handler、drvier之类的对象。

Orchard rendering work

生成content part需要增加的一些对象

  • A content part itself
  • A content part record
  • A handler
  • A driver
  • Display shapes (.cshtml Razor view files)
  • Data migration

A content part

这是一个继承ContentPart 或 ContentPart<T> (T表示对应的record类型) 的普通类。如果不需要保持在数据库,则使用ContentPart,如果希望把数据存储在数据库中,则使用ContentPart<T> 

public class MapPart : ContentPart<MapRecord>
{
[Required]
public double Latitude
{
get { return Record.Latitude; }
set { Record.Latitude = value; }
}

[Required]
public double Longitude
{
get { return Record.Longitude; }
set { Record.Longitude = value; }
}
}

A content part record

这是一个简单的POCO实体对象,这个对象代表part的数据。Orchard负责从底层数据库中获取和更新数据,所以这里除了定义你的record之外不用做任何其他事情。

public class MapRecord : ContentPartRecord
{
public virtual double Latitude { get; set; }
public virtual double Longitude { get; set; }
}

A handler

Handler继承自ContentHandler,负责告诉Orchard如何处理你的part:

  • 数据库持久化
  • 处理content item的生命周期事件
  • 定义你的part要添加哪些已存在的content items
public class MapHandler : ContentHandler
{
public MapHandler(IRepository<MapRecord> repository)
{
Filters.Add(StorageFilter.For(repository));
}
}

A driver

可以把Driver当做是一个content part的controller (MVC术语)。它负责显示和编辑你的part。Drivers必须继承自ContentPartDriver<T>, T是你的content part类型。这里有3个方法可以重载:Display 和两个Editor

  • Display method is called whenever your part is rendered in frontend.
  • Editor方法:一个用来展现编辑窗口 (GET),一个用来展现保存窗口 (POST)。当你开始生成一个content item(例如一个新page)时调用第一个方法,当点击"Save"时触发第二个方法。

类似与MVC的controller actions,这里的方法返回一个shape对象。Shapes通过参数中的动态对象方法去找.cshtml,例如如果我们在/Views/Parts目录下存在MyModule.MyPart.cshtml文件,则通过动态方法shapeHelper.Parts_MyModule_MyPart(…)来访问

public class MapDriver : ContentPartDriver<MapPart>
{
protected override DriverResult Display(
MapPart part, string displayType, dynamic shapeHelper)
{

return ContentShape("Parts_Map", () => shapeHelper.Parts_Map(
Longitude: part.Longitude,
Latitude: part.Latitude));
}

//GET
protected override DriverResult Editor(
MapPart part, dynamic shapeHelper)
{

return ContentShape("Parts_Map_Edit",
() => shapeHelper.EditorTemplate(
TemplateName: "Parts/Map",
Model: part,
Prefix: Prefix));
}
//POST
protected override DriverResult Editor(
MapPart part, IUpdateModel updater, dynamic shapeHelper)
{

updater.TryUpdateModel(part, Prefix, null, null);
return Editor(part, shapeHelper);
}
}

Display shapes

这里就是Razor视图.cshtml文件,按照命名约定,显示用的模板存在于/Views/Parts 目录下,返回Editor driver方法时的模板存在于/Views/EditorTemplates/Parts目录下。

<img alt="Location" border="1" src="http://maps.google.com/maps/api/staticmap?
&zoom=12
&size=500x500
&maptype=roadmap
&markers=color:blue|@Model.Latitude,@Model.Longitude
&sensor=false" />

Data migration

这是定义数据库的地方。一般我们通过在Orchard命令行输入codegen datamigration <your_module_name> 来生成目录。这里还可以更改一些设置等。

public class Migrations : DataMigrationImpl
{

public int Create()
{
// Creating table MapRecord
SchemaBuilder.CreateTable("MapRecord", table => table
.ContentPartRecord()
.Column("Latitude", DbType.Double)
.Column("Longitude", DbType.Double)
);

ContentDefinitionManager.AlterPartDefinition(
typeof(MapPart).Name, cfg => cfg.Attachable());

return 1;
}
}

推荐:你可能需要的在线电子书 

我的新浪围脖: http://t.sina.com.cn/openexpressapp

欢迎转载,转载请注明:转载自周金根 [ http://zhoujg.cnblogs.com/ ]

Orchard: module开发基础技术知识相关推荐

  1. SIP协议(基础技术知识)

    SIP协议(基础技术知识) SIP(Session InitiationProtocol)协议是Internet多媒体通信和控制协议体系的一部分,该协议族包括会话描述协议(SDP).会话发布协议(SA ...

  2. 【安卓开发系列 -- APP】APP 开发基础技术整理

    [安卓开发系列 -- APP]APP 开发基础技术整理 [1]Android Studio APP 项目目录布局  [2]活动的生命周期 活动的状态 : 1. 运行状态,一个活动位于返回栈栈顶时,活动 ...

  3. WAP 2.0网站是用XHTML MP基础(手机网站开发基础技术)

    原文链接(英文):http://www.developershome.com/wap/xhtmlmp/ 同时推荐的文章(英文)http://mobiforge.com/starting/story/a ...

  4. IT:后端进阶技术路线图(初级→中级→高级)、后端开发工程师(技术方向分类之后台业务开发/中间件/内核/分布式架构)基础知识简介、技术路线/技术趋势指南(如何选择自己的技术方向)之详细攻略

    IT:后端进阶技术路线图(初级→中级→高级).后端开发工程师(技术方向分类之后台业务开发/中间件/内核/分布式架构)基础知识简介.技术路线/技术趋势指南(如何选择自己的技术方向)之详细攻略 目录 后端 ...

  5. 技术干货 | Flutter 混合开发基础

    导读:Flutter 支持以独立页面.甚至是 UI 片段的方式,集成到现有的应用中,即所谓的混合开发模式.本文主要谈谈 Android 平台下, Flutter 的混合开发与构建. 文|李成达 网易云 ...

  6. SP 短信开发-基础知识篇

    SP 短信开发-基础知识篇 很土的话题,但是最近帮朋友做这个东西,所以写点东西出来给初学者参考. 一.准备资料 SP开发资料网站上有很多,但是主要是以下几个文档: 1.MISC1.6 SP订购通知接口 ...

  7. 《OpenGL ES 2.0游戏开发(上卷):基础技术和典型案例》一6.6 本章小结

    本节书摘来异步社区<OpenGL ES 2.0游戏开发(上卷):基础技术和典型案例>一书中的第6章,第6.6节,作者: 吴亚峰 责编: 张涛,更多章节内容可以访问云栖社区"异步社 ...

  8. IM开发基础知识补课(五):通俗易懂,正确理解并用好MQ消息队列

    1.引言 消息是互联网信息的一种表现形式,是人利用计算机进行信息传递的有效载体,比如即时通讯网坛友最熟悉的即时通讯消息就是其具体的表现形式之一. 消息从发送者到接收者的典型传递方式有两种: 1)一种我 ...

  9. IM开发基础知识补课(四):正确理解HTTP短连接中的Cookie、Session和Token

    1.前言 众所周之,IM是个典型的快速数据流交换系统,当今主流IM系统(尤其移动端IM)的数据流交换方式都是Http短连接+TCP或UDP长连接来实现.Http短连接主要用于从服务器读取各种持久化信息 ...

最新文章

  1. Java基础语法运算和控制符
  2. Linux c语言虚拟串口,利用socat和cutecom实现Linux虚拟串口通信
  3. 2021-08-25路演的反馈
  4. c语言ue,小话C语言中的cotinue和break
  5. Python学习笔记:生成器(Generator)
  6. css 类别选择器 并集,CSS常用选择器
  7. pandas数据切片
  8. 大话设计模式C++版——代理模式
  9. 搜索系统硬盘中包含指定字符串的文件的工具和方法——全文搜索、搜索文件内容(持续更新中)
  10. java培训一般有哪些课程_java培训有哪些课程
  11. appbase_实时图形数据库即服务与Appbase
  12. CM3学习笔记(一)存储器系统
  13. IPhone 视图切换的的2种方法
  14. 设计模式(5)原型模式(Prototype)
  15. 深入浅出Yolo系列之Yolov3Yolov4核心基础知识完整讲解
  16. [译]CRF和QP的区别
  17. 2022年茶艺师(中级)特种作业证考试题库及在线模拟考试
  18. 正则表达式的相关操作和验证
  19. RISC-V调用惯例
  20. P4117 [Ynoi2018] 五彩斑斓的世界

热门文章

  1. win10 2004更新完成之后出现进不去系统的问题
  2. zabbix4.2之web监控
  3. 暗淡蓝点-爱护我们的家园-地球
  4. VBA自定义方法 快捷键设置
  5. 初次安装Linux(Ubuntu)(ssh,ftp服务安装)
  6. 遥感导论网课_甘肃农业大学2019年地理信息科学专业专升本招生 专业课考试大纲...
  7. 【Hadoop】Hadoop生态圈基本组件介绍
  8. Spring @Autowired 调用别的包下的Bean 解决方法
  9. 关于MySQL的wait_timeout连接超时问题报错解决方案
  10. 使用layui遇到的一些问题及解决方案