首先,您可能想要查看小部件和图层。您可以为经过身份验证的用户定义一个层,为匿名用户定义一个层,并将小部件附加到这些层以实现您想要的。这可能是您完成此任务的最佳方式。查看 Orchard 文档以获取有关如何执行此操作的示例。
在使用自定义控制器和大量自定义逻辑之前,我做过类似的事情。由于我的特定要求,小部件和图层不适用于此。页面上的所有内容都需要根据某些输入进行更改,而小部件和图层将不太适合此操作。我所做的是创建一个自定义控制器,以及一个具有高优先级的相应 Route(因此 Route 优先于任何其他想要成为主页的人)。我根本没有弄乱 IHomePageProvider 。
在控制器操作中,我提取了必要的数据,并创建了我想要的形状,然后返回如下结果:return new ShapeResult(this, homePageShape);
homePageShape
在 return 语句之前是这样构造的:
// Create personalized home page shape:
var homeShape = _orchardServices.New.CustomHome(
SomeShape1: someShape1
, SomeShape2: someShape2
, SomeModel1: someModel1
...
);
这将创建一个名为 CustomHome 的形状,并且 orchard 将自动在模块的 views 文件夹中查找名为 CustomHome.cshtml 的模板。
我创建了几个形状(您在上面看到的所有“someShapeX”变量)。大多数情况下,它们是通过 BuildDisplay() 方法从内容部分创建的。使用 IContentManager 查询内容部分,并像这样创建形状(此示例用于幻灯片放映形状):
dynamic sliderShape = _contentManager.BuildDisplay(sliderPart, "Detail");
您可以将逻辑放入控制器中,以根据用户是否登录来构建所需的形状。在 CustomHome.cshtml 中,您将呈现如下形状:
@Display(Model.SomeShape1)