Content Management System

Eigene Module für contentXXL programmieren

*
CMS Mittelstand
CMS kostengünstig
CMS XML CMS preiswert CMS Mittelstand
CMS WYSIWYG Mit wenigen Programmzeilen wird ein Modul erstellt, daß voll in das contentXXL Framework integriert ist. Modultitel und Rahmen können über Templates gestaltet werden. Die Platzierung erfolgt beliebig oft auf der Website per Drag & Drop WYSIWYG direkt im Browser. Die Zugriffsrechte (hier zum Ändern der Ausschrift) werden voll in das Rollenkonzept von contentXXL integriert. CMS .NET CMS Mittelstand
Content Management CMS
CMS Mittelstand

Zugegeben, mit C++ und in einer Consolenanwendung sieht "Hello World" einfacher aus. Aber damit kann man schließlich auch keine Benutzeroberflächen bauen, von Drag & Drop im Browser oder Lokalisierung mal ganz abgesehen.

Anlegen der Module

Für unser Beispielmodul legen wir zunächst in Visual Studio ein neues Projekt mit der gezeigten Struktur an und nennen es wie unser Modul "Hello World". Der Pfad "addon" kennzeichnet dabei das Verzeichnis, in welchem Ihr Modul innerhalb von contentXXL eingebunden wird und sollte nicht verändert werden. Dann erstellen wir zwei User Controls, eins für die Präsentation des Moduls aus Benutzersicht (helloworld.ascx) und eins zur Administration (customsettings.ascx). Zusätzlich zu den vom Framework zur Verfügung gestellten Funktionen für Modultitel und Templates wollen wir in letzterem entsprechend berechtigen Benutzern ermöglichen, den Begrüßungstext zu editieren.

Das Präsentationsinterface

Zunächst wird das Control für die Präsentation erstellt (Source 1). 

Abb.: Visual Studio Projekt für ein contentXXL Modul

Dieses Control stellt den Bereich innerhalb der Themenbox zwischen den Aufrufen "openbox" und "closebox" dar. Innerhalb der Themenbox befinden sich weiter Controls zur Ausgabe des Modultitels "moduletitle" und die äußere Markierung (closetitle) für den Content des Moduls. Falls also zusätzliche Controls eingebaut werden sollen, müssen sich diese zwischen "closetitle" und "closebox" befinden.


Soweit zur Oberfläche. Die Funktionalität wird im Code Behind abgelegt (Source 2).

Zunächst wird mit "Imports AspNetPortal" das Portal Framework referenziert. Die Klasse besitzt wie jede Codeseite einer ascx- oder aspx-Datei die Funktion Page_Load, welche bei Aufruf der Seite ausgeführt wird. Innerhalb dieser Methode erfolgt jetzt die Zuweisung der Inhalte. Zuerst die Standardcontrols openbox, closebox und themebox, gefolgt von dem eigenen Control "myconfiguredoutput", welches unseren Inhalt ausgeben soll. Letzterem wird das Feld "myconfiguredoutput" aus den später angesprochenen Customsettings zugeordnet.

Das Administrationsinterface

Source 3 zeigt das zum Administrieren unseres Modules benötigte Control. Hier brauchen nur die speziell für dieses Modul benötigten Felder definiert werden. In diesem Fall ist das die Textbox "myconfiguredoutput" zur Vorbelegung unsers Ausgabetextes. Alles andere wird vom Framework bereitgestellt.

Wie, das zeigt Source 4. Unser Control customsettings erbt die allgemeinen CustomSettings. Diese Klasse besitzt die Funktionen "LoadControls" und "Page_OnSave". Erstere wird zum Zeitpunkt des Ladens der Contols ausgeführt. In userem Fall wird der eigene Text geladen und angezeigt (falls schon einer in dieses Control eingegeben wurde). Die zweite Methode kümmert sich um das Speichern der eingegebenen Werte.

Language Files erstellen

Zusätzlich dazu beinhaltet die Struktur die Sprachdateien mit den Übersetzungen der verwendeten Texte. Diese Dateien haben folgenden Aufbau:








Sie enthält die Tags mit den Übersetzungen zu den verschiedenen Controls. In Source 3 kommt zum Baispiel das Control [l_helloworld_customsettingslegend] zu Einsatz, welches zur Laufzeit durch den entsprechenden Text im Feld Value ersetzt wird. Um zusätzliche Sprachen anzubieten, muss lediglich eine eingene lng Datei erstellt werden, welche als Namen das jeweilige Sprachkürzel besitzt.

Registrierung des neuen Moduls in contentXXL

Jetzt muss das Modul (einmalig) im Framework registriert werden. Das erfolgt im contentXXL Sitemanager.

Es wird einfach der Pfad zu der entsprechenden ascx-Datei angegeben. Wird Code-Behind verwendet, dann muss allerdings manuell die jeweilige DLL zusätzlich im bin-Verzeichnis bereitgestellt werden. Bei Änderungen werden beide Dateien einfach ausgetauscht. eine neue Registrierung ist nicht erforderlich.

Administration des neuen Moduls in contentXXL

Nach der Registrierung kann das neue Modul per Drag & Drop direkt im Browser WYSIWYG in einen Seitenteilbereich platziert werden. Anschließend werden die notwendigen Einstellungen zu Templates und vor allem zum gewünschten Text vorgenommen.

Präsentation des neuen Moduls in contentXXL

Wird die Seite mit dem neuen Modul jetzt aufgerufen ist der gewünschte Text an der richtigen Stelle zu sehen. Das Framework stellt berechtigen Benutzern eine Schaltfläche zum Ändern des Textes zur Verfügung.

Fazit

Mit wenigen Programmzeilen wurde ein Modul erstellt, daß vollständig in das contentXXL Business Content Management Framework integriert ist. Modultitel und Rahmen können über Templates gestaltet werden. Die Platzierung erfolgt beliebig oft auf der Website per Drag & Drop WYSIWYG direkt im Browser. Die Zugriffsrechte (hier zum Ändern der Ausschrift) werden nahtlos in das Rollenkonzept von contentXXL integriert.

Die Integration bereits vorhandener Controls - z.B. vom Komponentenmarkt - gestaltet sich ähnlich einfach.

Hier nocheinmal die vollständigen Sourcecodes:

Source 1: HelloWorld.ascx:

<%@ Control Language="vb" AutoEventWireup="false" Codebehind="helloworld.ascx.vb" Inherits="ContentXXL.Addons.Sample.helloworld" %>
<%@ Register TagPrefix="Portal" TagName="Title" Src="~/contentxxl/modules/internal/DesktopModuleTitle.ascx"%>
<%@ Register TagPrefix="Portal" TagName="themebox" Src="~/contentxxl/modules/internal/themebox.ascx"%>






Source 2: HelloWorld.ascx.vb

Imports AspNetPortal

Public Class helloworld
Inherits PortalModuleControl

'This call is required by the Web Form Designer.
Private Sub InitializeComponent()
End Sub

'NOTE: The following placeholder declaration is required by the Web Form Designer.
'Do not delete or move it.
Private designerPlaceholderDeclaration As System.Object

Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: This method call is required by the Web Form Designer
'Do not modify it using the code editor.
InitializeComponent()
End Sub

Protected openbox As themeboxControl
Protected closebox As themeboxControl
Protected closetitle As themeboxControl
Protected WithEvents myconfiguredoutput As System.Web.UI.WebControls.Label

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
openbox.themeboxid = Me.ModuleConfiguration.Instance.ThemeboxID
closebox.themeboxid = Me.ModuleConfiguration.Instance.ThemeboxID
closetitle.themeboxid = Me.ModuleConfiguration.Instance.ThemeboxID
myconfiguredoutput.Text = Me.ModuleConfiguration.Instance.CustomSettings("myconfiguredoutput")
End Sub
End Class

Source 3: CustomSettings.ascx

Source 3: CustomSettings.ascx

<%@ Control Language="vb" AutoEventWireup="false" Codebehind="customsettings.ascx.vb" Inherits="ContentXXL.Addons.Sample.customsettings" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %>






[l_hellowhatever_myoutput]

Source 4: CustomSettings.ascx.vb

Public Class customsettings
Inherits ContentXXL.Admin.Common.CustomSettingsControl

'This call is required by the Web Form Designer.
Private Sub InitializeComponent()
End Sub

'NOTE: The following placeholder declaration is required by the Web Form Designer.
'Do not delete or move it.
Private designerPlaceholderDeclaration As System.Object

Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: This method call is required by the Web Form Designer
'Do not modify it using the code editor.
InitializeComponent()
End Sub

Protected WithEvents myconfiguredoutput As System.Web.UI.WebControls.TextBox

Public Overrides Sub LoadControls()
myconfiguredoutput.Text = ModuleSettings("myconfiguredoutput")
End Sub

Private Sub Page_OnSave(ByRef Source As Object, ByRef SaveString As String) Handles MyBase.OnSave
GetUpdateString(myconfiguredoutput.Text.Replace("'", "''"), "myconfiguredoutput")
End Sub
End Class


| print | send |
Valid XHTML 1.0 Transitional
03:08 gen. in 0.390sec. and cached 24h.
© 2009 contentXXL. All rights reserved. | Terms and Conditions | Imprint | Sitemap