Navigation and service panel


Content

This text is fallbacked from the German Version. If you need use Google Translate


DMS Visitor Identification mit MVC

By Pascal Mathys on 14. November 2013, No comments

Das DMS (Digital Marketing System) von Sitecore benötigt für eine einfache Basismessung nicht viel Konfigurationsaufwand. Einer der zu implementierenden Punkte ist das VisitorIdentification UserControl, welches in das Layout-Template der Auftritte eingebunden werden muss. Mit der Verwendung von MVC können UserControls jedoch nicht einfach direkt eingebunden werden. Sitecore bietet auch keine explizite Integration der Controls für MVC an. Dieser Beitrag zeigt mögliche Implementierungen dieses Features auf.

Die Web Forms Integration des UserControls funktioniert wie folgt:

<sc:VisitorIdentification ID="dmsVisitorIdentification" runat="server" />

Das UserControl generiert bei aktivierter Analytics im Normalfall ein Link-Tag im HTML-Code, welches die Datei "/layouts/System/VisitorIdentification.aspx" einbindet. Das Ziel dieses Snippets ist, zwischen Bots (Crawler usw.) und menschlichen Besuchern (Browser) zu unterscheiden. Dies in der Annahme, dass Bots keine Stylesheets einbinden. 

Lösungsansatz 1:
Eine Variante wäre es, ein WebUserControl zu erstellen, welches ohne CodeBehind folgenden Inhalt besitzt:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %>
<sc:VisitorIdentification runat="server" />

Quelle: Chris van de Steeg auf GitHub

Dieses Control kann dann in einer Razor View mittels @Html.Partial("VisitorIdentification") eingebunden werden, sofern sich die Datei in einem durchsuchten Pfad der Views befindet. Die Lösung empfinde ich aber als relativ unglücklich, da Ansätze verwendet werden, welche eigentlich nicht zu MVC passen.

Lösungsansatz 2:
Meine favorisierte Implementierung funktioniert mittels der SitecoreHelper Klasse. Dafür wird der sehr simple Code des UserControls in eine Methode einer SitecoreHelper Extension-Klasse eingebettet und an MVC angepasst.

namespace Unic.Extensions
{
    using System.Web;
    using System.Web.Mvc;
    using Sitecore;
    using Sitecore.Analytics;

    /// <summary>
    /// The Sitecore helper extensions.
    /// </summary>
    public static class SitecoreHelperExtensions
    {
        /// <summary>
        /// Returns the visitor identification snippet if needed
        /// </summary>
        /// <param name="sitecoreHelper">The sitecore helper.</param>
        /// <returns>
        /// HtmlString with the identification snippet
        /// </returns>
        public static HtmlString AnalyticsVisitorIdentification(this Sitecore.Mvc.Helpers.SitecoreHelper sitecoreHelper)
        {
            if (Context.Diagnostics.Tracing || Context.Diagnostics.Profiling)
            {
                return new HtmlString("<!-- Visitor identification is disabled because debugging is active. -->");
            }
            
            if (!Tracker.IsActive || Tracker.Visitor.VisitorClassification != 925) return MvcHtmlString.Empty;
            
            return new HtmlString("<link href=\"/layouts/System/VisitorIdentification.aspx\" rel=\"stylesheet\" type=\"text/css\" />");
        }
    }
}

Die Methode kann dann innerhalb einer Razor View mittels @Html.Sitecore().AnalyticsVisitorIdentification() ausgegeben werden. Die Funktionalität entspricht 1:1 der Web Forms Variante. Der offensichtliche Nachteil dieser Variante ist, dass der Code von Sitecore kopiert und manuell angepasst werden muss, wenn dieser in einer neueren Sitecore-Version ändern würde. Die Implementation entspricht aber dem Gedanken von MVC, was für mich den Nachteil aufwiegt.

Categories  Best Practice Tags  MVC  Razor View  DMS  UserControl  Helper

No comments

Add your comment

Your email address will not be published. Required fields are marked *

*