Skip to content

Instantly share code, notes, and snippets.

@mikeedwards83
Created July 9, 2015 12:46
Show Gist options
  • Select an option

  • Save mikeedwards83/64517448ddb150cdb639 to your computer and use it in GitHub Desktop.

Select an option

Save mikeedwards83/64517448ddb150cdb639 to your computer and use it in GitHub Desktop.
Example of how to customise the language dropdown in Sitecore
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Sitecore;
using Sitecore.Configuration;
using Sitecore.Data;
using Sitecore.Data.Items;
using Sitecore.Data.Managers;
using Sitecore.Diagnostics;
using Sitecore.Globalization;
using Sitecore.Shell;
using Sitecore.Shell.Applications.ContentManager.Galleries;
using Sitecore.Web;
using Sitecore.Web.UI.HtmlControls;
using Sitecore.Web.UI.Sheer;
using Sitecore.Web.UI.XmlControls;
using System;
using System.Globalization;
namespace LanguageDropDown
{
// Decompiled with JetBrains decompiler
// Type: Sitecore.Shell.Applications.ContentManager.Galleries.Languages.GalleryLanguagesForm
// Assembly: Sitecore.Client, Version=7.0.0.0, Culture=neutral, PublicKeyToken=null
// MVID: 1B65E6AB-6430-418B-8C39-D08CBC5C2C45
// Assembly location: C:\inetpub\wwwroot\Sitecore8XDb\Website\bin\Sitecore.Client.dll
/// <summary>
/// Represents a gallery languages form.
///
/// </summary>
public class GalleryLanguagesForm : GalleryForm
{
/// <summary/>
protected GalleryMenu Options;
/// <summary/>
protected Scrollbox Languages;
/// <summary>
/// Handles the message.
///
/// </summary>
/// <param name="message">The message.</param>
public override void HandleMessage(Message message)
{
Assert.ArgumentNotNull((object)message, "message");
if (message.Name == "event:click")
return;
this.Invoke(message, true);
}
/// <summary>
/// Raises the load event.
///
/// </summary>
/// <param name="e">The <see cref="T:System.EventArgs"/> instance containing the event data.</param>
/// <remarks>
/// This method notifies the server control that it should perform actions common to each HTTP
/// request for the page it is associated with, such as setting up a database query. At this
/// stage in the page lifecycle, server controls in the hierarchy are created and initialized,
/// view state is restored, and form controls reflect client-side data. Use the IsPostBack
/// property to determine whether the page is being loaded in response to a client postback,
/// or if it is being loaded and accessed for the first time.
///
/// </remarks>
protected override void OnLoad(EventArgs e)
{
Assert.ArgumentNotNull((object)e, "e");
base.OnLoad(e);
if (Context.ClientPage.IsEvent)
return;
Item currentItem = GalleryLanguagesForm.GetCurrentItem();
if (currentItem == null)
return;
using (new ThreadCultureSwitcher(Context.Language.CultureInfo))
{
foreach (Language language in currentItem.Languages)
{
/// **********************************************************
/// PUT YOUR LOGIC IN HERE TO CUSTOMISE WHICH LANGUAGES ARE LISTED
/// **********************************************************
if (currentItem.Name.ToLowerInvariant().Contains("o") && language.Title != "English")
{
continue;
}
ID languageItemId = LanguageManager.GetLanguageItemId(language, currentItem.Database);
if (!ItemUtil.IsNull(languageItemId))
{
Item obj = currentItem.Database.GetItem(languageItemId);
if (obj == null || !obj.Access.CanRead() || obj.Appearance.Hidden && !UserOptions.View.ShowHiddenItems)
continue;
}
XmlControl xmlControl = ControlFactory.GetControl("Gallery.Languages.Option") as XmlControl;
Assert.IsNotNull((object)xmlControl, typeof(XmlControl));
Context.ClientPage.AddControl((System.Web.UI.Control)this.Languages, (System.Web.UI.Control)xmlControl);
Item obj1 = currentItem.Database.GetItem(currentItem.ID, language);
if (obj1 != null)
{
int length = obj1.Versions.GetVersionNumbers(false).Length;
string str1;
if (length != 1)
str1 = Translate.Text("{0} versions.", (object)length.ToString());
else
str1 = Translate.Text("1 version.");
string str2 = str1;
CultureInfo cultureInfo = language.CultureInfo;
xmlControl["Header"] = (object)(cultureInfo.DisplayName + " : " + cultureInfo.NativeName);
xmlControl["Description"] = (object)str2;
xmlControl["Click"] = (object)string.Format("item:load(id={0},language={1},version=0)", (object)currentItem.ID, (object)language);
xmlControl["ClassName"] = !language.Name.Equals(WebUtil.GetQueryString("la"), StringComparison.OrdinalIgnoreCase) ? (object)"scMenuPanelItem" : (object)"scMenuPanelItemSelected";
}
}
}
Item obj2 = Sitecore.Client.CoreDatabase.GetItem("/sitecore/content/Applications/Content Editor/Menues/Languages");
if (obj2 == null)
return;
this.Options.AddFromDataSource(obj2, string.Empty);
}
/// <summary>
/// Gets the current item.
///
/// </summary>
///
/// <returns>
/// The current item.
/// </returns>
private static Item GetCurrentItem()
{
string queryString1 = WebUtil.GetQueryString("db");
string queryString2 = WebUtil.GetQueryString("id");
Language language = Language.Parse(WebUtil.GetQueryString("la"));
Sitecore.Data.Version version = Sitecore.Data.Version.Parse(WebUtil.GetQueryString("vs"));
Database database = Factory.GetDatabase(queryString1);
Assert.IsNotNull((object)database, queryString1);
return database.GetItem(queryString2, language, version);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment