Wird DotNetNuke kommerziell?

Der Titel ist mit Sicherheit etwas provokativ gestellt; aus folgendem Grund: In den frühen Morgenstunden des 24.12 kam der zweite Newsletter - finde die Newsletter übrigens super - von DotNetNuke.com. Hauptthema des Newsletter war das "DotNetNuke® Benefactor Program", dabei handelt es sich um en Mehrwert-Programm rund um DotNetNuke. Insgesamt gibt es vier Programmstufen von 99$ - 799$ mit unterschiedlichen Inhalten bzw. Möglichkeiten (Details hier). Ist das der erste Schritt aus DotNetNuke ein komerzielles Produkt zu machen? Ich denke nein und es ist eine gute Möglichkeit das Projekt auf Dauer zu sichern.Ob es das Coreteam allerdings hinbekommt ihre Progamm auch so umzusetzen bleibt abzuwarten. Hans-Peter Schelian (dnnportal.de) hat dazu auch einen Blogeintrag geschrieben und er als offizieller Team Leiter eines DotNetNuke Unterprojekts hat noch mehr Einblick .... Warten wir ab .....

Die Website von DoNetNuke wurde auf die Version 3.2.2 umgestellt

Bei mein Besuch der Seite www.dotnetnuke.com hab ich bemerkt, dass die Seite schon unter der Version 3.2.2 läuft. Vielleicht können wir ja auf eine baldige Veröffentlichung dieser Version hoffen und damit auf Behebung von Fehlern ;-) Mehr Infos über Veränderungen gibt es wie immer unter support.dotnetnuke.com ....

Templatesystem Part 3

Eine kleine Änderung habe ich in der Templateengine vorgenommen: Das Control skin aus der der Methode LoadSkin() habe ich nicht nur für diese Methode zur Verfügung gestellt sondern daraus eine protected Variable innerhalb der Klasse gemacht. Somit kann nun die abgeleitete Klasse immer darauf zugreifen und der "Umweg" über sender (siehe Part 2) kann geändert werden. Ich brauchte das gerade für eine Hilfsmethode die ich nicht nur innerhalb der Methode InitializeSkin aufrufen möchte. Keine Ahnung warum ich das nicht direkt so gemacht habe!

Templatesystem Part 2

In meinem ersten Eintrag habe ich beschrieben, wie man eine Grundlage für templategesteuerte DotNetNuke Module erstellen kann. Heute möchte ich kurz darauf eingehen, wie man innerhalb eines Eventhandler auf Steuerelemente des Templates zugreifen kann. Als Beispiel nehme ich hier einen LinkButton.. protected virtual void btnLogIn_Click(object sender, EventArgs e) {    txtBox = (TextBox) ((Control)sender).FindControl ( "txtUserName" );    if (txtBox != null)    {        userName = txtBox.Text ;    }} Der Zugriff erfolgt genau wie bei der InitializeSkin Methode über FindControl. Hier muss man nun lediglich den Parameter sender nehmen und die Methode FindControl darauf anwenden.    

Templatebasierte erweiterte Benutzeranmeldung Part 1

Was mir bei DotNetNuke schon lange nicht schmeckt ist der ganze Login und Registrierungsbereich. Zum einen habe ich andere Anforderungen - okay dafür kann das Core-Team nichts - zum anderen ist aber die Anpassung des Layout nur für alle Portal gleichzeitig möglich. Deswegen habe ich mich hingesetzt und ein ein weiters Modul dafür geschrieben. Ja, es gibt zwar schon ein paar aber die unterstützen halt alle nicht ein Templatesystem. Das Konzept dafür ist relativ einfach: Zur Laufzeit wird die ASCX Datei dynamisch geladen. Entweder wird dabei ein Standardlayout geladen oder aber wenn vorhanden aus dem jeweiligen Portalverzeichnis. Dafür habe ich eine Klasse SkinnedWebControl geschrieben, die von PortalModuleBase abgeleitet wird. Die Methode InitSkin() lädt das entsprechende Skin und sorgt dafür das es initialisiert wird.         protected Control LoadSkin()         {            Control skin;                                     skinpath = this.PortalSettings.HomeDirectory + "GaliNeo/UserAccount/" ;                         // Do we have a skin?            if (SkinFilename == null)                throw new Exception("You must specify a skin.");                        try             {                skin = this.LoadControl(skinpath + this.skinFilename) ;                  }            catch (FileNotFoundException)             {                try                 {                     skinpath = this.ModulePath + "UITemplates/" ;                     skin = this.LoadControl(skinpath + this.skinFilename);                                     }                 catch (FileNotFoundException)                 {                    throw new Exception("Critical error: The skinfile '" + skinpath + "' could not be found. The skin must exist for this control to render.");                }            }            // Initialize the skin            InitializeSkin(skin);            Controls.Add(skin) ;             return skin;        } Die Mehtode InitializeSkin() wird dann in der entsprechenden Klasse überschrieben um z.B die Steuerelemente mit entsprechenden Werten zu versehen oder aber auch Events an die Steuerelemente zu binden.         protected abstract void InitializeSkin(Control skin); Das entsprechende DotNetNuke Modul UserControl wird dann von der Klasse SkinnedWebControl abgeleiet. Eine Besonderheit ist der Zugriff auf Steuerelemente. Diese sind nicht direkt ansprechbar sonder müssen zunächst über die Methode FindControl gesucht werden. So könnte das dann aussehen:         protected override void InitializeSkin(Control skin)        {            LabelControl dnnlbl = null ;            LinkButton lnkbtn = null ;            dnnlbl = (LabelControl) skin.FindControl("lblUserName") ;            if (dnnlbl != null)            {                dnnlbl.Text = GetLocalization("lblUserName") ;                            }            lnkbtn = (LinkButton) skin.FindControl("lnkBtnLogIn") ;            if (lnkbtn != null)            {                lnkbtn.Text = GetLocalization("lnkBtnLogIn") ;                lnkbtn.Click += new System.EventHandler(btnLogIn_Click) ;            }        } Die ASCX Datei des Modules sieht ganz normal aus, nur sind dort die Controls nicht definiert. Dafür gibt es die Templatedatei wobei es sich auch um ene ASCX Datei handelt, die aber nicht die Attribute CodeBehind und Namespace benötigt.Die beiden Controls Label und LinkButton werden in der Template-ASCX wie gewohnt definiert.  

DotNetNuke 3.2 und 4.0.0 ist da / DNN fuer ASP.NET 2.0

Soeben bekam ich einen Newsletter vom DotNetNuke-Core Team - eigentlich den ersten überhaupt. Nun ja darin stand das es nun die Version 3.2 von DotNetNuke gibt. Ebenso ist die Version 4.0 also die ASP.NET 2 Version für VS.NET 2005 als Download verfügbar. Sonst soll es aber zwischen den beiden Versionen keinen Unterschied geben und die nächste Zeit werden wohl beide Versionen weiter gepflegt. Hier gibt es den kompletten Pressebericht Dann schau ich jetzt mal, ob die Downloadserver schon überlastet sind :)

Beim DNN Installation SQL-Skript werden Zeichen automatisch entfernt

Nachdem ich ein paar sehr witzige Stunden mit den Installationsroutinen (für Module) von DotNetNuke hatte und schon fast verzweifelt habe, kam eine gute Fee und holte mich da raus ... aber alles hübsch der Reihe nach! Ich habe ein eigenes Module geschrieben und dieses DNN Module hatte eine wahnsinnige Enterprise Funktionlität - nämlich folgende: SET newOrderno = ((SELECT MAX(OderNo) FROM TABLE) + 1) Dieses funktionierte auch einwandfrei, allerdings als ich dann das Modul zusammen packte und es auf einem Server installieren wollte, spuckte die Installation immer einen SQL Fehler aus ... "Fehler in der Nähe von 1"Ist auch logisch, denn was da ankam sah so aus: SET newOrderno = ((SELECT MAX(OderNo) FROM TABLE)  1) Das "+" fehlte also ... um das jetzt hier mal abzukürzen: Es lag an dem Dateiformat .. die Textdatei mit den SQL-Befehlen war als ANSI Datei abgespeichert. Nachdem ich diese Datei im UTF-8 Format abgespeicher hatte war das Problem behoben und das "+" stand im SQL-Befehl... Zum Glück gibt es das www.dnnportal.de und Hans-Peter, der auch Nachts noch gute Tipps hat :)   Nur mal so nebenbei:Wenn man eine Textdatei z.B. als Templatevorlage ausließt und es fehlen die Umlaute .. ja dann würde ich diese auch mal im UTF-8 Format speichern....dann beim Auslesen der Datei noch das richtige Format angeben und schon ist mal alle Sorgen los!  

Dokumenation der DotNetNnuke Version 3.1.1

Ein Blick in den Downloadbereich hat mir gerade gezeigt, dass es endlich die Dokumentationen zur aktuellen Version von DNN 3.1.1 gibt. Hier ist der Link in den Downloadbereich: http://www.dotnetnuke.com/tabid/125/default.aspx Viel Spaß beim Lesen ....

Cooles Tool fuer Codegenerierung

Für alle die keine Lizenz von CodeSmith kaufen möchten, aber auf den Luxus der Codegeneriung nicht verzichten möchten, gibt es eine Alternative. Diese Alternative nennt sich MyGeneration und ist zu finden unter: http://www.mygenerationsoftware.com Dieses Tool ist lizenzkostenfrei und biedet alles was man benötigt. Zumindest ist es in meinem Bereich noch nicht an seine Grenzen gekommen. Was mir lediglich fehlt ist eine Art Batch-Job, da es schon manchmal lästig ist die einzelne Gerneriung von Hand anzustoßen. Es gibt auch schon für jede Menge Zwecke / Anwendungsfälle Templates - natürlich auch für DotNetNuke (!).Das Erstellen von MyGeneration-Templates finde ich etwas besser und intuitiver gelößt - kann aber auch nur Einbildung sein ;-)

URLControl von DotNetNuke aufloesen in eine URL

Mit dem Usercontrol URLControl von DNN kann man auf die interne Dateiverwaltung von DNN zugreifen. Die Einbindung habe ich in einem anderen Artikel bereits erläutert. Hier nur noch kurz der benötigte Code für die ASCX-Datei: <%@ Register TagPrefix="Portal" TagName="URL" Src="~/controls/URLControl.ascx" %> <portal:url id="ctlURL" runat="server" width="300" showtabs="false" showfiles="true" showUrls="false" urltype="F" showlog="false" shownewwindow="false" showtrack="false"/> Die Eigenschaft URL dieses Controls liefert allerdings bei der Auswahl von Dateien lediglich so etwas wie "FileId=7". Um aber Bilder darstellen zu können muss dieses in einer URL umgewandelt werden. Die folgenden Funktion sind genau dafür da.         public string FileNameToImgSrc(string FileName)        {            string sSrc = GetRelativeFilePath(FileName) ;            return this.PortalSettings.HomeDirectory  + sSrc;        }        public string GetRelativeFilePath(string FileName)        {            if (FileName.StartsWith("FileID="))             {                int fileId = int.Parse(FileName.Substring(7));                FileController objFileController = new FileController();                DotNetNuke.Services.FileSystem.FileInfo objFileInfo = objFileController.GetFileById(fileId, this.PortalId);                if (!(objFileInfo == null))                 {                    return objFileInfo.Folder + objFileInfo.FileName;                }                 else                 {                    return "";                }            }             else             {                return FileName;            }        }    

Die Zukunft von DotNetNuke

Michael Gandke kommt hier (schon wieder) zu dem Fazit, daß es sich mit einem Opensource Portalsystem wie DotNetNuke als Dienstleister und als Kunde gut leben läßt. Da schliesse ich mich doch gerne an. Ach so ... na klar biete ich (also wir) Dienstleistungen rund um DotNetNuke an. Das sogar hauptberuflich. Mehr Informationen zu Installation, Support, Modulen, Entwicklung usw. gibt s hier.

DotNetNuke ® 3.1.1. ist da :)

Heute ist die neuste Version der Open Source Portalengine DotNetNuke ® zum Download bereitgestellt wurden. Zunächst gibt es nur die Version inkl. Source. Es ist aber davon auszugehen, dass es auch bald wieder einer Version nur mit den benötigten Dateien für eine Installation gibt. Änderungen in dieser DotNetNuke ® Version können unter support.dotnetnuke.com nachgelesen werden. Das Downloadfile enthält keine Dokumentation von DNN, dieser werden derzeit an das neue Branding angepasst und zukünftig einzeln verfügbar sein. Bei der Installation UNBEDINGT die Readme Datei beachten!

DotNetNuke Logo und Trademark Guidelines

Vor ein paar Tagen hat Shaun Walker zwei Guidelines für die Verwendung von DotNetNuke Logos und Namensgebung veröffentlicht. http://www.dotnetnuke.com/Portals/25/Documents/DotNetNuke%20Trademark%20Policy.pdfhttp://www.dotnetnuke.com/Portals/25/Documents/DotNetNuke%20Logo%20Guidelines.pdfDazu gibt es zwei Diskussionen in den DNN Foren: Deutsches DNNPortal: http://www.dnnportal.de/Default.aspx/tabid/178/g/posts/t/634 Amerikanische Forum: http://forums.asp.net/1000908/ShowPost.aspx Die Meinungen über eine solche Richtlinie gehen dabei stark auseinander. Ich persönlich sehe diese Richtlinien als eher hinderlich und hoffe nicht das aus dem Portal-Framework mal ein kommerzielles Produkt wird. Bin sehr gespannt was die Zukunft von DNN mit sich bringt und auf jeden Fall werde ich jedes Release das unter der Open-Source Lizenz erscheint gründlich archivieren.

Mit DotNetNuke und Opensource auf der sicheren Seite

Also ich bin richtig froh, dass DotNetNuke Opensource ist. Da wir mittlerweile mehrere große Projekte mit DotNetNuke realisiert haben oder gerade noch dabei sind, kann die Abhängigkeit von einem Anbieter für unsere Kunden und deren Geschäftsmodelle im Internet katastrophale Konsequenzen haben. Selbst wenn DotNEtNuke plötzlich nicht mehr frei und opensource wäre, könnten wir mit dem bisherigen STand 3.1 problemlos weiterentwickeln. Interessanterweise liefern die besten Argumente für DotNetNuke und Opensource-Software häufig genug die Fürsprecher anderer Programme ... wie auch hier http://blog.gandke.de/CommentView,guid,6f0815c7-ff41-4b2a-a657-7512bb94c58e.aspx  

DotNetNuke Scheduler

Heute Abend habe ich mich mal mit der Scheduler-Technologie von DotNetNuke auseinandergesetzt. Ich habe zwar auch einen eigenen DotNetNuke unabhängigen Scheduler laufen, da ich mich aber mit dieser Seite von DNN noch nicht auseinandergesetzt habe und der Anwendungsfall nicht so zeitkritisch ist viel mein Entschluß auf diese Art der Implementierung. Zunächst einmal habe ich mir die Dokumentation von DotNetNuke Scheduler Service durchgelesen - allerdings war dort nur sehr wenig über die Implementierung zu lesen. Die Erstellung ist aber auch eigentlich super simple und somit ist eine Anleitung gar nicht wirklich erforderlich. Hier das Grundgerüst für einen DotNetNuke Scheduler Service: using System;using DotNetNuke.Services.Exceptions ;namespace GaliNeo.Modules.Events{    public class NotifyScheduler : DotNetNuke.Services.Scheduling.SchedulerClient    {        public NotifyScheduler(DotNetNuke.Services.Scheduling.ScheduleHistoryItem objScheduleHistoryItem)        {            this.ScheduleHistoryItem = objScheduleHistoryItem;        }        public override void DoWork()        {            try            {                this.Progressing() ;                                this.ScheduleHistoryItem.Succeeded = true ;                this.ScheduleHistoryItem.AddLogNote("GaliNeo Events - Notify User was successfully") ;            }            catch(Exception exc)            {                this.ScheduleHistoryItem.Succeeded = false ;                this.ScheduleHistoryItem.AddLogNote("EXCEPTION: " + exc.ToString()) ;                this.Errored( ref exc) ;                Exceptions.LogException(exc) ;            }        }    }}   Das Geheimnis ist eigentlich ganz einfach. Man erstellt eine Klasse und leitet diese von DotNetNuke.Services.Scheduling.SchedulerClient ab Es muss eine Methode (DoWork()) definiert werden, die von der DotNetNuke Engine aufgerufen wird Ganz wichtig ist, den Konstruktur nicht zu vergessen. Das ist mir zunächst passiert und ich wunderte mich, warum der Tast nicht ausgeführt wurde. Innerhalb der Methode DoWork() kann man nun auf die Business-Logik eines Modules zugreifen, um z.B. Daten zu lesen, zu verändern und wieder zu speichern. Es gibt wohl eine Einschränkung: Auf die MemberRole - Implementierung kann von einem Scheduler aus nicht zugegriffen werden, da der dafür erforderliche Kontext fehlt! 

DotNetNuke in Unternehmen profesionell einsetzbar?

Michael Gandke hat sich hier in seinem Internet-Marketing-Blog einige Gedanken darüber gemacht, ob es sich lohnt, DNN professionell als Unternehmens-Website einzusetzen. Um sein Ergebnis vorwegzunehmen: Ja es lohnt sich!

Stellenangebot: Webdesigner gesucht

Wir suchen zur Entwicklung von Skins für DotNetNuke einen Webdesigner mit guten HTML / CSS-Kenntnissen auf freiberuflicher Basis. Schwerpunkt liegt auf der grafischen Gestaltung. Bei Interesse bitte Kontakt per eMail aufnehmen mit Michael Gandke (kontakt2005 @ gandke.de). Bitte zwei oder drei bisherige Projekte / Websites (inkl. URL) mit angeben.

Stellenangebot: ASP.NET Entwickler gesucht

Mal in eigener Sache: Wir suchen zur Entwicklung von Webanwendungen unter Microsoft .NET einen Kollegen mit guten ASP.NET-Kenntnissen zur Festanstellung (Großraum Mönchengladbach). Die Zusammenarbeit kann auch freiberuflich auf Projektbasis erfolgen. SQL-Kenntnisse sollten ebenfalls vorhanden sein sowie Erfahrungen mit eCommerce / Online-Shops. Entwickelt werden hauptsächlich Module für DotNetNuke unter C# und/oder VB.NET. Bei Interesse bitte Kontakt per eMail aufnehmen mit Michael Gandke (kontakt2005 @ gandke.de). Eine kurze Beschreibung der bisherigen Projekte reicht aus.

Bulkzuweisung von einer Gruppe

Es gibt in DotNetNuke keine Möglichkeit eine neu angelegt Gruppe (Rolle) allen oder nur einem bestimmten Teil von Usern zu zuordnen. Da es heute bei mir schnell gehen mußte, habe ich das über SQL-Statements gelöst aber vielleicht bau ich ja auch mal ein Modul für DNN.... DotNetNuke verwaltet die Zuordnng von Usern und Rollen in zwei Systemen Ein eigenes System von DNN, besteht aus ein paar Tabellen Die Microsoft Implementierung von MemberRole Ich erspare mich jetzt zu schildern, warum das so ist .... Es ist darauf zu achten, dass alle beiden Bereiche von DNN aktuallisiert werden! Hier die SQL-Befehle: Declare @ApplicationId nvarchar(255)Declare @RoleGUI nvarchar(255)Declare @RoleId int--Die interne GUI für das PortalSET @ApplicationId = '{59DFEA62-67E2-450E-A039-91ECA87FCDF4}'--Die eindeutige Kennzeichung einer Rolle in der ASPNET ImplementierungSET @RoleGUI = '{D8N05067-B4BD-4ER9-9773-F1BAC67FF47G}'--Die eigene DNN VerwaltungSET @RoleId = 1INSERT INTO aspnet_UsersInRoles ( UserId, RoleId )SELECT U.UserID, @RoleGUI As RoleId FROM ASPNET_USERS U WHERE (ApplicationId = @ApplicationId) and (U.UserId not in (SELECT UR.UserId FROM aspnet_UsersInRoles UR WHERE UR.RoleId = @RoleGUI));--SELECT Count(*) FROM ASPNET_USERSINROLES WHERE RoleId = @RoleGUI;--INSERT INTO UserRoles ( UserId, RoleId, ExpiryDate )SELECT U.UserId, @RoleId as RoleId, '03.08.2005' AS ExpiryDate FROM Users U WHERE U.UserId not in (SELECT UserId FROM UserRoles WHERE RoleId = @RoleId)--SElECT Count(*) FROM UserRoles WHERE (RoleId = @RoleId)---    

Host / Admin Passwort

In der letzten Zeit gab es immer wieder Probleme mit den Passwörtern von Host / Admin Accounts in DotNetNuke. Mit der Version DNN 3.0.13 hat das Core-Team von DotNetNuke, die Schlüssel für die Passwort Verschlüsselung in die Web.config ausgelagert. Durch ein Update werden die Schlüssel jedes Mal überschrieben bzw. neu erzeugt. Sollte man nun keine Datensicherung haben (was eigentlich eine Totsünde ist!), gibt es zumindest einen Trick, wie man Host und Admin Passwörter manuell zurücksetzen kann. Einfach als neuen User registrieren und das dort vergeben Passwort sich merken. Dann in die Datenbank gehen und das Passwort / PasswordSalt (bzw. den Wert der Felder) mit den Werten beim Host und/oder Admin austauschen. Diese Informationen liegen in der Tabelle "aspnet_Membership".... Somit hat man zumindest den Zugang zu diesen Accounts wieder hergestellt. Natürlich hilft das einem auch nicht, wenn man keine öffentlichen Registrierungen zulässt und man muss Zugriff auf die Datenbank der DotNetNuke - Installation haben.

Benutzerverwaltung / Anmeldedaten speichern

Vor einiger Zeit habe ich bei DotNetNuke einen Fehler in der automatischen Anmeldung festgestellt. Die User können über den Schalter "Anmeldedaten merken" ein automatisches Login durchführen lassen. Sollte ein Benutzerkonto nun gespert sein (z.B. durch falsche Eingabe von Benutzername / Passwort), dann wird beim LogIn dieses ignoriert und der User kann sich weiterhin automatisch anmelden. Um das zu umgehen habe ich den Core-Code ein wenig modifiziert (ja ja .. nicht schön und gefällt mir auch selber nicht, war jetzt aber erst mal eine quick-and-dirty Lösung). In der Klasse "compontens\Users\UserController.vb" die Funktion "GetCurrentUserInfo" modifizieren: Dim objUser As UserInfo = CType(HttpContext.Current.Items("UserInfo"), UserInfo)If Not ObjUser Is Nothing ThenReturn objUserElseReturn New UserInfoEnd If Ersetzen durch: Dim objUser As UserInfo = CType(HttpContext.Current.Items("UserInfo"), UserInfo)If Not ObjUser Is Nothing ThenIf objUser.Membership.LockedOut ThenDim _portalSettings As PortalSettings = PortalController.GetCurrentPortalSettingsFormsAuthentication.SignOut()HttpContext.Current.Response.Cookies("portalaliasid").Value = NothingHttpContext.Current.Response.Cookies("portalaliasid").Path = "/"HttpContext.Current.Response.Cookies("portalaliasid").Expires = DateTime.Now.AddYears(-30)HttpContext.Current.Response.Cookies("portalroles").Value = NothingHttpContext.Current.Response.Cookies("portalroles").Path = "/"HttpContext.Current.Response.Cookies("portalroles").Expires = DateTime.Now.AddYears(-30)' Redirect browser back to portal Dim strURL As String = ""If _portalSettings.HomeTabId <> -1 ThenstrURL = NavigateURL(_portalSettings.HomeTabId)ElsestrURL = GetPortalDomainName(_portalSettings.PortalAlias.HTTPAlias, HttpContext.Current.Request)End IfHttpContext.Current.Response.Redirect(strURL, True)ElseReturn objUserEnd IfElseReturn New UserInfoEnd If Dieser Weg ist noch keine wirklich sauber Lösung aber zumindest erst mal ein brauchbarer Bugfix. Wenn ich etwas mehr Luft haben, versuche ich eine andere Lösung zu finden.

http compression für DotNetNuke

Für große Seiten kann es hilfreich sein die zu übertragenden Bytes zu komprimieren. Dadurch können die Ladezeit optimiert werden. Eine HTTPModule für .NET (DotNetNuke) gibt es unter http://www.blowery.org/code/HttpCompressionModule.html. Die Installation ist sehr einfach und ist innerhalb von wenigen Minuten erledigt. Zuerst die Dateien in das "\bin" Verzeichnis der Webanwendung kopieren. blowery.Web.HttpCompress.dll blowery.Web.HttpCompress.dll.xml ICSharpCode.SharpZipLib.dll ICSharpCode.SharpZipLib.dll.xml Dann muss die Web.config angepasst werden: Im Abschnitt configSection folgendes hinzufügen: <sectionGroup name="blowery.web"> <section name="httpCompress" type="blowery.Web.HttpCompress.SectionHandler,    blowery.Web.HttpCompress"/></sectionGroup> Das httpModul hinzufügen <system.web><httpModules>   <add name="CompressionModule" type="blowery.Web.HttpCompress.HttpModule,       blowery.web.HttpCompress"/></ httpModules></system.web> In die Web.config aber nicht innerhalb der system.web folgende Zeilen einfügen <blowery.web><httpCompress preferredAlgorithm="deflate" compressionLevel="high">    <excludedMimeTypes>    <add type="image/jpeg"/>    <add type="image/gif"/>    </excludedMimeTypes>    <excludedPaths></excludedPaths></httpCompress></blowery.web> Schon ist die Konfiguration abgeschlossen! Aber VORSICHT! Bevor ein Update von DotNetNuke eingespielt wird, muss dass httpModul deaktiviert werden.

Erstes DNN'ler Treffen

Eine Microsoft Veranstalltung hat gestern acht Personen zusammengeführt, die sich alle mit dem Thema DotNetNuke beschäftigen. Viele kannte man nur aus dem Forum und es war eine sehr gute Gelegenheit mal endlich die Gesichter hinter den Namen zu sehen. Kurzentschlossen ist dann nach ein paar Bierchen dieses Bild hier entstanden: Es war ein sehr netter Abend und schnell waren wir uns einig, dieses in der Zukunft fortzusetzen. Immerhin gibt es eine ganze Menge Stuff rund um DotNetNuke. Weiter Kommentare gibt es im unter http://blog.gandke.de und im Forum http://www.dnnportal.de

Alternative zur (FTB) FreeTextBox bei DNN (Dotnetnuke)

Jeder der mit dem eingebauten WYSIWYG Editor (FreeTextBox) bei DotNetNuke unglücklich ist .. für den gibt es gute Nachrichten. Mittlerweile hat sich einer aus der Community hingesetzt und einen Provider für den OpenSource Editor FCKEditor entwickelt. Diesen findet man unter http://dnn.tiendaboliviana.com/web als Download. Eine Anleitung für den Einbau des Editors in DotNetNuke findet man unter http://www.dotnetnuke.de/Default.aspx?tabid=163  

DotNetNuke 3.1.0 fehlerbereingte Distribution / mit deuscher Lokalisierung

Da die DotNetNuke Version 3.1.0 einige Schwierigkeiten und negative Überraschung mit sich bringt, hat sich Hans-Peter von deutschen dnn-portal hingesetzt und eine fehlerbereinigte Version inkl. der deutschen Lokalisierung erstellt. Den Download gibt es unter: http://www.dnnportal.de/Downloads/tabid/176/Default.aspx