Search

Latest Community DotNetNuke Blog Posts

DNNDaily.com
Thursday, September 09, 2010 5:22:58 PM
If you’ve ever run into this issue, and it looks from a google search (or twenty) that no one else has run into this issue, it can be a frustrating one to track down. Here’s the background. I had a PE customer who had some issues with their DotNetNuke website, after getting most of the issues resolved, there remained one nagging issue. If you tried to use the Image Manager, Document Manager, or Media Manager options in the Telerik RadEditor you would get a message that said “Loading the dialog” and looked like
The Mighty Blog
Thursday, September 09, 2010 8:19:00 AM

DotNetNuke Connections 2010: Will Strohl

I feel a bit overwhelmed right now.  I haven’t presented at any community events in at least a couple of months, and I have somehow found myself committed to 7 different public presentations at 4 different events in 4 different cities over the next 2 months – and that’s not including 2 huge presentations that are not public.

I am not complaining though.  I wouldn’t agree to any of them if I didn’t enjoy it.  I just didn’t realize how quickly they all sprung up on me!  :)

Bay Area DotNetNuke User Group

Date: Sept. 16th
Location:  DotNetNuke Corporation Corporate Office, San Mateo, CA
Cost:  FREE
Registration:  http://baydug.org/

Page One: All of the SEO Hooks in DotNetNuke that YOU Need to Know
It's one thing to be an "SEO expert" and it's another thing to know how to implement the varying search engine optimization techniques.  Many CMS solutions claim to be SEO-friendly, or "the best at SEO," but this session will show how DotNetNuke has the most built-in SEO hooks out of any CMS platform available today.  You don't need to be a programmer or a skinner to benefit from this session - but you do need to be ready to be inspired to increase your search engine results page ranking at the end of this session!

Day of DotNetNuke Chicago

I will be presenting 2 different sessions at the first annual Day of DotNetNuke Chicago.

Date:  Oct. 02
Location:  Northern Illinois University, Chicago, IL
Cost:  FREE
Registration:  http://chicago.dayofdotnetnuke.com/

Programming Your Way into Your Designers Hearts
All to often, we as programmers, paint our designers into corners. Unfortunately, our designers may also be our customers. This session is meant to teach you how to develop your DotNetNuke modules using basic methods and standards to enable your designers instead of making them angry. Using what you learn here, your designers and customers will be able to change your modules to fit their designs with the greatest of ease. Before you know it, if you follow my advice, Fridays will be "buy your programmer a beer" day at the office! (One can dream, right?)

Installation and Upgrading of DotNetNuke and DNN Modules
There are quite a few misconceptions out there about the level of difficulty when installing and upgrading DotNetNuke. This session is intended to walk you through the entire installation and upgrade process, outlining some of the common problems and solutions. As an add-on, we will also go through installing modules on DotNetNuke. At the end of this session, you will walk out being inspired to install DotNetNuke right away, and install all of your favorite modules. After we're done, you too will think it's easy!

Silicon Valley Code Camp

To be honest, this code camp format really confuses me.  I have 3 sessions submitted.  I have no idea if I will be presenting one or all of them.  I will be ready though.

Date:  Oct. 09-10
Location:  Foothill College, Los Altos Hills, CA
Cost:  FREE
Registration:  http://www.siliconvalley-codecamp.com/Register.aspx

Introduction to DotNetNuke 5
Have you heard of DotNetNuke (DNN) and don't know what it is? Have you used it, but just don't know where to start with it? This session is designed to show you how to get started with DotNetNuke, and give you the tools and information to leap forward to be able to use it for your websites and company. First, we will show you how to install it, and then give an overview of the features that the newest version of DNN has. Finally, we will give you guidance on how to move forward with DNN in your company, consultancy, or personal endeavors.

DotNetNuke 5 Administration: Tips & Tricks
It is one thing to install DotNetNuke, but it is an entirely different thing to manage it. Oftentimes, the person who manages a DotNetNuke website is not the person who installed it, and may not have the skill set to know how to manage their DotNetNuke website effectively. In this session, we will walk through some of the more common DotNetNuke management and administration scenarios, showing you how to be a POWER Administrator and overcome administrative challenges.

Using Advanced jQuery Techniques to Enhance Your DotNetNuke Modules
You may know how to build a DotNetNuke module. You may know jQuery pretty well. But do you know how to use jQuery to really punch up your UI to wow your clients and website visitors? Do you know how to leverage jQuery UI to make your module UI more flexible? This session aims to get you in the right direction by providing you the techniques and tools to answer those questions. The next module you build will have that extra something that you never knew was missing!

DotNetNuke Connections

I am more excited about this speaking event then nearly any other speaking event I’ve been lucky enough to present at!  This is also my first time going, so I really hope to see every single one of you there!  :)

Date:  Nov. 1-4
Location:  Mandalay Bay Resort & Casino, Las Vegas, NV
Cost:  $1,595.00 (discount available for user groups)
Registration:  [link to site]

DotNetNuke 5 Administration: Tips & Tricks
It is one thing to install DotNetNuke, but it is an entirely different thing to manage it. Oftentimes, the person who manages a DotNetNuke website is not the person who installed it, and may not have the skill set to know how to manage their DotNetNuke website effectively. In this session, we will walk through some of the more common DotNetNuke management and administration scenarios, showing you how to be a POWER Administrator and overcome administrative challenges.

** PLEASE NOTE: This session will be updated specifically for this event.

I hope to see you at one of my upcoming presentations.  Please make it a point to tell me hi, and tell me how much you hate my blog!  :)

Active Modules, Inc.
Thursday, September 09, 2010 2:21:03 AM
Active Modules announces the latest version of Active Social, the company's social networking solution, along with expanded Active Social offerings

Charleston, SC, (PRWEB) September 9, 2010Active Modules, Inc, a software development company that is known for producing several of the top modules for the DotNetNuke Web Application Framework, announces Active Social's latest release along with the new Active Social Express and Active Social Standard editions. With features like customizable user profiles, groups, private messages, and events, Active Social offers all the tools needed to build a strong online community while maintaining the flexibility and ease of use that is essential to both site administrators and members.

The latest release of Active Social introduces several enhancements to the Journal, one of the module's key features. Journals, an aggregate of different types of site activity such as Links Shared and Groups Created, can exist for individual users, groups, and the site as a whole. Enhancements made in the latest version of Active Social make it easier to customize and integrate content from outside Active Social into the Journal, further enabling the Active Social Journal to be the center of all activity.

One of the most significant changes comes with the inclusion of the Journal API, which has been documented for this release of Active Social, allowing other applications to add content to a journal. The Journal API can be used to create content for any type of activity in a journal, and if one of the available types does not fit a site's needs, an administrator can now simply create a custom type for the content. Additional security options for journal entries allow site members to choose from visibility options, such as friends only or private, when creating journal entries. These options allow users to make sure information they share can be accessed by the appropriate parties and recognizes the need for varying levels of privacy in the Journal. All these developments allow the latest release of Active Social to offer customers even greater flexibility in adapting the module to meet their diverse needs.

Active Modules has also expanded its Active Social offerings, with the Express and Standard Editions. These versions will be sold with the Express and Standard Editions of Active Forums for $179.95 and $299.95, respectively. The Active Social Suite for DotNetNuke, sold with Active Forums Enterprise, will now be labeled Active Social Enterprise. With this release and the new editions of Active Social, customers, now more than ever, can tailor Active Social's layout, design, and content to meet their specific objectives and budget requirements. For more information about Active Social, please visit our website.

Headquartered in Charleston, S.C., Active Modules, Inc. is a software development company offering custom solutions focused around DotNetNuke and the Microsoft .NET Framework. The ease of use and affordable pricing of the Active Modules product line makes the modules ideal solutions for large companies, small groups, start-up businesses, or interest groups of any size. For more information about Active Modules and its products, please visit http://www.activemodules.com.
Joe Brinkman
Wednesday, September 08, 2010 11:43:58 AM

This article is cross-posted from my company blog.

Do you use Windows Live Writer and the DotNetNuke Blog module?  I do, and I just discovered a great new WLW feature which is going to greatly simplify the steps I have to perform for every blog post.

I have been using Windows Live Writer (WLW) for a few years now.  I really love WLW for writing my blog.  In fact I loved it so much that it was one of the reasons I had shifted my personal blog to BlogEngine.net.  At the time, the DotNetNuke Blog module did not support a posting API which could be used with WLW.  You don’t know real pain until you have tried to write a blog post with nothing but a web based rich text editor.  Once you lose one or two posts because of a session timeout or your post gets mangled because of the way the editor handles script blocks or xml blocks, you will quickly swear off all blogging with an RTE.

Once I started using BlogEngine, I came to really appreciate some of its features.  It really tries to leverage the capabilities of WLW to make the blogging experience as pain free as possible.  One feature that I use quite a bit is the ability to split my blog into a summary along with the full post just by including the “” tag in my post.  Everything before the tag will be used when displaying the blog summaries.  The entire content will be displayed when viewing a specific blog post.  This is great, although it does limit your ability to craft a great summary that differs from the opening of your blog post.

Unfortunately, the DotNetNuke Blog module does not support the “[ more ]” tag.  If you don’t provide a summary when creating a post for the Blog module, then it will try to create a summary using the first 1000 or so characters.  This rarely works with my blog posts and even when it works it is generally not optimal.  Because I usually include an image at the top of my posts, the auto-summary feature usually just chokes and I am forced to hand enter a summary for my blog on DotNetNuke.com.  This is definitely a problem.  My blog posts often include coding examples.  When I edit a blog post just so I can hand craft the summary, it also has the side effect of opening the main blog content in the RTE which then reformats my code blocks when I go to save the summary.  Hello mangled code samples.

I have been using Windows Live Writer (WLW) for a few years now.  I really love WLW for writing my blog.  In fact I loved it so much that it was one of the reasons I had shifted my personal blog to BlogEngine.net.  At the time, the DotNetNuke Blog module did not support a posting API which could be used with WLW.  You don’t know real pain until you have tried to write a blog post with nothing but a web based rich text editor.  Once you lose one or two posts because of a session timeout or your post gets mangled because of the way the editor handles script blocks or xml blocks, you will quickly swear off all blogging with an RTE.

Once I started using BlogEngine, I came to really appreciate some of its features.  It really tries to leverage the capabilities of WLW to make the blogging experience as pain free as possible.  One feature that I use quite a bit is the ability to split my blog into a summary along with the full post just by including the “” tag in my post.  Everything before the tag will be used when displaying the blog summaries.  The entire content will be displayed when viewing a specific blog post.  This is great, although it does limit your ability to craft a great summary that differs from the opening of your blog post.

Unfortunately, the DotNetNuke Blog module does not support the “[ more ]” tag.  If you don’t provide a summary when creating a post for the Blog module, then it will try to create a summary using the first 1000 or so characters.  This rarely works with my blog posts and even when it works it is generally not optimal.  Because I usually include an image at the top of my posts, the auto-summary feature usually just chokes and I am forced to hand enter a summary for my blog on DotNetNuke.com.  This is definitely a problem.  My blog posts often include coding examples.  When I edit a blog post just so I can hand craft the summary, it also has the side effect of opening the main blog content in the RTE which then reformats my code blocks when I go to save the summary.  Hello mangled code samples.

Recently, while reviewing my Hacktaculous post, I re-opened it using the new WLW Beta.  Imagine my surprise when I was greeted with this image

WLWMore

Notice that this post includes both my summary as well as the full post and is separated by a dotted line with the word “More…”.  In looking at the source tab I see in the HTML that I have both a summary section and the full content section separated by <!—more—>.  This is awesome!

After playing around with this for a bit, I found that the DotNetNuke Blog fully supports this feature.  I can create my summary along with my full blog post all within WLW.  When posted to a DotNetNuke Blog, the summary and blog content are both posted correctly and I no longer have to hand edit my entry after posting to my company blog on DotNetNuke.com.  Now I can have real summaries which are not just the first couple of paragraphs of my blog post and I don’t have to worry about mangling my code examples. After a little further research I found that there is a “split post” button on the insert tab on the new ribbon bar.  This button inserts the magical <!—more—> comment tag into my post. 

SplitPost

I don’t know how long this feature has existed in WLW or how long it has been supported by DotNetNuke Blog.  For me it is brand new.  As a fairly prolific DotNetNuke blogger, I am betting that it is probably new for many others in the DotNetNuke community as well.

dnnGallery Project Showcase
Wednesday, September 08, 2010 12:39:00 AM

A new site has been added to the dnnGallery.net Showcase, which features high quality DotNetNuke websites from around the world. Please visit dnnGallery for more information or to submit your sites to the showcase.

Cuong Dang
  • Designer/Developer

  • Company

    R2integrated

    At R2integrated, we specialize in two critical business objectives: comprehensive internet marketing services, designed for monthly customer acquisition and revenue generation, and the technology design and development needed for effective Internet communications. We engage your potential customers through a variety of online channels such as Internet marketing, technology design, social media, website design, SEO and SEM. We focus on these elements as part of a comprehensive strategy focused on your business goals.

    At R2integrated, we specialize in two critical business objectives: comprehensive internet marketing services, designed for monthly customer acquisition and revenue generation, and the technology design and development needed for effective Internet communications. We engage your potential customers through a variety of online channels such as Internet marketing, technology design, social media, website design, SEO and SEM. We focus on these elements as part of a comprehensive strategy focused on your business goals.

  • Project

  • Project Details

    This is a redesign project with an experiment of HTML5 and CSS3 of a personal journal and portfolio. The approach was to create a website to work with forward-thinking (or modern) browsers that support those technologies.

    Challanges

    Backward compatibility. But since older browsers such as IE6 or 7 aren't really compliance so I chose not to support those.

  • Extensions

    • News Articles by Ventrian
iFinity.com.au - Bruce's Blog
Wednesday, September 08, 2010 12:37:29 AM

Every now and again I get a failed DNN installation with a half-created database.  When that happens, the best course of action is to clean out the database and start again with the install, making sure the problem is fixed.  But how do you clean out the database?

Here’s a quick script I wrote to do this – to be run through a Sql query tool.

Note : don’t ever run this unless you want to actually destroy your DotNetNuke database.  It’s a scorched earth deletion. It’s the Sql equivalent of delete *.* in old DOS days – except Sql Server won’t give you an ‘Are you sure?’ prompt.

Here’s the script:

declare @tableName nvarchar(100), @sql nvarchar(255)
declare drop_curs cursor for
select Name from sysobjects
where type = 'u'
and name like 'dnn_%'
open drop_curs
fetch from drop_curs into @tablename
while @@fetch_status = 0
begin
    select @sql = 'drop table ' + @tablename
    execute (@sql)

fetch from drop_curs into @tablename
end
close drop_curs
deallocate drop_curs

Joe Brinkman
Tuesday, September 07, 2010 7:54:21 PM

Skins

I have often heard it said that people have difficulty creating skins for DotNetNuke.  I am always baffled when I hear these comments especially in light of what I see in the competing skinning engines on other platforms.  In this series of posts I’ll be looking at the basics of DotNetNuke Skinning, creating a complete DotNetNuke skin and associated containers, dispelling a few Myths and Misconceptions about DotNetNuke Skinning and finally we’ll wrap up the series by comparing the DotNetNuke skinning engine with those of some other web platforms.

During the course of this series, we’ll be working towards building and packaging a skin that is based off of the Dreamy design template from the Open Source Web Design site.  This template uses a very simple design layout which should work well for explaining the basic concepts of DotNetNuke skinning.

Dreamy

Packaging

History

One of the great strengths of the DotNetNuke platform over the past 6 years has been the rapid growth of the ecosystem for modules and skins.  Very early in the project’s history we realized that in order to promote redistribution of extensions, we needed a standard method to package modules.  At the time, one of the community members contributed their code for reading a standard xml file located inside a zip file containing all of the module files.  Using this contribution as the foundation, I created the core module installation feature for DotNetNuke.  The xml file that controlled the installation process came to be known as the module manifest. 

The purpose of the manifest file was to identify key files within the package and designate where they should be installed.  This manifest also contained some additional metadata that was necessary for creating the needed entries in the different module tables within DotNetNuke.

Over time, Charles and myself continued to extend the module manifest and the packaging standard so that we could handle more and more installation scenarios. Even with these additions, the manifest and packaging standard was still basically the same as what I had originally built in 2004.

When Skinning was introduced with DotNetNuke 2.0 it used a different packaging standard.  Instead of relying on a manifest, it used a convention based approach and depended on having files follow a specific naming standard.  This worked well, but it had a number of limitations.  Like the module packaging standard, this remained largely unchanged until fairly recently.

A Leap Forward

DotNetNuke 5.0 introduced a new packaging standard that dramatically changed the format of the manifest file and extended it’s use to all DotNetNuke extension packages including modules, skins, libraries, providers and several others.  Charles had started working on some of these features in DotNetNuke 4.6, but it was not until the release of 5.0 that the implementation was fully complete.

The DotNetNuke 5 manifest and updated installation system provides greater control and flexibility to extension developers.  Now all extensions are first class citizens and share a common packaging standard which greatly simplifies the learning process.  Beyond the common format, the new installation system provides a number of additional benefits. 

From an architectural perspective, the new installation system is much more modular and extensible.  Not only can you install many different types of components, you can even define your own installation component type with its own definition of how the component is specified in the manifest.  Each extension can include one or more package, with each package containing one or more components.  All of this is extensible so that as we create new types of DotNetNuke extensions, we can continue to use the existing installation system.

From a third party developer perspective, the new system provides greater control and freedom.  New metadata types allow you to provide licensing, release notes and developer information that gets displayed during the installation wizard.  Developers can create packages which mix and match component types that make the most sense for their extension.  Under the original skin packaging system, there was no way to bundle required skin objects with the skin.  With the new packaging format you can bundle a skin, container, widget and skin object in a single package.  Module developers can package their module with a custom page template that includes an HTML module with instructions to help the user get started with the module.  The bottom line is that the new installation system opens up a lot of possibilities for developers and designers.

The new installation system also incorporates several features that simplify common installation problems.  Up until DotNetNuke 4.6, changes to web.config required manual edits by the end user.  DotNetNuke 4.6 introduced XMLMerge which allows the core framework to update any xml file using XML Merge scripts.  The updated installation system incorporates this functionality and makes it available to developers.  For example, if your extension requires an HttpModule to be registered in web.config, then the new XMLMerge feature in the manifest allows you to specify how to merge this entry into a customers website, as well as unregistering this entry if the extension is uninstalled.

Packaging In Action

Now that you have a high-level understanding of the new packaging system, I’ll show you see how this translates into actual “code” by packaging up the skin and container that I created in Part 2 and 3.  DotNetNuke 5 defines all extensions as a package.  When packaging skins and containers, I’ll need to define the various “packages” that are included in the zip file that is used for distributing the skins and containers.  The listing below shows the basic structure for the manifest file:

<dotnetnuke 
	type="Package" 
	version="5.0">
	<packages>
		<package 
			name="MySkin" 
			type="Skin" 
			version="1.0.0">
			...
		</package>
	</packages>
</dotnetnuke>

Each manifest contains a <packages> node with one or more packages defined.  Using this structure it is possible for us to define a skin, a set of containers and a skin object all inside a single manifest.  This greatly simplifies installation for the end user and ensures that all of the pieces needed for the skin design are installed as a single unit.  The root <dotnetnuke> node is boilerplate and will be the same for every manifest.  The <packages> node will contain one or more package definitions and this is where the real strength and flexibility of the manifest begin to become apparent.

Each package in the manifest will identify the package type, the version and the name of the package.  The package type is used by the system to determine the editor to use when editing the extension on the DotNetNuke Extensions page.  There is a set of eleven package types which are defined by the default installation.  You are free to create your own custom package types if you desire.  For packaging my skin however, I will stick with the standard “skin” and “container” package types.  The package version is an important part of the manifest since it is used to determine if the system should install the package.  If the package is already installed then the version number listed in the package manifest must be greater than the version of the already installed package.  The name attribute is used for determining if the package is already installed.  In some installation scenarios the user will be given the option to “re-install” the package if the version number is the same as the installed package of the same name.  In no case will a smaller version overwrite an installed package with a larger version number.

Each package has a number of meta-data elements which are used strictly for informational purposes.  These elements will be displayed when I install the skin, but otherwise have no impact on system behavior.  I’ll want to make sure to enter meaningful values for these elements so that anyone using my skin will have a little bit of information about this skin and the organization or individual that created the skin.  The <license> and <releaseNotes> nodes can use the src attribute to designate a file with the text or html for the license and release notes.  Alternatively, I could include the release notes and license text within the <license> and <releaseNotes> elements.

<friendlyName>Dreamy</friendlyName>
<description>A DotNetNuke Skin based on the 
Dreamy design from www.OSWD.org.</description>
<owner>
	<name>DotNetNuke</name>
	<organization>DotNetNuke Corporation</organization>
	<url>www.dotnetnuke.com</url>
	<email>support@dotnetnuke.com</email>
</owner>
<license src="skinlicense.txt"></license>
<releaseNotes src="skinreleasenotes.txt"></releaseNotes>

DotNetNuke extensions often have dependencies on other packages or system attributes.  I might want to use some skinning feature that is only available in a specific version of DotNetNuke, or I might want to use a specific navigation provider and need to make sure it is installed before installing my skin.  Using a dependencies element along with one or more dependency nodes allows us to ensure that the DotNetNuke installation meets our specifications thereby avoiding users who get frustrated when the skin does not work properly.  DotNetNuke includes the following dependency types: coreversion, package, permission and type.  You can also create your own dependency by adding your dependency to a system list called Dependency (I’ll cover this in a separate blog post).  For the Dreamy skin, if I want to make sure that DDRMenu is already installed and that the user is running DotNetNuke 5.2.0 or above before installing the skin, then I would add the following dependencies element in the manifest.

<dependencies>
	<dependency type="CoreVersion">05.02.00</dependency>
	<dependency type="Package">DDRMenu</dependency>
</dependencies>

 

One item to keep in mind is that the name displayed on the Extensions page is the friendly name and not the real name of the installed package.  To find the real name that I’ll need in the package dependency, I’ll need to look at the Extension Settings.  Notice that on the Extensions page the DDR Menu has an extra space in the name whereas on the Extensions Settings page there is no space in the actual module name.

Dependecy

Now that I have defined the basic properties for my package and configured any dependencies, I need to start breaking my skin into components.  Components define how individual files are installed and what elements are registered with DotNetNuke.  For example, when installing a skin, I’ll want to make sure to use a skin component so that DotNetNuke knows to parse my html skin files and so that the skin layouts are properly registered.  When I create my container package, I’ll replace the skin component with a container component.

<components>
	<component type="Skin">
		<skinFiles>
			<skinName>Dreamy</skinName>
			<basePath />
			...
		</skinFiles>
	</component>
</components>

In total, DotNetNuke includes 16 different component types which provide a lot of flexibility and control:

  • File
  • Assembly
  • ResourceFile
  • AuthenticationSystem
  • DashboardControl
  • Script
  • Config
  • Cleanup
  • Skin
  • Container
  • Module
  • CoreLanguage
  • ExtensionLanguage
  • Provider
  • SkinObject
  • Widget

Like many other portions of the installation system, you are also free to create your own component types.

The skin component, which inherits from the file component, allows me to identify files to use with that specific component.  These files will be stored in the system relative to the webroot.  Inside of the skinFiles node, I will specify the skinName and a basepath.  The skinName will be used to create the folder in the portals/_default/skins directory.  The basepath is used to further modify the path that is used as the root location for all files in the collection.  Generally, the basepath is not needed when creating skin and container components. 

The final step in creating a skin manifest is to identify the individual files in the package.  Each file element must include the filename as specified in the zip package.  Additionally, if I wish the file to be installed in a subfolder of the skin directory, then I will add a path element that specifies the additional path information.  This file must also be in the same subfolder within the zip package.  Occasionally I will use one structure in the zip package, but want to use a separate structure in the website.  In this case, I can use the <sourceFileName> element to specify the path and name of the file in the zip package and then use the <name> and <path> elements to designate the location where the file will be installed.  I will create a <skinFile> element for every file that I want to have installed

...
<skinFile>
  <path>images</path>
  <name>submenu_hover.png</name>
</skinFile>
<skinFile>
  <name>Index.ascx</name>
</skinFile>
<skinFile>
  <name>index.doctype.xml</name>
</skinFile>
<skinFile>
  <name>Index.html</name>
</skinFile>
<skinFile>
  <name>Index.jpg</name>
</skinFile>
...

Charles Nurse created a great series of posts on the manifest file format including one on the File component.

At this point I have a complete package defined for my skin and will basically duplicate these steps for the containers.  Instead of using a skin package, I will use the container package type, and instead of using a skin component type I will use the container component type.

One goal that I laid out in Part 2 of this series was to package up the DDRMenu with the skin to simplify installation.  After thinking this through I decided against that approach.  The DDRMenu is not distributed under a license that would allow me to incorporate it into my package.  To still show the flexibility of the manifest file, I instead chose to just create a dependency to ensure that the DDRMenu was already installed prior to installing the skin.

While creating the manifest may seem like a lot of work, it is actually quite simple and straightforward.  In my case, I will take advantage of the DotNetNuke framework to create much of the boilerplate for me. I start by creating a new extension from the Module Action Menu on the Host/Extensions page.

CreateExtension

This will open the New Extension Wizard where I will enter some of the basic Skin information.

Extensions-2

Clicking next allows me to enter information about myself and my organization.

Extensions-3

Click next and I am finished defining the basics of my skin.  This leaves me on the extensions page where I can use this information to automatically generate an installable package including the manifest file. 

Since I have been building my skin directly inside my local DotNetNuke installation, I already have the files located at /portals/_default/skins/dreamy.  By clicking on the edit icon next to my new skin on the extensions page, I can see all of the information I have just entered (I’ll ignore the empty License and Release Notes entries for now).  On this Package Settings page, if I used the same name for my skin folder as the name entered in the New Extension Wizard, then I will have the option to “Create Package” from the Module Action Menu.

Now I will step through a wizard for packaging my new skin.  On the first page I generally choose not to use an existing manifest because I want to use DotNetNuke to build the file list for me.  I also like to review any manifest that will be generated.

Package-1

After clicking next, I have the option to define the list of files to include in the package.  Since I am building my skin as an HTML based skin, I will exclude any ascx files which may have been generated during my testing.

Package-2

After making sure that all of the files are correct, I click next to see the generated manifest file.

Package-3

At this point I generally stop since I really just wanted to use the wizard to give me the basic structure and ensure that I captured all of the needed files.  I will repeat this same process to get the file list and package definition for my containers as well.

I now have all of the pieces I need for my skin manifest.  Combining all of the pieces together and editing the package names to ensure that my skin and container packages have unique names results in the final manifest.

<dotnetnuke type="Package" version="5.0">
	<packages>
		<package name="DotNetNuke.Dreamy.Skin" type="Skin" version="1.0.0">
			<friendlyName>Dreamy</friendlyName>
			<description>A DotNetNuke Skin based on the Dreamy design from www.OSWD.org. This package is 100% XHTML and utilizes CSS W3C enhancements. This skin and container set uses the DNN Done Right Menu from DNNGarden.com.</description>
			<owner>
				<name>DotNetNuke</name>
				<organization>DotNetNuke Corporation</organization>
				<url>www.dotnetnuke.com</url>
				<email>support@dotnetnuke.com</email>
			</owner>
			<license src="skinlicense.txt"></license>
			<releaseNotes src="skinreleasenotes.txt"></releaseNotes>
			<dependencies>
				<dependency type="CoreVersion">05.02.00</dependency>
				<dependency type="Package">DDRMenu</dependency>
			</dependencies>
			<components>
				<component type="Skin">
					<skinFiles>
						<skinName>Dreamy</skinName>
						<basePath />
						<skinFile>
						  <path>images</path>
						  <name>bg-ad-top.png</name>
						</skinFile>
						<skinFile>
						  <path>images</path>
						  <name>bg-body.png</name>
						</skinFile>
						<skinFile>
						  <path>images</path>
						  <name>bg-feed.gif</name>
						</skinFile>
						<skinFile>
						  <path>images</path>
						  <name>bg-footer.jpg</name>
						</skinFile>
						<skinFile>
						  <path>images</path>
						  <name>bg-header.jpg</name>
						</skinFile>
						<skinFile>
						  <path>images</path>
						  <name>bg-menu-hover.png</name>
						</skinFile>
						<skinFile>
						  <path>images</path>
						  <name>bg-menu.png</name>
						</skinFile>
						<skinFile>
						  <path>images</path>
						  <name>bg-sidebar-bottom.gif</name>
						</skinFile>
						<skinFile>
						  <path>images</path>
						  <name>button-feed.png</name>
						</skinFile>
						<skinFile>
						  <path>images</path>
						  <name>icon-comment.png</name>
						</skinFile>
						<skinFile>
						  <path>images</path>
						  <name>submenu_active.png</name>
						</skinFile>
						<skinFile>
						  <path>images</path>
						  <name>submenu_hover.png</name>
						</skinFile>
						<skinFile>
						  <name>index.doctype.xml</name>
						</skinFile>
						<skinFile>
						  <name>Index.html</name>
						</skinFile>
						<skinFile>
						  <name>Index.jpg</name>
						</skinFile>
						<skinFile>
						  <name>menu.css</name>
						</skinFile>
						<skinFile>
						  <name>skin.css</name>
						</skinFile>
						<skinFile>
						  <name>thumbnail_index.jpg</name>
						</skinFile>
					  </skinFiles>
				</component>
			</components>
		</package>
		<package name="DotNetNuke.Dreamy.Container" type="Container" version="1.0.0">
			<friendlyName>Dreamy</friendlyName>
			<description>A DotNetNuke Container set based on the Dreamy design from www.OSWD.org. This package is 100% XHTML and utilizes CSS W3C enhancements.</description>
			<owner>
				<name>DotNetNuke</name>
				<organization>DotNetNuke Corporation</organization>
				<url>www.dotnetnuke.com</url>
				<email>support@dotnetnuke.com</email>
			</owner>
			<license src="containerlicense.txt"></license>
			<releaseNotes src="containerreleasenotes.txt"></releaseNotes>
			<dependencies>
				<dependency type="CoreVersion">05.02.00</dependency>
				<dependency type="Package">DDRMenu</dependency>
			</dependencies>
			<components>
				<component type="Container">
				  <containerFiles>
					<containerName>Dreamy</containerName>
					<basePath />
					<containerFile>
					  <name>container.css</name>
					</containerFile>
					<containerFile>
					  <name>Sidebar.css</name>
					</containerFile>
					<containerFile>
					  <name>Sidebar.html</name>
					</containerFile>
					<containerFile>
					  <name>Sidebar.jpg</name>
					</containerFile>
					<containerFile>
					  <name>thumbnail_sidebar.jpg</name>
					</containerFile>
					<containerFile>
					  <name>thumbnail_title_green.jpg</name>
					</containerFile>
					<containerFile>
					  <name>Title_Green.css</name>
					</containerFile>
					<containerFile>
					  <name>Title_Green.html</name>
					</containerFile>
					<containerFile>
					  <name>Title_Green.jpg</name>
					</containerFile>
				  </containerFiles>
				</component>
			</components>
		</package>
	</packages>
</dotnetnuke>

The last step is to add all of the skin and container files into a single zip file.  I need to make sure to keep my image folders intact, but that is relatively straight forward.  You can download the complete packaged skin on the Dreamy Skin page on CodePlex.

In Part 5 of the series, I’ll discuss some of the common myths and misconceptions about DotNetNuke skinning.

DNNVoice.com
Tuesday, September 07, 2010 3:26:40 AM

Once again, it’s been far too long since the last show, almost another 6 months. Oliver talked me into getting this rolling again, so he’s here with me on Show #13. Take a listen and see what has been going on in the DNN world.

40Fingers Blog
Monday, September 06, 2010 9:01:00 AM
There are a lot of posts in the DotNetNuke forums about cross-browser issues in a DotNetNuke skin. The problem is mostly that the skin does not render the same in Internet Explorer and Firefox. As most of these issues are quite easy to prevent / solve, here's how to prevent most of them.
The Mighty Blog
Monday, September 06, 2010 7:47:00 AM
In a previous blog entry, I spoke about how you can add portals to your DotNetNuke website, but one of you pointed out that I didn’t speak to why one might choose to have multiple portals on a single instance of DNN versus having an instance of DNN for each website.  At first, I was shocked, “Why did I not think to speak about that?!”  However, as it sunk in, I am happy that I didn’t
DNNDaily.com
Saturday, September 04, 2010 11:59:00 PM

If you haven’t been to Las Vegas Nevada for the annual DotNetNuke Conference you are definitely missing out on a good time! I look forward to going every year, and to be honest, I get the most enjoyment out of seeing all the people and talking outside of the sessions than I do in the sessions themselves. That being said, the sessions are well worth the price of the conference! But where else are you going to get to meet the big names in the DotNetNuke World each and every year?

DNNConnections_In_N_Out

Tags: DotNetNuke,Conference,DNN,Vegas
Category: Community
Category: Events
TressleWorks
Saturday, September 04, 2010 9:15:00 PM

Yes it is true ... I will be speaking at the up-coming Day of DNN in Chicago on Saturday October 2nd

I am pleased to be presenting two sessions:  Adding Dashboard Functionality and Monitoring Back Office Systems with DotNetNuke.  Here are the full session descriptions for each.

More...
Active Modules, Inc.
Saturday, September 04, 2010 3:00:42 AM
A lot of great stuff happening lately with Active Modules and DotNetNuke.  Here is a quick recap in case you have been on vacation or been out of touch for the past month.

DotNetNuke 5.5 Release
On August 18th, DotNetNuke Corporation released DotNetNuke 5.5.  While there isn't a long list of new features, there is definitely fantastic list of fixes and minor improvements.  As many of our customers know, I have been more supportive of DNN 4.9.5 rather than any of the DNN 5.x releases.  Well, that has now changed.  DotNetNuke 5.5 is now my favorite release.  There are several factors that have made me change my mind, but the most important is performance.  I do think 4.9.5 has a smaller footprint, but it's time to move forward.  DotNetNuke 5.5 is stable, quick and has many new features that easily make it my favorite DotNetNuke release to date. 
Learn more about DotNetNuke 5.5

Frowser won the DotNetNuke Mobile Hackathon
The St. Louis DNN User Group hosted the DotNetNuke Mobile Hackathon last month.  For those of you not familiar with Hackathons, think of it as development contest.  This was the third DNN Hackathon and I think it was a huge success.  Each of these hackathons have been ways to introduce something new to DotNetNuke.  This is a tremendous benefit for the entire DNN Community.  You have DNN Experts sharing knowledge on a particular subject then developers take that knowledge and apply it to DotNetNuke.  This stimulates creativity in areas that many might not have even considered before.  Thanks to everyone that voted and stay tuned for what is next for Frowser!
Read the Mobile Hackathon Winner Announcement

Active Social 1.8
We have been talking about Active Social 1.8 for almost a month now.  The final release was posted on Friday and the official release will be on September 7th.  We still have some documentation to complete, but that will be ready with the release announcement. 
Active Social Release Notes

Chicago Day of DotNetNuke - October 2, 2010
The long awaited Day of DotNetNuke is just a couple weeks away.  This is going to be a great event.  My sessions are "Building a Site with DotNetNuke the Right Way" and "Building Social Communities with DotNetNuke".  Did I mention that Day of DotNetNuke events are free?  An entire day of learning and networking with DNN experts and other community members.  Hope to see you there!
Register for the Day of DotNetNuke


dnnGallery
Friday, September 03, 2010 11:55:00 AM

Hope you have a solid plan for the Labor Day Weekend already. If not, go ahead and turn off your computer and/or any mobile devices that can receive Facebook or Twitter updates! But wait, enjoy this week's roundup and before you leave for the day!

TressleWorks
Thursday, September 02, 2010 7:43:00 PM

After working with UDT - User Defined Tables - which is now call Form and List in DNN V5.0+, I was looking for a way to convert the UDT into a conventional table.  By convention table, I mean a table with multiple data column and a single row per data item.  UDT have simple structure that places one field per data item on a row, so if you have 10 data fields then the UDT will have 10 rows per data item.  Compounding the issue is the there is only one UserDefinedTableData table.

Having developed a strong reporting module - SQLGridSelectedView (aka SGSV) - I wanted to be able to access the data in a UDT.  To do this I created a stored procedure that would generate the appropriate T-SQL and then execute it to return the flatten data.  The flatten data has one row per data item and a column for each data field.  So, instead of 10 rows per data item I have one row with 10 columns. 

More...
DNNDaily.com
Thursday, September 02, 2010 7:23:55 PM

So if you’ve been under a rock lately you might not have heard that the annual DotNetNuke conference is coming up. While in the past it has been branded as OpenForce, this year it is just simply DotNetNuke Connections, to better fit inline with the DevConnections banner.

This years event is once again going to be held in conjunction with DevConnections in Las Vegas Nevada, November 1-4. The conference is at the Mandalay Bay Resort and Casino, a great venue that has been the amazing home to the DotNetNuke conference for the previous three years.

 

Joe Brinkman
Thursday, September 02, 2010 2:10:47 PM

This article is cross-posted from my DotNetNuke blog.

HacktaculousOn August 18th we kicked off the Mobile DotNetNuke Hackathon at the St. Louis DotNetNuke User Group.  During the kick-off we had a great demonstration of Appcelerator Titanium from Kevin Whinnery.  Kevin is an Appcelerator Engineer and Product Evangelist and it was clear from his presentation that he was both passionate and knowledgeable about Titanium.  Almost everyone we spoke with was extremely interested in giving Titanium a try and the Hackathon was the perfect opportunity to kick the tires and build a great mobile application.

If you have been following the voting this last week, you know that we had 5 great Hackathon entries, 4 of which were built with Titanium.  The voting has ended and Scott Willhite should be announcing the results shortly.  Regardless of which mobile app is declared the Hackathon winner, the real winner is the entire DotNetNuke community.  We have gained valuable knowledge about a great tool that can aid in extending the reach of websites and web applications that we all build.  We have also added 6 more Open Source applications to the DotNetNuke forge which will provide great starting points when developing new mobile applications.

If you haven’t built a mobile application yet, I highly recommend that you give it a try.  With tools like Titanium, it is not nearly as difficult as you might think.  Even if you want to get closer to the metal, and regardless of whether your mobile platform of choice is iOS, Android or Windows Phone 7, mobile development is still pretty straight forward and very rewarding.

As Jason Graves says in the video below, this Hackathon was Hacktaculous!  I couldn’t agree more.  I look forward to our next Hackathon where we will have an opportunity to further expand our development skills.

 

JUST FOR FUN:  There are 12 products or product logos pictured in the image at the upper right of this blog?  Can you name the 12 products all?  I am looking for specifics (e.g. DotNetNuke XXX Edition and not just DotNetNuke)  Leave your guesses in the comments on my blog at dotnetnuke.com.  I have a special gift for the first person to correctly get all 12 products.  If you guess and are not correct, I will only tell you that it is not correct but will not provide any further hints.

Peter Donker
Wednesday, September 01, 2010 6:51:52 AM

This latest release addresses an issue found with those running the DocView or Gallery addon.

The Mighty Blog
Tuesday, August 31, 2010 2:33:00 PM

One of the great strengths of DotNetNuke is the fact that you can host as many sites as you’d like, from a single installation of DNN.  Did I confused you?  Imagine that you are currently managing 5 or more websites, each with its own web hosting plan.  If they are each DNN, or otherwise a .Net and database enabled website, you’re easily spending over $7,000.00 just in hosting fees.  Imagine being able to spend a fraction of that amount by consolidating all of your websites into a single instance of DotNetNuke – leaving you to manage just a single hosting plan.  You can!

Just so you know, I am just going to talk about how to add new sites to an existing DNN site in this post.

The Web Host

The first thing to consider when planning to host all of your sites into a single installation of DNN, is your web host.  While DNN places no restriction on you in terms of how many sites you can host, and the number of domain names that those sites have, your web host may. 

Check with your web host immediately to see what limitations you might have.  For example, your web host might tell you that you’re only able to have up to 5 domain names associated to a single site in your account.  There are ways around this, but it’s a common and real-world example.

The Steps

There are three (3) basic steps to adding a new site to your instance of DNN.  They are outlined below:

  1. Update DNS
  2. Update IIS
  3. Add a New Portal in DNN

Update DNS

When you have a new or existing domain name, you need to point that domain name to a server.  This is what the Domain Name System (DNS) does for you.  It allows you to have a domain name that people can easily remember, but point it to an actual address on the internet.

The exact method of how to do this varies, as web hosts use a variety of different methods to add or edit a DNS entry to your domain name.  In general though, you want to make sure that you have an Host or A record in your DNS settings.  Simply specify the IP address of your web server to tell the DNS where to point requests to that domain to.

DNS: Host or A Record

Update IIS

Internet Information Server (IIS) is the web server that allows websites to work on the Microsoft platform.  It accepts requests from the internet for a website, and then responds with the requested web page and files.  In the world of DNN, it also is the final link to allow you to host multiple websites in DNN, before adding a new portal.

In order to add your new setting in IIS to accept requests for new domain names, you need to add an entry for the website called a Host Header.  This tells IIS all of the domain names that a single site will respond to. 

Once again, if you’re doing this through a web host, there could be any number of ways that they have you do this.  In IIS 7 though, it’s easier than ever. 

  1. Select your website in the list of websites.
  2. Click on Bindings in the right pane.
  3. Click the Add button.
  4. Add the new domain name into the new window that appears.
  5. Click OK to save the new domain name.
  6. Click Close to exit the Bindings dialog.

IIS: Host Headers

That’s it!  IIS is now all configured.

Add a New Portal

Most of you already know, but the word “portal” and “site” or “website” are interchangeable in DotNetNuke.  When we speak of adding a new portal to DNN, we’re also saying that we’re adding a new site.  It’s easy to do this in DNN. 

  1. Login using a Host or Superuser account.
  2. Go to the Portals page in the Host menu.
  3. Click the Add New Portal link at the bottom of the module, or in the actions menu.
  4. Fill in all of the information in the form on the next page.
  5. The Portal Alias is your new domain name.
  6. Click Create Portal to create your portal.
  7. Visit your new website!

DotNetNuke: Add New Portal (Site)

It’s really that simple to add a new portal to your site.

At this point, you technically should be able to see, access, and log into your new site.  However, you should note that DNS settings take time to spread across the internet.  For this reason, you and other may not be able to get to the site using it’s URL for up to 24 hours.  People in different regions of the country and world will also be able to use the URL at different times.  For example, you might be in Orlando, FL, and be able to see the site immediately.  In contrast, someone in the state of Washington might not be able to see the site for two more hours.  Additionally, someone in the UK might not see the site for 6 hours after that.  It really does vary.

Active Modules, Inc.
Tuesday, August 31, 2010 12:35:12 AM
Today is the last day to vote for your favorite DotNetNuke Mobile Hackathon Entry (Frowser).  DotNetNuke Corp has given you even more incentive to vote for your favorite entry (Frowser) by giving away two $50 Amazon gift certificates.  Just by casting your vote (for Frowser) you are automatically eligible to win one of two $50 Amazon Gift Certificates.  All of the Hackathon entries are great, but we really hope you like our entry, Frowser, the best. 



You can learn more about Frowser on the demo site, http://www.frowser.net

Visit the DotNetNuke Mobile Hackathon and cast your vote for Frowser today!


P.S.  In case you didn't notice, I really hope you vote for Frowser


RSS URL

About Us

Why DotNetNukeBlogs.com? Our goal is to be the premier aggregator of DotNetNuke related materials. DotNetNukeBlogs.com was started by DotNetNuke Core Team member Chris Hammond with the intention to provide a place for the leaders in the DotNetNuke Community to push their content to those needing it most, the users.

Stay tuned as we continue to grow. If you're a DotNetNuke Expert be sure to get your feed added into our aggregate system.

You can read more about us here

Built On DotNetNuke

This site is built with and supports the DotNetNuke open source project.
DotNetNuke Powered!

Resources

DotNetNuke.com The DNN mothership.

Copyright (c) 2010 DotNetNuke Blogs On DNN, For DNN

DotNetNuke and DNN are trademarks of DotNetNuke Corporation