Snippets

Snippets er mindre filer som kan legges inn i designet og tilføre funksjonalitet og innhold. De er i praksis WebUserControls (ascx-filer) som arver eR2UserControl.

For å lage snippets krever det en viss kjennskap til programmering i ASP.NET. Men det er ofte mulig å gjøre endringer i dem uten å kunne programmere annet enn html.

Her er et Example på en snippet som heter ut hovedmenyen til et nettsted. Den benytter seg av innebygget funksjonalitet i eRedaktør for å hente ut hovedmenyen.

<%@ Control Language="C#" Inherits="eR2UserControl" %>
<%@ Import  Namespace="eR2"%>
<ul id="menulist" class="menu">
 <%=Renderer.GetMenu(Util.GetSetting<int>("standardmeny"), 2, null, CurrentLanguage) %>
</ul>

Linje 1 er en standardlinje som alltid må være der. Den vil i noen tilfeller inneholde mer informasjon, blant annet når en snippet er delt opp i en kodefil og en designfil.

Linje 2 gir tilgang til innebygd eRedaktør-funksjonalitet.

Linje 3 og 5 er bare html.

Linje 4 kjører en funksjon fra Renderer-klassen og en fra Util-klassen for å hente ut standardmenyen til nettstedet inn i <ul>-listen.

Skille kode og design i samme fil

For å skille kode og design, kan en legge koden i én del av filen og designet i en annen del. Her er et Example som fyller inn tekst og tittelen i en label via kode.

<%@ Control Language="C#" Inherits="eR2UserControl" %>
<script runat="server">
    protected void Page_Load(object sender, EventArgs e)
    {
        lbl.Text = "Her er tittelen til åpnet side: " + CurrentItem.Title;
    }
</script>
    
<div class="infobox">
    <div class="infobox-content">
        <p>
            <asp:Label ID="lbl" runat="server" />
        </p>
    </div>
</div>

Skille kode og design i to filer

Dersom en har en del kode som skal skrives, og for å gjøre løsningen mest mulig ryddig og oversiktlig, skiller en kode og design i hver sine filer. Her er et Example

OpenGraphPlugin.ascx 

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="OpenGraphPlugin.ascx.cs" Inherits="OpenGraphPlugin" %>

OpenGraphPlugin.ascx.cs

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.Common;
using System.Linq;
using eR2;
using System.Web.UI.HtmlControls;

public partial class OpenGraphPlugin : eR2UserControl
{
    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        this.Page.PreRender += new EventHandler(Page_PreRender);
    }

    void Page_PreRender(object sender, EventArgs e)
    {
        SetTags();
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        this.Visible = false;
    }

    private void SetTags()
    {
        //Sjekker om det er valgt at denne siden ikke skal indekseres
        if (CurrentItem.HasValue("og-meta-description") || CurrentItem.HasValue("og-meta-image"))
        {
            AddHeaderMetaTagToHeader("og:title", CurrentItem.Title);
            AddHeaderMetaTagToHeader("og:type", CurrentItem.GetValue("og-meta-type"));
            AddHeaderMetaTagToHeader("og:description", CurrentItem.GetValue("og-meta-description"));
            AddHeaderMetaTagToHeader("og:url", CurrentItem.GetValue("og-meta-url"));
            AddHeaderMetaTagToHeader("og:image", CurrentItem.GetValue("og-meta-image"));
            AddHeaderMetaTagToHeader("og:site_name", Util.GetSetting("sidetittel"));
        }
    }

    private void AddHeaderMetaTagToHeader(string Name, string Content)
    {
        HtmlGenericControl metaTag = new HtmlGenericControl("meta");
        metaTag.Attributes.Add("name", Name);
        metaTag.Attributes.Add("content", Content);
        this.Page.Header.Controls.Add(metaTag);
    }
}