Adventtipp 23 – Copy Page To Versions – eine Hilfe für Content Editoren

sitecore-advent23

  Will man als Autor eine neue Sprachversion einer Seite anlegen, kann das ein grösseres Unterfangen sein. Die finalen Renderings und alle verknüpften Datasources müssen für die entsprechende Version angelegt werden. Da würde man sich wünschen, man könnte einfach die eine Sprachversion … Weiterlesen

Adventtipp 5 – Locking und Unlocking von Items beim Bearbeiten von Seiten

sitecore-advent5

Locking und Unlocking von Items in Sitecore – um was geht’s? Sitecore bietet von Haus aus seit Version 7.x die Möglichkeit, einen Sperr-Modus (Item locking) von Elementen zu aktivieren, damit mehrere Autoren beim Bearbeiten von Seiten und Komponenten nicht gleichzeitig … Weiterlesen

Ganz einfach herausfinden auf welchen Seiten ein bestimmtes Sitecore (Media) Item eingebunden wurde

sitecore tipp der woche

Oft wird die Frage gestellt, wie man im Sitecore CMS herausfinden kann, an welcher Stelle – respektive in welchen Items – ein bestimmtes anderes Item überall eingebunden wurde. Diese Abhängigkeiten kann ein Autor ganz einfach über das „Links“-Menü im Sitecore Content Editor einsehen! Weiterlesen

„Publishing-Status“ im Content-Editor anzeigen

Anzeige der Warnung im Content-Editor

Standardmässig ist im Sitecore-Content-Editor nicht ersichtlich, welche Items bereits publiziert wurden und welche nicht. Mit ein wenig Programmieraufwand kann man jedoch übersichtliche Anzeigen erstellen, welche den „Publizierungs-Status“ für jedes Item direkt darstellen. Weiterlesen

Custom Gutter für die Übersicht der Item-Versionen

„Gutters“ sind wohl eines der versteckteren Features des Sitecore Content Editors – bieten jedoch eine schnelle optische Erfassungsmöglichkeit über die ganze Sitecore-Item-Hierarchie für eine bestimmte Anforderung. Standardmässig sind folgende Gutters im System vorhanden:

  • Clones
  • My Locked Items
  • WorkflowState
  • Broken Links
  • Missing Versions
  • Publishing Warnings
  • Validation Rules
  • Presentation Overriden

Nach der Aktivierung eines oder mehreren Gutters, erscheint – und darum der Name – in der linken „Rinne“ des Content-Editors ein Symbol, welches zusätzliche Informationen visuell, aber auch textuell über einen Tooltip präsentiert. Die vorhandenen Gutters decken bereits eine gewisse Anzahl an Bedürfnissen ab, je nach Projekt können aber natürlich weitere hinzukommen. Die Grundarchitektur von Sitecore ermöglicht einem hierbei, eigene Gutters zu erstellen. Selbstverständlich auf einfache Art und Weise.

Ein Beispiel

Als häufige Kundenanforderung wird oft eine Übersichtsmöglichkeit gewünscht, bei der man sehen kann, ob ein Item in der aktuell aktivierten Sprache vorhanden ist, oder nicht. Out of the Box bietet Sitecore den Gutter „Missing Versions“ an, welcher sich jedoch darauf spezialisiert hat alle Items hervorzuheben, welche irgend eine Lücke in einer Sprache besitzen – unabhängig von der gewählten Sprach-Version. Dies ist zwar sehr nützlich, jedoch nicht für jede Situation brauchbar.

Aus diesem Grund erstellen wir nun einen eigenen Gutter mit der gewünschten Funktionalität. Da wir in einigen Projekten den Language Fallback von Alex Shyba im Einsatz haben, werden wir dieses Modul ebenfalls mitberücksichtigen.

 

1. Erstellung der Klasse, welcher innerhalb der Web-Applikation zur Verfügung steht:

namespace Project.Core.Gutters
{
    using System;
    using Sitecore.Data.Items;
    using Sitecore.Data.Managers;
    using Sitecore.Diagnostics;
    using Sitecore.Globalization;
    using Sitecore.Shell.Applications.ContentEditor.Gutters;

    /// <summary>
    ///     Represents a LockedItems.
    /// </summary>
    public class MissingCurrentVersion : GutterRenderer
    {
        /// <summary>
        /// The language fallback field name
        /// </summary>
        private const string FIELD_FALLBACK = "Fallback";

        #region Methods

        /// <summary>
        /// Gets the icon.
        /// </summary>
        /// <param name="pItem">
        /// The item.
        /// </param>
        /// <returns>
        /// The icon.
        /// </returns>
        protected override GutterIconDescriptor GetIconDescriptor(Item pItem)
        {
            Assert.ArgumentNotNull(pItem, "pItem");

            if (pItem.Versions.Count > 0)
            {
                return null;
            }

            try
            {
                var language = LanguageManager.GetLanguage(pItem.Language.CultureInfo.Name);
                var langItem = language.GetItem(pItem.Database);
                if (langItem != null && !string.IsNullOrEmpty(langItem[FIELD_FALLBACK]))
                {
                    var fallbackLangItem = LanguageManager.GetLanguage(langItem[FIELD_FALLBACK]);
                    if (fallbackLangItem != null)
                    {
                        var fallbackItem = pItem.Database.GetItem(pItem.ID, fallbackLangItem);
                        if (fallbackItem != null)
                        {
                            if (fallbackItem.Versions.Count > 0)
                            {
                                string fallBackMessage = string.Format("{0} {1} | {2} {3}", Translate.Text("Missing versions in: "), pItem.Language.CultureInfo.EnglishName, Translate.Text("Use Fallback-Language: "), fallbackLangItem.CultureInfo.EnglishName);
                                GutterIconDescriptor fallbackGutterIconDescriptor = new GutterIconDescriptor { Icon = "Applications/32x32/nav_undo_red.png", Tooltip = fallBackMessage };
                                return fallbackGutterIconDescriptor;
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Warn(string.Format("Gets an Error to check the Language-Versions with message: {0}", ex.Message), this);
            }

            string str = string.Format("{0} {1}", Translate.Text("Missing versions in: "), pItem.Language.CultureInfo.EnglishName);
            GutterIconDescriptor gutterIconDescriptor = new GutterIconDescriptor { Icon = "Applications/32x32/warning.png", Tooltip = str };
            return gutterIconDescriptor;
        }

        #endregion
    }
}

 

2. Anschliessend müssen wir nur noch unsere Klasse in der Sitecore-Core-Datenbank registrieren.

Pfad: /sitecore/content/Applications/Content Editor/Gutters/

 

That’s it! Nun haben wir alle Entwicklungsarbeiten erledigt & können unseren neuen Gutter im Content Editor aktivieren:

 

Anschliessend erhalten wir von Sitecore  eine Warnung, wenn ein Item in unserer aktiven Sprache nicht gepflegt wurde:

Zusätzlich wird eine andere Anzeige aktiviert, wenn es zwar keine Version in meiner aktiven Sprache gibt, aber die definierte Fallback-Sprache hier greifen würde. Dieses Icon ist nur dann ersichtlich, wenn das Modul auch installiert wurde. Ohne Fallback-Modul würde hier ebenfalls das „Warn“-Icon angezeigt werden.

Fazit
Zusammenfassend kann man behaupten, dass man über Gutters sehr schnell, mit sehr wenig Aufwand solche Anzeige-Hilfen in Sitecore erstellen lassen kann.
Daraus resultiert eine Qualitäts- und Produktivitätssteigerung für die Backend-Authoren.