五、扩展Orchard(三) Building a hello world module
本文讲述了如何为Orchard创建一个非常小的模块,它仅仅显示一个 “hello world”页。
Introduction
本例中,我们没有任何数据,所有model没有使用。仅仅有一个controller和一个view。
Orchard中的模块是一级扩展,并能被打包可重用于其它Orchard网站。模块像MVC Areas一样实现,MVC中的areas是子网站,其中包含了一组功能,在相对于网站其它部分隔离执行。Orchard模块是有manifest文件的简单的area,它可能使用了Orchard APIS。
Generating the Module Structure
要生成模块文件结构需要下载并启用Code Generation模块,打开Orchard 命令行,执行下面的命令:
codegen module HelloWorld
Modifying the Manifest
在Modules目录下应该建好了HelloWorld目录,编辑module.txt文件:
name: HelloWorld antiforgery: enabled author: The Orchard Team website: http://orchardproject.net version: 0.5.0 orchardversion: 0.5.0 description: The Hello World module is greeting the world and not doing much more. features: HelloWorld: Description: A very simple module. Category: Sample
这个文本文件描述了模块。可以在和管理界面中看到这些信息。
Adding the Route
模块应该处理/HelloWorld URL,为了声明当访问这个URL时做什么,需要在HelloWorld目录中创建Routes.cs文件:
using System.Collections.Generic; using System.Web.Mvc; using System.Web.Routing; using Orchard.Mvc.Routes; namespace HelloWorld { public class Routes : IRouteProvider { public void GetRoutes(ICollection<RouteDescriptor> routes) { foreach (var routeDescriptor in GetRoutes()) routes.Add(routeDescriptor); } public IEnumerable<RouteDescriptor> GetRoutes() { return new[] { new RouteDescriptor { Priority = 5, Route = new Route( "HelloWorld", new RouteValueDictionary { {"area", "HelloWorld"}, {"controller", "Home"}, {"action", "Index"} }, new RouteValueDictionary(), new RouteValueDictionary { {"area", "HelloWorld"} }, new MvcRouteHandler()) } }; } } }
路由描述了URL 与控制器行为之间的映射,这段代码映射/HelloWorld URL到 HelloWorld area中Home 控制器的Index行为。
Creating the Controller
新模块也有Controllers文件夹,创建HomeController.cs文件到Controller文件夹:
using System.Web.Mvc; using Orchard.Themes; namespace HelloWorld.Controllers { [Themed] public class HomeController : Controller { public ActionResult Index() { return View("HelloWorld"); } } }
这个控制器处理HelloWorld URL请求,默认的行为是index,HelloWorld view将被呈现。
注意控制器类中的Themed特性,将请求当前激活主题的皮肤。
Creating the View
在Views文件夹下创建HelloWorld.cshtml文件:
<h2>@T("Hello World!")</h2>
这个文件指定视图的核心内容,周围将被添加当前主题的默认layout。
注意,我们使用T辅助功能使这个视图准备好本地化。这不是强制的,但它是个很好的体验。
Adding the new files to the project
我们几乎做完了,剩下的唯一任务是在模块中为动态编译系统文件集,打开HelloWorld.csproj文件,添加下面内容:
<ItemGroup> <Compile Include="Routes.cs"/> <Compile Include="Controllers\HomeController.cs"/> </ItemGroup>
还为已经有的其它标签添加以下ItemGroup 配置节:
<Content Include="Views\Home\HelloWorld.cshtml" />
Activate the Module
在命令行激活模块:
feature enable HelloWorld
也可以在管理面板中激活模块。
Use the Module
在浏览器输入网址+/HelloWorld,将会显示下面信息:
Conclusion
在这个演示中我们创建了一个简单的模块,并通过home 控制器的 index行为处理路由,并从当前主题获取皮肤到一个简单的视图。