Sitefinity 4 Установить название темы программно - PullRequest
0 голосов
/ 31 мая 2011

В SiteFinity 4, можем ли мы задать имя темы в странице Загрузка главной страницы, которая используется в качестве шаблона страницы?

С наилучшими пожеланиями, Аки

1 Ответ

0 голосов
/ 01 июня 2011

Темы страницы должны быть установлены в событии Page_PreInit в asp.net

К сожалению, мастер-страницы не имеют события 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();
    }
}

Теперь каждый запрос будет проходить через этот обработчик, и вы сможете изменять тему в зависимости от любых пользовательских условий.

Я планирую собрать сообщение в блоге и видео, в котором более подробно рассказывается о том, как это делается и что вы можете с этим сделать, но это основная идея о том, как это работает.

Надеюсь, это полезно!

...