Sitefinity 4以编程方式设置主题名称

时间:2011-05-31 10:25:26

标签: sitefinity-4

在SiteFinity 4中,我们可以在主页面的页面加载中设置主题名称,用作页面模板吗?

祝福, 阿基

1 个答案:

答案 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();
    }
}

现在每个请求都将通过该处理程序,您可以根据所需的任何自定义条件修改主题。

我打算整理一篇博文和视频,详细介绍如何完成此操作以及如何使用它,但这是它如何运作的基本概念。

我希望这有用!