Created
July 9, 2015 12:46
-
-
Save mikeedwards83/64517448ddb150cdb639 to your computer and use it in GitHub Desktop.
Example of how to customise the language dropdown in Sitecore
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?xml version="1.0" encoding="utf-8" ?> | |
| <!-- \Website\sitecore\shell\Applications\Content Manager\Galleries\Languages --> | |
| <control xmlns:def="Definition" xmlns="http://schemas.sitecore.net/Visual-Studio-Intellisense" xmlns:shell="http://www.sitecore.net/shell"> | |
| <Gallery.Languages> | |
| <Gallery> | |
| <!-- CodeBeside Type="Sitecore.Shell.Applications.ContentManager.Galleries.Languages.GalleryLanguagesForm,Sitecore.Client"/ --> | |
| <CodeBeside Type="LanguageDropDown.GalleryLanguagesForm,LanguageDropDown"/> | |
| <Script> | |
| window.onload = function() { | |
| var activeLanguage = document.querySelector('.scMenuPanelItemSelected'); | |
| activeLanguage.scrollIntoView(false); | |
| } | |
| </Script> | |
| <Stylesheet Key="GalleryLanguages"> | |
| .scMenuPanelItem, .scMenuPanelItem_Hover, .scMenuPanelItemSelected_Hover, .scMenuPanelItemSelected { | |
| padding-left: 0; | |
| padding-right: 0; | |
| padding-top: 8px; | |
| padding-bottom: 8px; | |
| } | |
| .scGalleryGrip { | |
| position: absolute; | |
| bottom: 1px; | |
| left: 1px; | |
| right: 1px; | |
| height: 10px; | |
| } | |
| .scLanguagesGalleryMenu { | |
| overflow: hidden; | |
| vertical-align: top; | |
| border-bottom: 12px solid transparent; | |
| -moz-box-sizing: border-box; | |
| box-sizing: border-box; | |
| width: 100%; | |
| height: 100%; | |
| border-collapse: separate; | |
| } | |
| div#Languages img { | |
| display: none; | |
| } | |
| </Stylesheet> | |
| <Border Width="100%" Height="100%"> | |
| <GalleryMenu ID="Options" Class="scLanguagesGalleryMenu"> | |
| <MenuPanel Height="100%"> | |
| <Scrollbox ID="Languages" Class="scScrollbox scFixSize scFixWidthInsideGallery" style="padding-top:0 !important;" Height="100%" Width="100%" /> | |
| </MenuPanel> | |
| </GalleryMenu> | |
| <Gallery.Grip /> | |
| </Border> | |
| </Gallery> | |
| </Gallery.Languages> | |
| </control> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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