After my post Sitecore Sublayout Parameters I had a question about how to get the ID of the current sublayout without having to hard code the ID. So here is the code:
15 public partial class layouts_MySubLayout : System.Web.UI.UserControl
16 {
17 private readonly string _layoutSearch = "/sitecore/layout/sublayouts//*/{0}";
18 protected void Page_Load(object sender, EventArgs e)
19 {
20 string className = this.GetType().Name;
21
22 //for this is example I am using a Web Site project.
23 //This means that when I create any User Control it prefixes with 'layouts_' (directory name)
24 //and suffixes '_ascx' (file extension) to the compiled class name. These have to be removed
25 className = className.Replace("_ascx","");
26 className = className.Replace("layouts_", "");
27
28 Response.Write(string.Format(_layoutSearch, className));
29
30 Sitecore.Data.Items.Item template = Sitecore.Context.Database.SelectSingleItem(
31 string.Format(_layoutSearch, className)
32 );
33
34 if (template != null)
35 {
36 Response.Write(template.ID);
37 }
38 else
39 Response.Write("Not Found");
40
41 }
42 }
Couple of things to note:
- When using a Web Site project you will notice that it prefixes and suffixes extra text to the end of your class name at compile time, this has to be removed.
- I have also assumed that you have kept the name of the class the same as the name of the template.
- If you are not using a Web Site project but instead using a Web Applicatiton project you maybe able to remove line 25 and 26; just be sure to remove any namespaces so that you are only left with the class name.
- The code must be run in a member of the sublayout you are trying to retrieve the ID for otherwise you will get an class name
Add comment