为Orchard CMS创建一个简单的HelloWorld模块

本文是阅读Orchard在线文档的笔记,原文见:http://www.orchardproject.net/docs/Building-a-hello-world-module.ashx,虽然对MVC知之甚少、对Razor还比较陌生,学习Orchard也刚刚开始,但也要坚持不懈的学习下去。

HelloWorld模块是一个非常简单的Orchard模块,其功能就是在浏览器里显示一段欢迎文本,所以只需要定义控制器和视图,不需要定义模型。

从ASP.NET MVC的角度看,模型是作为MVC Areas实现的。在MVC中Areas是包含许多功能的子站点,Areas彼此之间是相对隔离的。一个Orchard模块就是一个简单的带有清单的area。它可以使用Orchard的API。

1. 生成模块结构

打开Orchard命令行,输入以下命令来创建HelloWorld模块:

codegen module HelloWorld

执行这个命令后,会发现在网站根目录下的Modules文件夹中有一个HelloWorld文件夹,打开即可看到里面的结构,其中可以发现Orchard实际上是为我们创建了一个VS项目(HelloWorld.csproj),这样既可以使用VS2010开发模块,当然也可以使用任何一种文本编辑器来开发模块。

2. 修改清单

在HelloWorld根目录中有一个module.txt文件,这是描述此模块的清单文件,用于描述模块的名称,状态,作者,版本和包含的功能等内容,注意它的缩进用的是空格,不是制表符。

可以根据需要修改清单中的内容。

3. 添加路由

很显然这个模块是需要一个地址的,所以要给这个模块添加一个路由文件Route.cs,并放在HelloWorld根目录下:

   1: using System.Collections.Generic;
<!--CRLF-->
   2: using System.Web.Mvc;
<!--CRLF-->
   3: using System.Web.Routing;
<!--CRLF-->
   4: using Orchard.Mvc.Routes;
<!--CRLF-->
   5: 
<!--CRLF-->
   6: namespace HelloWorld {
<!--CRLF-->
   7:     public class Routes : IRouteProvider {
<!--CRLF-->
   8:         public void GetRoutes(ICollection routes) {
<!--CRLF-->
   9:             foreach (var routeDescriptor in GetRoutes())
<!--CRLF-->
  10:                 routes.Add(routeDescriptor);
<!--CRLF-->
  11:         }
<!--CRLF-->
  12: 
<!--CRLF-->
  13:         public IEnumerable GetRoutes() {
<!--CRLF-->
  14:             return new[] {
<!--CRLF-->
  15:                 new RouteDescriptor {
<!--CRLF-->
  16:                     Priority = 5,
<!--CRLF-->
  17:                     Route = new Route(
<!--CRLF-->
  18:                         "HelloWorld",
<!--CRLF-->
  19:                         new RouteValueDictionary {
<!--CRLF-->
  20:                             {"area", "HelloWorld"},
<!--CRLF-->
  21:                             {"controller", "Home"},
<!--CRLF-->
  22:                             {"action", "Index"}
<!--CRLF-->
  23:                         },
<!--CRLF-->
  24:                         new RouteValueDictionary(),
<!--CRLF-->
  25:                         new RouteValueDictionary {
<!--CRLF-->
  26:                             {"area", "HelloWorld"}
<!--CRLF-->
  27:                         },
<!--CRLF-->
  28:                         new MvcRouteHandler())
<!--CRLF-->
  29:                 }
<!--CRLF-->
  30:             };
<!--CRLF-->
  31:         }
<!--CRLF-->
  32:     }
<!--CRLF-->
  33: }
<!--CRLF-->

实际上这个文件Orchard已经创建好了,它在URL和控制器动作之间进行了映射,即将HelloWorld这个URL映射到使用Home控制器和Index动作的HelloWorld这个area上。

4. 创建控制器

在模块根目录下有个Controllers的文件夹(如果没有则创建一个),在这个文件夹中创建HomeController.cs文件,并输入下列内容:

   1: using System.Web.Mvc;
<!--CRLF-->
   2: using Orchard.Themes;
<!--CRLF-->
   3: 
<!--CRLF-->
   4: namespace HelloWorld.Controllers {
<!--CRLF-->
   5:     [Themed]
<!--CRLF-->
   6:     public class HomeController : Controller {
<!--CRLF-->
   7:         public ActionResult Index() {
<!--CRLF-->
   8:             return View("HelloWorld");
<!--CRLF-->
   9:         }
<!--CRLF-->
  10:     }
<!--CRLF-->
  11: }
<!--CRLF-->
  12: 
<!--CRLF-->

这段代码中,有个ThemedAttribute特性修饰了这个HomeController类,这表示让视图使用当前活动主题。类中的Index方法返回了名为"HelloWorld"的视图,所以后面要创建这个视图。

5. 创建视图

在模块根目录的Views文件夹中创建一个名为Home的子文件夹。在Views/Home文件夹中,创建名为HelloWorld.cshtml的视图文件,并输入以下内容:

<h2>@T("Hello World!")h2>
<!--CRLF-->

这就是要显示的核心内容,一个二级标题。它会根据当前主题的布局进行显示。

T是一个辅助函数,作用是让这个视图能够被本地化,这不是强制使用的。

6. 更新项目文件

如果上面的工作是在VS2010中做的,那么这一步可以直接跳过了,否则需要打开HelloWorld.csproj文件,添加以下内容,从而能够让上面创建的代码文件能够被动态编译:

<ItemGroup>
<!--CRLF-->
  <Compile Include="Routes.cs"/>
<!--CRLF-->
  <Compile Include="Controllers/HomeController.cs"/>
<!--CRLF-->
ItemGroup>
<!--CRLF-->

还要添加下面这条,让视图文件也包含在项目中:

<Content Include="Views/HelloWorld.cshtml" />
<!--CRLF-->

这样模块就开发好了,下面的工作就是激活这个模块。

7. 激活模块

激活模块有两种方法,一种方法是以管理员身份登录到后台管理面板的Feature页面激活HelloWorld,另一种方法是打开Orchard命令行,输入以下命令:

feature enable HelloWorld

8. 使用模块

现在可以回到前端页面,在地址栏最后加上/HelloWorld,让它看起来像这样:localhost/orchard/HelloWorld (我是在IIS7默认网站下创建的应用程序),然后回车,如果前面的步骤没有错误的话,就会看到页面的内容区域会显示“Hello World”在浏览器上。

这样一个简单的模块就创建完毕并能够使用了。

你可能感兴趣的:(helloworld)