Saturday, December 11, 2010

Using master pages and aspx pages in dnn

2 comments
In this post, we are going to see how we can add new aspx pages by re-using the existing skin designs to implement some helpfull programming in it.


Why?


If you are running a multi-portal dnn website and want to build some common pages to share between those portals, there are couple of quick ways to do that.

  1. 1. Create a new tab in portal 0 and then share link in all other portals.
    This technique works fine when you want to show "how to" page or help page, static contents or offers related pages. You don't need any custom coding for this and it will be a matter of adding a text html module and paste the html that you designed!
  2. 2. Create a new aspx page and share link in all other portals.
    Well, this one also looks similar to first option but let's think about this: If you are running a multi-portal dnn site and want to show latest offers from all the portals into a page based on user's country, and users having at least 5 orders in history. Now, this will involve some quick coding to do. So, basically, if you want to show content based on some dynamic parameters like user or portal data or similar data, it will be good to create an aspx page.
There is another option! obviously you can create a new module to do this, but remember that we are not doing anything that depends on moduleId or tabId but depends on UserId or PortalId, so I believe it's a quick way to create a new page in place of building an entire dnn module.

How?

  1. 1. Create a new theme
    Create a new theme with the name of your skin and paste your skin's css and images into it.
  2. 2. Create a new master page
    Create a new master page and paste your skin's ascx control's entire markup over there. Replace all your content pane (i.e. div or tds with runat=server) with CotentPlace holder
  3. 3. Create a new page
    - Add a new aspx page called Default2.aspx and select the new master page when creating it. 
    - Go to .aspx.vb file and make your parial page class inherit from DotNetNuke.Framework.PageBase in place of System.Web.UI.Page 
    - And that's it you are ready to go!

Conclusion

It is really easy to add a new aspx page in dnn that is re-using skin and you will be able to access all the information like PortalSettings, UserInfo etc. Things like Tab and Module will not be there and it's obvious!
This post doesn't say you should create a new aspx page in some cases or not, but demonstrates how to do it if you want. If you have some good examples WHEN we can use it or some good examples WHEN we should NOT use it, I welcome them! 
This example will probably work with dnn 4.x and 5.x, though I've used this in dnn 4.5.6 and 5.2.0 etc.

Downloads

You can download the example code for this example from codeplex Happy coding with dnn

Saturday, December 4, 2010

DotNetNuke 5.6 - A potentially dangerous Request.Form value was detected from the client

1 comments
Today morning, when I was preparing for a new installation instance for dnn 5.6, I was facing trouble to install new module, create new tab and I come to the conclusion that any post back event from the site was causing the "potentially dangerous Request.Form value".

I was still able to install module using /Install/Install.aspx?mode=installresource but finally stuck when I was not able to add the installed module into page.

Finally, after reading several articles on web, I found web.config's httpRuntime element needs another attribute called : requestValidationMode="2.0"

I go the solution here (
http://stackoverflow.com/questions/81991/a-potentially-dangerous-request-form-value-was-detected-from-the-client/3368769#3368769).

And finally, I was on my way to regular work.
please note that I was trying this on having webmatrix installed and I was browsing the site in asp.net 4.0 integrated mode.
Hope this will help to someone in the same kind of trouble.

Thursday, November 18, 2010

DNN Module development Using Nhibernate

0 comments
Introduction
Hi All this is my first blog on Tricky Coders. In my last project which is in asp.net and I have used Nhibernate as the ORM which is very stable and also an open source project like DotNetNuke. So I decided to used it with DNN.
Prerequisites
Please download latest verion of NHibernate.
  1. Nhibernate.dll -This contains the NHibernate framework
  2. Iesi.Collections.dll -Iesi.Collections.dllContains the definition of some special collections used by NHibernate
  3. Castle.Core.dll-Base library is needed by Castle.DynamicProxy2.dll
  4. Castle.DynamicProxy2.dll - This contains code to generate proxies and is used by NHibernate to make e.g. lazy load possible
  5. We need to make some modifications in the web.config to support the Nhibernate.
Getting Started with Module Development
To create my module in DotNetNuke using Nhibernate i have used 2 projects
  1. DataAccessLayer- This class library project serves the purpose to connect with database by creating the object of Session Factory.
  2. Mapping Classes- This Class Library project serves the purpose of Defining the Entites and their mapping xml files.
  3. My Actual module which refer the above Projects to talk with data base.

Download 
    You can  download this module's source and installation package from tricky coder's codeplex project


    Please let me know about your views and suggestions to improve the code.

    Hope this will help.

    Thursday, November 4, 2010

    using WSO2 ESB to mediate WCF Service - Part 2

    0 comments
    In previous post, I demonstrated how to use Pass Through Proxy to mediate a basic WCF Service which is having GetData and GetCustomTypeData methods. In part 2, We will try to add UsernameToken security at WSO2 ESB level. 
    Pre-Requisites:

    Updating Service Implementation:
    Right now, I don't know how to use mediator to remove security header from soap envelop before sending it to the real service. I tried using Transformation > Header mediator but it didn't worked for me, so I used WCF Service side wrok around here. Please let me know how to do that, if some of you may know?
    • Open Service1.svc.vb and add following attribute to Service1 class:
    <servicebehavior(validatemustunderstand:=false)> _
    
    Securing wso2 esb service:
    • Login to esb website, and go to Services > List and click on WCFService
    • Click on Security
    • Select "Yes" for Enable Security and Select first option "UsernameToken"
    • Click on next and check the check box "Admin"
    • You will be redirected to service dashboard. 
    • That's it.
    Updating client to include security:
    • Install WSE 3.0 and add reference the wse 3.0 dll from it's installation directory to client project
    • Open Reference.vb from your client code, and change your web service class inherited from Inherits Microsoft.Web.Services3.WebServicesClientProtocol
    • Rebuild the client project again to make sure we haven't broken anything
    • Open Module1.vb and add following lines before calling GetData:
      Dim client As New localhost.WCFService
      Dim U As New UsernameToken( _
       "admin", _
       "admin", _
      PasswordOption.SendPlainText)
      client.RequestSoapContext.Security.Tokens.Add(U)
      ServicePointManager.CertificatePolicy = New TrustAllCertificatePolicy()
    Conclusion: 
    This way we can use wso2 esb to secure wcf service implemented using basicHttpBinding. Advantages here is, we are using separate GUI base server for securing wcf service which is too easy to maintain. 
    It is obvious that this example is very basic and it is just an exercise to add security in wcf services implemented using basicHttpBinding.

    Next steps will be to add some real life use cases that makes presence of esb more appropriate and not only for security.

    Pelase provide your thoughts on wso2 esb and wcf integration and if you are having trouble integrating with the same, you can drop me and email or post a comment here.

    using WSO2 ESB to mediate WCF Service

    2 comments
    In this post, I'm going to create a new WCFService with basicHTTPBinding and deploy it to IIS. I will mediate the deployed service with WSO2 ESB 3.0.0. For mediating the service, I will use "Pass Through Proxy".
    1. Pre-requisites
      1. Visual Studio 2008 or higher to create WCF Service
      2. wso2 esb 3.0.0 or higher, get it from here
    2. Install and Start  WSO2 ESB 3.0.0
      1. Extract the downloaded esb files
      2. Go to command prompt
      3. locate to bin directory of extracted esb
      4. write "wso2server.bat" and that will start the wso2 esb server after a few seconds
    3. Create a new WCF Service
      1. Start Visual Studio and go to File > New Project
        Create a new WCF Service Application from visual studio
      2. That will create a new WCF Service
      3. Open web.config and go to "system.serviceModel" element:

        <service name="xxx" behaviorConfiguration="xxxx">
            
            <!-- Service Endpoints -->
            <endpoint address="" binding="basicHttpBinding" contract="xxxx">    
            </endpoint>
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
           
        

        Make sure you change the endpoint element's binding attribute is having value basicHttpBinding
      4. Just Right click on the service project and click on Build Project
      5. It show you "Build Success" in status bar
      6. Right click on project again and click on publish
      7. Create a new folder called WCFServiceDeployed and select it as output directory
      8. Go to IIS and Create a new virual directory called "WCFService" and point it to WCFServiceDeployed folder
      9. right click on Service1.svc (or whatever svc file you have) and click on browse.
      10. Copy the wsdl url shown in the service page.
    4. Create Pass through proxy in wso2 esb
      1. Make sure you have wso2 esb up and running
      2. Locate your browser to https://localhost:9443/carbon
      3. use admin/admin as username/password to login to the site
      4. Click on Services > Add > Proxy Services
      5. Click on "Pass Through Service"
      6. enter "WCFService" in "Proxy Service Name" text box
      7. In "Target Url" add url of WCF Service
      8. Expand "Publish WSDL" option
      9. From the Publish WSDL drop down menu, choose "Specify Source Url"
      10. In the text box of WSDL URI, enter your published svc url suffixed with ?wsdl
      11. Expand Transport
      12. Uncheck HTTPS transport
      13. Click on create
      14. Go to Services > List
      15. Click on WCFService
      16. Copy the endpoint url
    5.  Creating Client for the newly created service in esb
      1. Start Visual studio
      2. Create a new console application project (i'm using visual basic)
      3. Right click on the project and click on add web reference
      4. enter the url of the endpoint that you get from web esb
      5. click on ok
      6. go to module1.vb
      7. Add following code:
        Dim client As New localhost.WCFService
        Dim strData As String = client.GetData(100, True)
        Console.WriteLine(strData)
        
        Dim cmpType As New localhost.CompositeType
        cmpType.BoolValue = True
        cmpType.BoolValueSpecified = True
        cmpType.StringValue = "It works" 
        Dim retCmpType As localhost.CompositeType = client.GetDataUsingDataContract(cmpType) 
        Console.WriteLine(retCmpType.StringValue)
        Console.ReadKey()
        
    That's It, you will see the output in console window. Press any key to exit the console application.
    Please note that I'm using web reference because I am not able to correcly implement WCF Client  for the service yet. In upcoming post, I will cover how to secure WCF service with basicHTTPBinding with wso2esb

    Tuesday, November 2, 2010

    Building Java Web Services with Axis2 and Eclipse

    0 comments
    I was working on middle-ware integration with wso2 and axis2 web services since last couple of months. In this post, I will show how to get started with axis2 development and deployment using Eclipse IDE.
    1. If you are not having an Eclipse IDE, I am using helios
    2. If you are already having Eclipse IDE. make sure you have WTP Plugin installed.
    3. Create a new workspace in eclipse
    4. Download and install any version of apache tomcat (I'm using tomcat 5.5). If you are having troubles configuring it on your machine, you can locate to apache tomcat help for installation here
    5. Add apache tomcat server to your Eclipse IDE, and here is how you can do it.
    6. Get Axis2
      Download latest source of Axis2 from here
    7. See Anil John's this article for properly configuring axis2 and related environment variables.
    8. Once you are done with step 7, you can start integrating axis2 with Eclipse IDE by using this article at eclipse WTP Tutorials.
    9. For deploying axis2 plugin using .aar package, donwload Apache Axis2 Archive plugin
    10. Extract the zip file of Apache Axis2 Archive plugin and copy the folder having plugin.xml and paste it to plugins folder of your eclipse installation root directory
    11. You are done with the configuration and ready to create a new web service. See this tutorial on eclipse WTP tutorials to create a new axis2 service.
    I am a .net developer, and successfully created and deployed the services created using Eclipse IDE to wso2 wsas.I have done this using windows xp, apache tomcat 5.5, axis2 1.5 and wso2 wsas 3.0.0. I hope this post will be helpful to you and will save your time to get started with axis2 development.
    I will try to share my experience of working with wso2 wsas and wso2 esb with you in upcoming posts.

    Monday, November 1, 2010

    Unable to engage module rampart

    0 comments
    If you have ever tried to create an axis web service with security, you probably have see this error:
    AxisFault: unable to engage module "rampart" 
    When I encountered this problem, I was working with eclipse having axis2 plug-ins. I found a solution in WSAS Forum.

    Wonderful thing to note is, I got this error fixed and while reading the forums of wso2 wsas, I got this link and I thought it would be good to share this.

    Note: This post is applicable to those who are not using axis2 repositories for development and using standalone eclipse projects. I was using the same.

    Tuesday, August 17, 2010

    How to create a signle package for skin and container

    0 comments
    In last week I've released a new skin Multiflex5 on OSDNNSKINS, which is having two packages in downloads section, one for skin and another for containers. When I visited the download page to make sure downloads are working fine, I noticed that skin package is having more downloads than container package's download. This is why this question comes to my head.

    The Idea behind creating a single package is to make sure newbies can also install the package correctly, and when they evaluate the skin. So, I have decided to add two things:

    1. Create single package for skin and containers.

    2. Create a page template (or may be portal template not sure) that can be used to see the demo.

    So, right now I'm going to discuss about how I have created a single package for skin and container. and you have to wait for next post to know how to create page template that can demonstrate the skin.

    Before starting to manually do the following steps, I've tried finding if there is an automated way to do this, and already created a question in dnn skinning forum. Following are manual steps to merge two different skin and container packages to single one.

    1. Create separate packages for skin and containers using Create Package Wizard.
    2. Copy the packages from dnn's Install folder to a new folder.
    3. Create a New folder called Package and paste all files of skins and containers to a package folder.
    4. Make sure you don't have common name for any file in skin/container's package. Otherwise step 3 will overwrite it.
    5. Open container's .dnn file and copy following section:
    <package name="Multiflex5.4" type="Container" version="0.0.4">
    ...
    </package>
    
    6. Open .dnn file for skin and paste the it before </packages> tag.
    7. Remove .dnn file for container
    9. Press Cnrl + A to select all files, right click > Send To > Compressed (Zipped) folder
    10. Rename the newly created Zip file to your desired name.
    11. Test it by installing it to new instance of DNN (or change the skin and container names to install it to the existing installation)

    Hope this will be helpful.

    Saturday, August 14, 2010

    Free DNN Skin - Multiflex5 Enhancements - Part - 1: Formating DNN's default module warnings and errors at client side using jQuery

    0 comments
    As all of we know that when there is a warning or error in loading a module for admin, while logged in as admin/host we see dnn's warning/error message. While implementing skins, we generally don't care about it as it will be only visible to admins/hosts. Have you wondered if we can fix that somehow? here is a sample screen show while Multiflex Skin is showing a dnn warning message.

    dnn warning message
    Let's fix it using jQuery:
    1. Add jQuery reference and a js file called Home.js
    <%DotNetNuke.Framework.jQuery.RequestRegistration()%>
    <script src="<%=SKinPath %>Home.js" type="text/javascript"></script>
    
    2. Let's add jQuery to format the message
    $(function() {
        if ($('#dnn_ContentPane>table').length > 0) {
            $('#dnn_ContentPane>hr').remove();
            var $table = $('#dnn_ContentPane>table')
            $table.hide();
            var html = '';
            $('td', $table).each(function() {
                html += $(this).html();
            });
            $table.remove();
            $('#dnn_ContentPane').prepend('<div id="divMsg"><div class="content-cell-corner-top"></div><div class="content-cell">' + html + '</div><div class="content-cell-corner-bottom"></div>');
        }
    });
    

    And we are done! now let's take a look at how the dnn warning message is looking in Multiflex5 skin?


    dnn warning message formatted

    So, we can see a little bit of jQuery can format the message at client side. I was thinking how to get it formatted right from the server side and will try to figure this out.

    Next fix in multiflex5 is of dnn action menu, Once I will done with that, new version of mutltiflex5 will be released.

    Please tell me your thoughts or shared your solutions for the same problem you faced during dnn development to make the Multiflex5 better suited to use in production.

    Have fun with the free skin.

    Friday, August 13, 2010

    Free DNN Skin - Multiflex5

    0 comments
    New free skin is available on OSDNNSKINS. An open source template Multiflex5 is converted into DNN Skin. Please visit  download section of OSDNNSKINS site.
    Instructions for using the skin:
    • Download and install Skin package and Container package from Download section of OSDNNSKINS 
    • Create sample page and try applying a skin and container to it
    • Use Rounded-Center.ascx as a default container
    • Use Subcontent.ascx as right sidebar container
    • Use botton-subcontent for two column layout of CenterLeftPane and CenterRightPane
    Updated

    Limitations:
    • DNN Action drop down menu is not showing correctly right now
    • DNN Module warnings are not showing correctly
    I've notices the above two things after releasing the skin packages, so will fix this in the next release in next weekend.
    Tested in all the popular browsers and looks fine. (IE7, latest version of Firefox, Chrome and safari)
    Please send your feedback on this skin.

    Update:
    Multiflex5 version 0.2 is now available to download which is now stable. Please report bugs you find in issue tracker of OSDNNSKINS

    Saturday, July 10, 2010

    DotNetNuke: Free Module - Sample SiteMap with Navigation and Filter

    2 comments
    Check out this free dnn module showing site map with option to filter the links using alphabet. Here are some of it's features:
    • Ajax to load tab links for an alphabet
    • Option to see all tab links or specific tab link
    • Only initial version to present the idea
    • It uses jQuery Navigation Pluggin  to show filter links
    • Screenshot:

    Further improvements and objectives

    The basic idea to would be to create a module that can be used as a dynamic page that shows various links and can be used for SEO purpose.

    Send your suggessions

    Please send in your wish list of features that you expect and can add value to this. Please feel free to download and evaluate the module and use it in whatever way you want.

    Download

    DotNetNuke: Common tips for skin Developers

    2 comments

      Skin Development

    1. How to add reference to jQuery?
      Add following server tag at the top of your skin file
      Add following at the end of your skin file:

      <%  DotNetNuke.Framework.jQuery.RequestRegistration()%> 
      
      <script runat="server">
       Protected Sub Page_Init(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Init
        dotnetnuke.Framework.jQuery.RequestRegistration()
       End Sub
      </script>
      
      
      Thanks to Brian Dukes for correcting this
    2. How to access Tab Name?

      <%=  PortalSettings.ActiveTab.TabName%> 
      
      Now that you know how PortalSettigns is having ActiveTab you can play with properties of ActiveTab which is of type TabInfo
    3. How to access currently logged in user?

      <%=  PortalSettings.UserInfo.DisplayName%> 
      
      Once again PortalSettigns, you can use PortalSettings.UserInfo.Roles to provide role based elements to your skin.
    4. how to get path of Skin folder?
      Most useful and easy one

      <%=  SkinPath%> 
      
      so if you want to show an tips.jpg which is images directory in your skin root directory, do this

      <img src="<%=SkinPath %>images/tips.jpg" alt="tips" title="tips" />
      
    5. How to find default portal and admin skins from database?

      selecT* from PortalSettings where SettingName in ('DefaultAdminContainer','DefaultAdminSkin','DefaultPortalContainer','DefaultPortalSkin')
      select * from HostSettings where SettingName in ('DefaultAdminContainer','DefaultAdminSkin','DefaultPortalContainer','DefaultPortalSkin')
      
      DNN will try to look at PortalSettings table and see if admin and default portal skins are available there, if found, it will apply that settings otherwise it will load it from HostSettings table.
      Here is more advanced link from dnn blog.

      Reference and links for skin development

    1. There are lots of skin objects, which are described well here, or you can download entire DotNetNuke Skinning Guide from dotnetnuke website.
    2. Building dnn skins using BluePrint css framework
      Free Sample skin developed using BluePrint css framework
    3. Tutorial on building DNN Skins using YAML
    4. Pros and cons of using css frameworks in dnn

    More..

    Please drop me a line to get any kind help regarding the dnn skin development and administration problems.

    Thursday, April 1, 2010

    DotNetNuke - What is Module Definition?

    2 comments
    DNN - What is Module Definition?
    What is Module Definition?


    A Module must have at least one definition in order to show the default view control in module. More over, Module is collection of module definitions, that contains group of controls (View, Edit, Settings). When a module is installed to the tab, all the definitions are installed to it and default or view controls from all the definition is visible to the tab.

    But why do I need it?

    When you want to display your module views in different panes!

    I don't get you!

    Well what will you do if you have a two column layout (skin) and you are asked to show recent posts in the side bar pane and recent comments at the bottom of content pane?

    I will create two different modules!

    No, that's not a right way to do it! Module definitions are just to do this kind of things. Creating two different module and then creating a module package for both of them and installing them individually is not an efficient way. Logically, your recent posts' view and recent comments are part of your blog module and by installing blog module you will be able to install both of them in any pane of skin you want.

    Ok, But I can just add the recent comments at the bottom of my posts in the ascx control, why do I create a separate view for it?


    Well, what if client ask you to move it to sidebar? separating the things will allow client to do it him self!



    Oh I see! So, I have to create two view controls in the module and just create two separate definitions for both of them.

    Right. That's the correct way to do it.

    Ok, and what If I want to add "New Post" link to both of the module definitions?

    Well, you can create a single edit type of control and you have to add the control's link to both of the view controls and add the edit control to both definitions. But note that if you are using module id this will not work. Module ID for both of them will be different.

    [But most of the time, you will not do that in DNN, you will place edit link to the view that is most relevant.]

    And what about settings, can I share settings of module between them?

    Nop, you cannot share it. installing every definition will create a new module id. and settings are stored by module id so technically, you don't have facility to do this by design. That makes sense, For example, if you want to show unapproved comment's list to the blog owner, and change the setting for that definition, that will not affect the blog list and recent post list.

    Conclusion:
    You can think module definition as a deploy time helpers, if you want that certain group of view controls should be installed with the installation of module but don't want them to stick to the panes they are installed in, just split your views in more than one view and add as many definitions as you want to allow flexibility.

    Thursday, March 4, 2010

    Building Skinnable Modules

    0 comments
    Introduction
    In this post we will try to create a basic module development strategy when you want to create a module with multiple skins. The basic idea here is to create an initial demo that can be re-used to create modules with multiple skins.

    Let's Start:
    Let's start by creating some set of controls and css just like you see in the image below.

    Skinnable Module Image 1

    • Create a Module from the control in the root directory (View.ascx)
    • View.ascx is just a control loader which will decide which skin control to be rendered based on skin that is selected, if no skin is selected, you can assign default skin.
    Further Improvements:
    • If module control is relatively simply and contains only listing view like repeater or data list, you can move the cs file of any one control to code folder, and change code behind file attribute for both skin controls. That way you don't have to maintain separate code file for each skin.


    Source Code:

    You can download source code from here.

    Saturday, January 23, 2010

    DotNetNuke - Alternative for using getTabByName or getTab - Part 2

    0 comments
    If you have gone through this post you will find that there are alternatives like storing the TabIds in session state, or cache, or creating entries in siteUrl.config. In this post we will see some more options regarding the same problem and advantages and disadvantages of all of them.

    Let's look at other two options that are available:

    (1) Accessing Tabs without tabId is another option that you can choose. Good thing is you don't have to worry about tabId and bad thing with this is it will not work with querystring params.

    (2) Store the tab ids you require by providing a module setting. If you choose this option, you have to create a settings page which provides a drop down for each tab that you are using link of navigation, and you can then simply use the tab id stored in settings everytime. Good thing is that all other information along with the tab id is not loaded from the database.

    Now Let's look at the detail of each method:
    (1) Session State:

    Good When: If you are using the tabId in the session that is strongly depend to the current session (for example link to user's profile) it's good to store the tabId in the session. But that doesn't mean I'm in favour of adding entire TabInfo object in to the session, If you want to use TabId only, you can directly add TabId into the session. If you are using more than one tab you can maintain hash table. Use some utility class for boxing and unboxing the HasTable from the session.

    Not Good when: If your module needs a tab that is providing navigation to other related tabs of the site, that are static (for example a help page for the module of features) you should not use session, as it will aquire large set of memory for the sites that are heavy loeaded with users.
    Multi-Portal Considerations: Works fine if module is used in multi-portal or not.

    (2) Cache:

    Good When: storing the link of tab that is not dependent on session. 'Not Good When' for sessuib state is resolved with the cache. If you are new to dnn data cache, please go through the help articles before doing anything.

    Not Good When: I don't see any disadvantages of using cache if used properly. Common problems with using caches are, refreshing and populating the cache at correct time, If you are good enough to understand that, there are no problems with this. I will recommend to google this for getting in-depth understanding of this topic.

    Multi-Portal Considerations: Works fine if module is used in multi-portal or not, but it's good practice to add portalId at the end of the key if you are planning to use the module in multi-portal environment.

    (3) SiteUrl.Config:

    Good When: you have small number of static tabs to redirect. You can just create an entry and use it from any where in any modules. I've used this trick many times to show user's shopping cart from anywhere in the site by redirecting them to shoppingCart.aspx. You can use it for the same purpose.

    Not Good When: NA

    Multi-Portal Considerations: If you are dealing with multiple portals having same tab name, Either you have to create site url entries with different names or you cannot do it. For example, if you are using this feature for help, you cannot give all the tab's name as help.aspx, but you can do it help1.aspx, help2.aspx which is possible. or It may be possible, But I am not able to find the correct solution for this. But atleast consider this when you are in multi-portal module development.

    (4) Tab Names:

    Good When: You are sure that you will never change the tab name

    Not Good When: You are using Query string

    Multi-portal Considerations: No worries, works fine without any problems.

    (5) Module Settings:

    Good When: You are not sure what would be the tab name when you deploy the page (because only client can name it correcly ;) ) so, it's wise decision to provide ui with Drop downs to store the it as a module setting once and forget for the rest of the life time after that.

    Not Good When: you have a module that is accessing database agressively, this will add additional data access load to the database server. Bad thing with this is you cannot control number of round trips to the database for a specific instance of the

    Multi-portal Considerations: It's not possible to deploy local setting with dnn portal templates using export featrues.

    I hope this is useful to you when you develop modules.

    Friday, January 22, 2010

    Year 2009 overview for the blog

    0 comments
    • Two articles from the blog are selected in DotNetNuke.com newlatter (DotNetNuke is one of the best CMS in .net and won best cms awards more than once) http://www.dotnetnuke.com/Portals/25/Newsletter/DotNetNukeNewsletterVol.VNumber10.pdf (See tips and tricks section)http://www.dotnetnuke.com/Portals/25/Newsletter/DotNetNukeNewsletterVol.VNumber7.pdf (See tips and tricks section)
    • For year 2009 records for the blog says - 19240 visitors, 27422 page views with 16994 unique visitors and most of them are from out of india.
    • some of the posts like creating modal popup in html4 is accessed around 3000 times in the last year
    • Hosting open source dotnetnuke skin project at codeplex (osdnnskins.codeplex.com) and post updates about it at this blog. Many of the sites like http://www.arthawena.com/ already using it having a back link to the blog.
    • Some of the unique researches like 'Flash remoting with asp.net' is all time fev of all the flash and no-flash devs.

    Thanks everybody for the support and help, keep in touch