在SiteFinity 4中,我们可以在主页面的页面加载中设置主题名称,用作页面模板吗?
祝福, 阿基
答案 0 :(得分:0)
需要在asp.net的Page_PreInit事件中设置页面主题
不幸的是,Master Pages没有Page_PreInit事件,这是您需要设置主题的地方。
这是母版本身的限制,而不是Sitefinity。
但是,可以通过创建自定义路由处理程序来拦截请求并动态修改主题,从而在运行时设置主题。
首先创建一个自定义路由类:
public class CustomRouteHandler : PageRouteHandler
{
protected override void SetPageDirectives(Page handler, IPageData pageData)
{
base.SetPageDirectives(handler, pageData);
var url = HttpContext.Current.Request.RawUrl.ToLower();
var themeName = "AlternativeTheme";
if (url.StartsWith("/alternative"))
ThemeController.SetPageTheme(themeName, handler);
}
public static void RegisterType()
{
ObjectFactory.Container.RegisterType<PageRouteHandler, CustomRouteHandler>();
}
}
然后,您需要在Global.asax文件中注册该路由:
public class Global : System.Web.HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
Telerik.Sitefinity.Services.SystemManager.ApplicationStart += SystemManager_ApplicationStart;
}
void SystemManager_ApplicationStart(object sender, EventArgs e)
{
CustomRouteHandler.RegisterType();
}
}
现在每个请求都将通过该处理程序,您可以根据所需的任何自定义条件修改主题。
我打算整理一篇博文和视频,详细介绍如何完成此操作以及如何使用它,但这是它如何运作的基本概念。
我希望这有用!