Programmatically get active theme path?
Is there anything in the API that gives me back the path to the theme directory?
I am hoping to get back something like this: ~/Sitefinity/WebsiteTemplates/FalafelSitefinity/App_Themes/FalafelSitefinity
Anyone know of something built-in for that?
Hey Basem,
var t = pageManager.GetPageData(p.PageId).Template;
var tt = pageManager.GetPageData(p.PageId).Template.Theme;
var tm = t.MasterPage;
Should get you template, masterpage and theme applied.
With something like
ttheme = Config.Get<AppearanceConfig>().FrontendThemes;
you should get all the frontend themes installed in the system.
If you do something like this:
foreach (Telerik.Sitefinity.Web.Configuration.ThemeElement te in ttheme)
Response.Write(te.Path);
Response.Write(te.Name);
Response.Write(te.TagName);
You'll notice that both name and TagName are similar (at least in my quick mock) to which you need to verify against, I'm not sure...
Jochem.
Thanks a mil Jochem, this is what I ended up with:
/// <summary>
/// Gets the current theme.
/// </summary>
/// <returns></returns>
public
static
ThemeElement GetCurrentTheme()
//GET CURRENT TEMPLATE
var template =
new
PageManager()
.GetPageNode(
new
Guid(SiteMapBase.GetActualCurrentNode().Key))
.Page
.Template;
//GET THEME IF APPLICABLE
if
(template !=
null
)
string
theme = GetCurrentPage().Page.Template.Theme;
if
(!
string
.IsNullOrWhiteSpace(theme) && theme !=
"notheme"
)
//RETURN THEME BY NAME
return
Config.Get<AppearanceConfig>().FrontendThemes[theme];
//NO TEMPLATE OF THEME SELECTED
return
null
;
/// <summary>
/// Gets the current theme path.
/// </summary>
/// <returns></returns>
public
static
string
GetCurrentThemePath()
//GET CURRENT THEME
var theme = GetCurrentTheme();
//GET THEME PATH IF APPLIABLE
if
(theme !=
null
)
//GET PATH
string
path = theme.Path;
//GET WEB PATH OR RETURN NAMESPACE
if
(!
string
.IsNullOrWhiteSpace(path))
//REMOVE APP_DATA FROM CLIENT URL
return
path.StartsWith(
"~/App_Data"
, StringComparison.OrdinalIgnoreCase)
? VirtualPathUtility.ToAbsolute(
"~/"
+ path.Substring(10))
: path;
else
//TODO: VIRTUAL PATH FOR NAMESPACE?
return
theme.Namespace;
//NO THEME SELECTED OR FOUND
return
string
.Empty;