五、扩展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行为处理路由,并从当前主题获取皮肤到一个简单的视图。

posted @ 2012-03-21 16:08  commanderss  阅读(743)  评论(0编辑  收藏  举报