Blog 4 Umbraco 2.0.14 - Blogs erzeugen leicht gemacht

Montag, 14. Dezember 2009 von Immo Wache
Kategorien: Umbraco  Blog  deutsch  C#  Weihnachtskalender 

Original von Per Ploug Hansen

Bisher haben wir unser Umbraco Blog Package immer nur für ein einzelnes Blog auf unserer Website in Betracht gezogen. Das Blog war sozusagen Die gesamte Website. Es gibt jedoch überhaupt keinen Grund, warum es nicht möglich wäre, mehrere Blogs als Teil einer großen Website zu verwalten, so dass mehrere Autoren jeweils ihren eigenen Bereich haben, um ihre Beiträge zu veröffentlichen. Des weiteren haben wir bisher noch gar nicht betrachtet, wer denn der Autor eines Blogs ist.

Daher wird es heute um folgende zwei Themen gehen:

  1. Entwickeln einer einfachen Benutzerauswahl für die Bedienoberfläche (UI), um den Autor eines Blogs auszuwählen,
  2. Erzeugen eines einfachen Steuerelements für das Dashboard, mit dem wir ein neues Blog auf unserer Website erzeugen können.

Damit müssen wir uns heute mit der Klasse AbstractDataEditor, dem User-API und den eingebauten Umbraco UI Steuerelementen aus dem Namensraum umbraco.uicontrol herumschlagen.

Die Benutzerauswahl

Aus völlig unverständlichen Gründen gibt es bisher kein Umbraco UI-Steuerelement, um einen bestimmten Benutzer auszuwählen und seine User-ID in einem Dokument abzuspeichern. Aber keine Angst, dies zu ändern ist wirklich ganz ganz einfach und schneller erledigt, als man das Wort "AbstractDataEditor" buchstabieren kann.

Wir wollen ein Steuerelement als Dropdown-Liste erstellen, in der alle existierenden Benutzer aufgelistet werden. Der selektierte Benutzer soll dann im Dokument gespeichert werden. Beginnen wir also mit der Erzeugung einer neuen Klasse, die von der Klasse umbraco.cms.businesslogic.datatype.AbstractDataEditor abgeleitet wird. Wir müssen nur die Eigenschaften Id und DataTypeName überschreiben und eine eindeutige ID sowie einen geeigneten Namen festlegen. Anschließend müssen wir nur noch das Dropdown-Steuerelement einfügen und alles korrekt miteinander verbinden:

private DropDownList m_control = new DropDownList(); 
public UserPicker() 
{ 
    base.RenderControl = m_control; 
    m_control.Init += new EventHandler(m_control_Init); 
    base.DataEditorControl.OnSave += new umbraco.cms.businesslogic.datatype.AbstractDataEditorControl.SaveEventHandler(DataEditorControl_OnSave); 
}

Wenn wir die Ereignisse verknüpft haben können wir die Benutzer in das Steuerelement laden:

void m_control_Init(object sender, EventArgs e) 
{ 
    m_control.Items.Clear(); 
    foreach (User u in User.getAll()) 
    { 
        m_control.Items.Add(new ListItem(u.Name, u.Id.ToString())); 
    } 
    m_control.SelectedValue = base.Data.Value != null ? base.Data.Value.ToString() : ""; 
}

Abschließend erklären wir noch dem DataEditor, den ausgewählten Benutzer zu speichern:

void DataEditorControl_OnSave(EventArgs e) 
{ 
    base.Data.Value = m_control.SelectedValue; 
}

Und Voilà, schon können wir eine Benutzer-ID in einem Dokument speichern. Wir werden also unseren neuen Datentyp in einer Eigenschaft Autho für den Dokumenttyp Blog hinzufügen. Die komplette Klasse ist im Codeplex-Projekt Blog4Umbraco in der Datei (?!?) verfügbar.

Das Steuerelement für das Dashboard

Nachdem wir nun einen Platz geschaffen haben, um die ID des Autors zu speichern, werden wir nun ein einfaches Benutzersteuerelement (engl. Usercontrol) erzeugen, um neue Blog-Einträge zu schreiben und dieses Steuerelement als zusätzlichen Reiter auf dem Dashboard platzieren. Um dabei dem Autor eine vertraute Umgebung  bereitzustellen und auch den Umbraco UI-Richtlinien zu genügen, verwenden wir die eingebauten UI-Steuerelemente bei der Gestaltung des Steuerelements. Diese Umbraco UI-Elemente befinden sich in der Datei controls.dll und können im .ascx Formular durch hinzufügen einer Referenz verwendet werden. Diese Referenz geschieht wie folgt:

<%@ Register Namespace="umbraco.uicontrols" Assembly="controls" TagPrefix="umb" %>

Um nun ein einfaches Formular mit den eingebauten Umbraco UI-Komponenten zu erzeugen, können wir aufgrund unserer zugefügten Referenz den umb-Präfix verwenden:

<umb:Pane runat="server" Text="Create a blog"> 

    <umb:PropertyPanel runat="server" Text="Blog name"> 
        <asp:TextBox ID="tb_name" runat="server" /> 
    </umb:PropertyPanel>

    <umb:PropertyPanel runat="server" Text=" "> 
        <asp:Button runat="server" OnClick="createBlogClick" Text="Create" /> 
    </umb:PropertyPanel>

</umb:Pane>

Nachdem wir nun das Formular fertiggestellt haben, müssen wir nur einen einfachen API-Aufruf ausführen, um das korrekte Dokument zu erzeugen:

DocumentType dt = DocumentType.GetByAlias("Blog"); 
Document d = Document.MakeNew(tb_name.Text, dt, User.GetCurrent(), int.Parse(cp.Text));

d.getProperty("author").Value = User.GetCurrent().Id; 
d.getProperty("blogName").Value = tb_name.Text; 
d.getProperty("blogDescription").Value = "The blog of " + User.GetCurrent().Name;

d.Save();

d.Publish(User.GetCurrent()); 
umbraco.library.UpdateDocumentCache(d.Id);

Später werden wir das Formular um die Fähigkeit erweitern den Autor automatisch zu erzeugen. Im Moment jedoch trägt das Formular  einfach dem gegenwärtigen Benutzer ein.

Einfügen in die Package-Installation

Eine letzte Sache bleibt noch zu tun. Um sicherzustellen, dass bei der Package-Installation auch der neue Reiter im Dashboard eingefügt wird, schreiben wir schnell noch eine Package-Action. Unser Dashboard-Steuerelement wird bei der Installation bereits an die richtige Stelle im Server-Dateisystem geschrieben. Aber damit der Reiter auch sichtbar wird, muss der Installer die XML-Datei dashboard.config entsprechend erweitern. Damit dies bei der Installation automatisch geschieht (und genauso beim Deinstallieren auch wieder entfernt wird) benutzen und konfigurieren wir die Package-Action addDashboardSection:

<action dashboardalias="CreateBlog" alias="addDashboardSection" runat="install"> 
  <section> 
    <areas> 
      <area shape="RECT" coords="0,0,0,0" />content</area> 
    </areas> 
    <tab caption="Create Blog"> 
      <control>/usercontrols/Blog4Umbraco/BlogCreator.ascx</control> 
    </tab> 
  </section> 
</action>

So, das war's für heute. Wir haben eine neue UI-Komponente zur Auswahl eines Benutzers mit nur 15 Zeilen Code implementiert, wir haben die eingebauten Umbraco UI-Steuerelemente benutzt, um einen eigenen Dashboard-Reiter zu bauen, und schließlich haben wir alles mit einer Package-Action hübsch zusammengebunden, um die Installation so benutzerfreundlich wie möglich zu gestalten.

4 Kommentar(e) zu “Blog 4 Umbraco 2.0.14 - Blogs erzeugen leicht gemacht”

  1. Kailin schrieb:
    Hahaahha. I’m not too bright today. Great post!
  2. pkkzvcp schrieb:
    MhirXf , [url=http://tqpziqsvnhqm.com/]tqpziqsvnhqm[/url], [link=http://pgybznqhiuko.com/]pgybznqhiuko[/link], http://izsyplcxgyfr.com/
  3. kbfhhai schrieb:
    r3iHzb , [url=http://pccocotmdgtn.com/]pccocotmdgtn[/url], [link=http://oakfmtsrkyhk.com/]oakfmtsrkyhk[/link], http://spvdoocdetum.com/
  4. Nibby schrieb:
    Yup, that suhold defo do the trick!

Beitrag kommentieren:


wird nicht angezeigt


optional - bitte mit http://



Bitte geben Sie den im darüberliegenden Bild erkennbaren Sicherheitscode ein, um einen SPAM-Missbrauch des Formulars zu verhindern.