我对果园很新。
为了学习果园模块开发,我按照文档编写了一个商业模块。
该模块由产品部分和产品类型组成,其中包含产品部分。
在启用模块期间,它将分别为此模块创建管理员和主菜单,“Commerce”和“Shop”。
我的问题是
我附上源代码,请从以下链接下载
答案 0 :(得分:4)
要接管主页,标准的Orchard方式是实现IHomePageProvider。
答案 1 :(得分:1)
在模块中作为migrations.cs的一部分创建页面时,您可以告知Autoroute部分将创建的页面别名设置为主页:
//create a page page
var homepage = _contentManager.Create("Page");
homepage.As<TitlePart>().Title = "My Home";
_contentManager.Publish(homepage);
var homePageArp = homepage.As<AutoroutePart>();
homePageArp.DisplayAlias = String.Empty;
_autorouteService.PublishAlias(homePageArp);
这假设您在没有任何事先主页的情况下从一个干净的Orchard实例出发;如果您有现有的主页,则必须将这些页面的别名重新生成为模块的一部分。这就是Orchard.Autoroute项目中AutoroutePartHandler的一部分(在Publish Alias方法中):
// regenerate the alias for the previous home page
var currentHomePages = _orchardServices.ContentManager.Query<AutoroutePart, AutoroutePartRecord>().Where(x => x.DisplayAlias == "").List();
foreach (var current in currentHomePages) {
if (current != null) {
current.CustomPattern = String.Empty; // force the regeneration
current.DisplayAlias = _autorouteService.Value.GenerateAlias(current);
}
_autorouteService.Value.PublishAlias(current);
}
_autorouteService.Value.PublishAlias(part);
如果你深入了解自动项目的驱动程序和处理程序,你将学到很多关于内部的知识;当您在管理界面中勾选“设为主页”框时,它会将路径设置为“/”,然后将其拾取,触发旧主页重新连线,清除String.Empty的“/”路径,然后发布该空白别名,为您提供新的主页。
(从Orchard 1.6开始有效)
答案 2 :(得分:0)
如果您的模块将被其他人使用,那么最好制作一个可添加到任何图层的小部件(例如主页图层)。这样每个用户都可以决定模块的使用位置。 如果您仅为自己使用此模块,则可以覆盖默认路由(标准mvc功能)。 查看我的ExtendedRegistration模块(Routes.cs)以了解它是如何完成的。
此处我将覆盖标准帐户/注册网址。应该没有什么可以阻止你覆盖默认的HomeController。
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 = 19,
Route = new Route(
"Users/Account/Register",
new RouteValueDictionary {
{"area", "itWORKS.ExtendedRegistration"},
{"controller", "Account"},
{"action", "Register"}
},
new RouteValueDictionary(),
new RouteValueDictionary {
{"area", "itWORKS.ExtendedRegistration"}
},
new MvcRouteHandler())
}
};
}
}