How to find the currently executing sublayout in Sitecore

Published by on
Tags:

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

 

Projects

Have you read?

Share internal members with another assembly



Blogs by date