Efficion Consulting - DotNetNuke, ASP.NET, Web Development Blog http://www.efficionconsulting.com/Blog Efficion Consulting - DotNetNuke, ASP.NET, Web Development Blog - RSS Feed en-us david@efficionconsulting.com david@efficionconsulting.com Friday, March 22, 2019 EfficionConsulting Articles Module (www.efficionconsulting.com) Copyright 2019, Efficion Consulting Free SSL Certificates through Lets Encrypt for DNN I recently saw some articles about well-respected free SSL certificates from Lets Encrypt. Not only are Let's Encrypt certificates free, but they are also much easier to setup because the whole process is automated and, once you've got DNN properly configured, completes in about 10 seconds as opposed to a whole lot of manual steps for most SSL Certs. Most of the Lets Encrypt stuff is intended for Linux machines but there are now nice solutions for Windows Servers running IIS. As I tried to add a certificate to a DNN site, I ran into a few issues but they were fairly easy to solve. There are a couple other blogs that describe similar solutions, this one uses the LetsEncrypt-Win-Simple command line utility but is otherwise nice and simple. I prefer, the Certify The Web application as it has a nice UI and is simple to use. http://www.efficionconsulting.com/Blog/itemid/687/amid/1500/free-ssl-certificates-through-lets-encrypt-for-dnn David O'Leary Wed, 02 May 2018 00:00:00 GMT Determine if SmarterMail 16+ is being used as an open relay Look at Reports -> Message Traffic. Look at the total number of messages being sent  under Trend mode. Then switch to Domain mode and verify the numbers are similar.  Search your Delivery Logs (Manage -> Troubleshooting -> View Logs) for "Sending remote mail" and verify all the email addresses involved are valid for your server.  Check your Spool - you may have a bunch of emails trying to go to invalid email addresses. http://www.efficionconsulting.com/Blog/itemid/686/amid/1500/determine-if-smartermail-16-is-being-used-as-an-open-relay Administrator Account Fri, 06 Oct 2017 10:28:03 GMT Making Ventrian's Simple Gallery Responsive Ventrian has been making great DNN modules for many years now. Some of the modules though are beginning to show their age a bit and are using markup heavy techniques that were at one time common but can now be replaced with much cleaner CSS for most browsers. In particular, the Ventrian Gallery module wraps each photo in a table that has a cell for every corner and every side so that fancy borders can be added around the photos. This technique results in lots of extra markup and causes issues if you're wanting the gallery to be responsive (adjust to the users viewable area). It is actually fairly easy to make a few changes to cleanup the rendered HTML to allow for more modern and lightweight techniques for styling. We'll go through the steps... http://www.efficionconsulting.com/Blog/itemid/665/amid/1500/making-ventrians-simple-gallery-responsive Administrator Account Wed, 04 Dec 2013 00:00:00 GMT AbleCommerce: Improved Coupon Administration Page AbleCommerce is a great E-Commerce solution but there are a few areas that need improvement and Coupon administration is one of them. We've created a new version of the /Admin/Marketing/Coupons/Default.aspx page that filters out Used and Expired Coupons by default and lets you search for a particular coupon code quickly and easily. The code is quite simple so rather than try to sell this, we're making it available to everyone for free. Download the code To install the code, first, MAKE A BACKUP of the original files then simply replace Admin/Marketing/Coupons/Default.aspx and Admin/Marketing/Coupons/Default.aspx.cs with the corresponding files in the zip (do not place the files in the root of your install) and run the SQL in the root of the zip to create the Stored Procedure that is used by the code. We welcome suggestions for improvements to the code and would be happy to set it up on CodePlex or GitHub or similar so others can contribute. http://www.efficionconsulting.com/Blog/itemid/662/amid/1500/ablecommerce-improved-coupon-administration-page David O'Leary Thu, 13 Jun 2013 00:00:00 GMT AbleCommerce: Force Separate Shipments for some products One of our clients for which we built an AbleCommerce based E-Commerce site needed the ability to have certain items ship as a completely separate shipment from any other items in the users order, including if the user order multiples of the same item. AbleCommerce doesn't implement this functionality so we had to customize some of the existing functionality... http://www.efficionconsulting.com/Blog/itemid/661/amid/1500/ablecommerce-force-separate-shipments-for-some-products David O'Leary Wed, 05 Dec 2012 00:00:00 GMT Updating CSS with Client Resource Management enabled and without having to "Clear Cache" constantly I really like the idea of the Client Resource Management features added to DotNetNuke in version 6. But, it can make building a new skin or a new site on a live instance of DNN rather painful as any changes you make to the .CSS or .JS files won't be seen unless you clear the site's cache or put the site into DEBUG mode. In theory, all skin development should probably happen on a development instance and the live site should only be updated once the skin updates are complete. But, in practice, we find lots of cases where we do need to be able to make CSS updates to a live instance (though not necessarily a live site) of DNN. You can do this by updating the .css file and then clicking "Clear Cache" in the control panel. But, every time you do that, a new version of the combined files is created and users will need to download the file again. So, it's best to avoid that. What I've found works better is to create a section within your skin and for any changes you want to make, make those changes within that style section. Once you've got all your changes done, migrate them into the .css file and delete the section from the skin, and clear the cache. That method allows us to quickly and painlessly make changes. Also, for experimenting with minor updates, Firebug is a great tool as you can see what your changes will look like and then apply them when you're happy with them. Happy coding! http://www.efficionconsulting.com/Blog/itemid/658/amid/1500/updating-css-with-client-resource-management-enabled-and-without-having-to-clea David O'Leary Tue, 11 Sep 2012 00:00:00 GMT Module Categories - Specifying Which Modules are Common Since the new Ribbon control panel for DotNetNuke has been out, it has seriously bugged me that when you go to add a module, the default module Category is Common and the only module in that category was the HTML module. Because of that, the new Category just made things more confusing. Today, an intern at one of my clients was trying to make a simple change to the home page of their site and added the Configuration Manager module to the home page. This caused the home page to force users to login and due to another issue caused an error for anyone going to the homepage. Bad. Once I got that fixed up, I finally had the needed incentive to dig a bit further into the Module Categories piece to help avoid this in the future. As it turns out, it's quite easy to add modules to the Common category. Just go to Host->Extensions and edit the module you want to add to Common. Then, select Common for the Module Category. That's it. Now that the Common category actually includes the common modules, I really like that feature and hope it will make it much easier (and safer) for our clients to edit their content. For our clients, we're doing this for all sites where clients edit there own content. Generally I include the following modules: Efficion's Articles, HTML, Documents, Links, and Ventrian Gallery. Learn more from this post from Charles Nurse on Module Categories http://www.efficionconsulting.com/Blog/itemid/654/amid/1500/module-categories-specifying-which-modules-are-common David O'Leary Tue, 19 Jun 2012 00:00:00 GMT Facebook blocks links to your site as Abusive or Spammy Facebook is an excellent way to spread the word about any consumer oriented business (restaurants, retail, services, online stores, ...). Whenever we build a consumer oriented site, we do our best to consider the best ways to leverage Facebook and other social media to ensure our clients get the best possible return from their website. One day, one of my clients noticed that when he tried to click on a link to his site through Facebook, the link was blocked with the following message: The link you are trying to visit has been reported as abusive by Facebook users. To learn more about staying safe on the internet, visit Facebook's Security Page. Please also read the Wikipedia articles on malware and phishing . It took us quite a bit of digging to figure out how to best address this and so I'm hoping I can make this process easier for others...  http://www.efficionconsulting.com/Blog/itemid/653/amid/1500/facebook-blocks-links-to-your-site-as-abusive-or-spammy Administrator Account Fri, 13 Apr 2012 00:00:00 GMT Setting up SmarterStats against a multi-portal DotNetNuke installation We use Google Analytics extensively for tracking and analyzing website statistics. It does a great job of providing really useful information in a way that anyone can understand. Plus, its very easy to setup and has the power to let advanced users segment and drill down through the data to get even more detailed information. But, we've found it's a good idea to get another view of your visitors and traffic using a tool that provides information based on Log Analysis. Log based analytics let your see things that simply can't be tracked by script-based analyzers like Google Analytics. As a big fan of SmarterMail , we decided to give SmarterStats a try. We've been using SmarterStats for awhile on several of our bigger sites but we also wanted to be able to use it on a few of our portals where we have multiple sites installed on a single instance of DotNetNuke. Before we could do this, we needed to do several things first to get this to work right... http://www.efficionconsulting.com/Blog/itemid/651/amid/1500/setting-up-smarterstats-against-a-multi-portal-dotnetnuke-installation David O'Leary Fri, 25 Mar 2011 00:00:00 GMT Giving your IIS Worker processes a proper identity As part of hosting of DotNetNuke sites , I often take a look at the processor and memory usage of the various processes running on our servers using Task Manager. Prior to recent changes though, I didn't really have any way to really know which of my sites was really having the biggest impact as all I could really see was a list of the worker processes (w3wp.exe) associated with the app pools. The UserName for each w3wp.exe process was Network Service. I did notice that one of the worker processes, averaged around 14% of the overall utilization while most of them averaged 0% percent with an occasional bump up to 1% or 2%. I figured this must have been one of the busier sites we hosted. I was wrong... http://www.efficionconsulting.com/Blog/itemid/650/amid/1500/giving-your-iis-worker-processes-a-proper-identity David O'Leary Wed, 23 Mar 2011 00:00:00 GMT E-Commerce Discussion Points Far too often, clients and developers vastly underestimate the complexity involved for their simple online store or E-Commerce project. It might seem basic: show some products/services, add them to a cart, make payment, & ship... The reality however is often much more involved. Options, discounts, gifts, shipping options, referrals, and more combine together in a way that the complexity can quickly grow exponentially. With this complexity, custom-built solutions or online stores built by individuals prove inadequate or get so convoluted as features are added they become impossible to administer, maintain, and update. Sometimes a few PayPal buttons or a basic shopping cart will meet your needs. But usually, you really need a really well-architected solution that has an active and strong development team behind it, a nice array of features, and an extensible architecture that will allow it to grow to meet the needs of the customer. Fortunately, the are some really great open-source E-Commerce solutions( Magento and NOPCommerce are two of our favorites) and affordable commercial E-Commerce offerings ( AbleCommerce is our current favorite) available. The key, is making sure that early in the process, you are properly anticipating the current and future needs of the client. This article lays out the list of que http://www.efficionconsulting.com/Blog/itemid/649/amid/1500/e-commerce-discussion-points Eric Berger Thu, 10 Feb 2011 00:00:00 GMT Styling the DotNetNuke Form and List module The are lots of very powerful forms modules available for DotNetNuke, but many of them seem like overkill for what we are usually looking for. The Form and List module often meets our functional needs when we are looking for a simple form module but in the past, I was disappointed with the look of the forms it produced. The Form and List team, (mostly Stefan Cullmann ), has done a nice job of adding features to improve the styling options. In particular, I like the ability to use CSS and Separators/Fieldsets for form layout. Stefan wrote a brief blog showing how he styled the Feedback Form on the formandlist.com site . We used that as our starting point for a membership form we created and found we needed some additional tweaking to get the form looking just right... http://www.efficionconsulting.com/Blog/itemid/647/amid/1500/styling-the-dotnetnuke-form-and-list-module David O'Leary Wed, 05 Jan 2011 00:00:00 GMT DotNetNuke: Improving the tracking and reporting of Ad Views and Clicks - Part I This is the first in what we plan on being a 3 part series on improving the tracking and reporting of Ad viewership and clickthroughs within DNN. Overall, DotNetNuke'sBanner / Ad / Vendor implementation is a nice solution. It does a great job of serving up the appropriate ads based on a nice variety of options. But there's been very little change to the implementation over the last few years and we've found some areas of needed improvement. Efficion is hoping to contribute new features and improvements to these modules based on work we've done to bring it up to the next level. One of the biggest weaknesses we found was it's reporting capabilities. It's easy enough for us to create reports for our clients (we'll be covering that in Part II of this series) but in this case, we didn't have the data we needed. Our client wanted to be able to provided statistics on the views and clicks of their ads for a given time period (i.e. September 2010). The problem is, DNN only stores the total number of clicks and views for a given ad. There's no associated time period with those numbers. So, we need to start storing clicks and views in a way that is time oriented. After some thought on this we decided that we should really accumulate the numbers on daily basis for each ad. Daily seems to be the standard in the analytics world and provides enough granularity to get the time frame you want while also not collecting data at too granular a level. Daily totals will make it easy to create reports that show totals for a given period or to create trend charts for a particular ad or all ads over a given time period. http://www.efficionconsulting.com/Blog/itemid/645/amid/1500/dotnetnuke-improving-the-tracking-and-reporting-of-ad-views-and-clicks-part-i David O'Leary Sat, 09 Oct 2010 00:00:00 GMT SQL Function to Parse First Name from Full Name Ever needed to get a users first name out of a SQL table or field where only the full name was collected? We've create a SQL Function that does a pretty good job of this. This is partially based on a script provided by JosephStyons in this thread on Stack Overflow . Joseph's script parses the name into Title, First, Middle, and Last. For my purposes, I only needed the first name and so was able to simplify the script and breaking it out into a function makes it easy for us to reuse in a variety of places. http://www.efficionconsulting.com/Blog/itemid/643/amid/1500/sql-function-to-parse-first-name-from-full-name David O'Leary Wed, 29 Sep 2010 00:00:00 GMT Tableless Banners in DotNetNuke We've been working on our first site that really makes heavy use of DotNetNuke's Banners module for displaying revenue generating ads. Today I was trying to get the banners module to work for a Newsletter piece (more on that later) of the site that has a very tight layout but the way Banners is implemented didn't allow me to do what I needed. Currently, the banners module renders banners in a table and the only way to add spacing between banners is by setting cellpadding and/or cellspacing. We needed a solution where we could ad space between the banners without adding space on the sides of the banners. This wasn't possible with the current implemenation (other than by adding whitespace to the banner images which we didn't feel was a good solution) so we needed another solution. I could have gone in and made a couple quick changes to the banners module to get it to do what I needed but then, we would've have had to reapply the changes every time we upgraded the site. Instead, I spent about 10 minutes creating a new module based on the existing banners module. Luckily, DNN makes this easy. The change to the code is the easy part (though really it was all very easy). I just changed the RepeatLayout attribute for the DataList to "Flow" instead of the default "Table" and then added a class to the label within which the banner is implemented. The more involved process was copying and renaming the files and class. In all though, it took less then 10 minutes to think up and implement this solution. http://www.efficionconsulting.com/Blog/itemid/634/amid/1500/tableless-banners-in-dotnetnuke David O'Leary Wed, 09 Jun 2010 00:00:00 GMT Cleaning and Re-Indexing your DotNetNuke Search Tables Last week, we put a lot of effort into improvements to the search and RSS aspects of Efficion's Articles module. As part of that, we noticed that no matter how many times you hit the Re-Index content link on the Host->Search Admin page, the links never actually get updated. As we dug further, it became clear that to update the links used by DNN's search and RSS, you actually have to purge the search tables. This has implications beyond our module so I thought I'd share the steps as a good practice to do every once in awhile on your DNN site to make sure you Search Results and RSS Feeds are linking properly. http://www.efficionconsulting.com/Blog/itemid/633/amid/1500/cleaning-and-re-indexing-your-dotnetnuke-search-tables David O'Leary Wed, 28 Apr 2010 00:00:00 GMT DotNetNuke: Improving Paste From Word in the fckEditor As most HTML aware folks know that when you paste content from Microsoft Word or Outlook for use as HTML, it includes all sorts of gobbledygook that clutters up your markup and overrides your CSS. Luckily, the fckEditor has a couple ways to handle this. If you're pasting from Word into the editor using IE, it pops up a dialog that gives you a chance to clean up the markup which is nice. If you're using Firefox you can achieve the same results by clicking on the special Paste from Word icon. But, there's an issue... http://www.efficionconsulting.com/Blog/itemid/630/amid/1500/dotnetnuke-improving-paste-from-word-in-the-fckeditor David O'Leary Fri, 09 Apr 2010 00:00:00 GMT DotNetNuke: Custom Module Permissions One of the under-utilized features in the DotNetNuke module development API is the ability to utilize DotNetNuke's built in Permissions architecture within your own custom modules. Rather than having to write your own code to display a grid of available roles and special permissions, it's fairly easy to add your permissions to the existing permissions grid that usually just displays "View" and "Edit". I found a nice article that gives a very good overview on how to do this Extending DotNetNuke Module Permissions for Custom Modules http://www.efficionconsulting.com/Blog/itemid/601/amid/1500/dotnetnuke-custom-module-permissions David O'Leary Sat, 25 Jul 2009 00:00:00 GMT DotNetNuke: Hiding and Showing Checkbox with asp.net and Javascript As I build out the settings for DotNetNuke modules, I only like to display settings that are relevant to the other selections the user has made. The best way to do this is with Javascript so users don't have to wait for a postback everytime they change a relevant control. In trying to put these things in place, I often find the code often doesn't work quite the way I expect (or at least used to expect) it to. The issue usually has to do with the way asp.net renders controls. I usually find I have to dig into the source view a bit to see exactly how asp.net rendered something and then fiddle a bit to get everything working right. Here, I'll describe, one particular case where I had two checkboxes linked. The 2nd checkbox should only be displayed when the first checkbox is checked... http://www.efficionconsulting.com/Blog/itemid/600/amid/1500/dotnetnuke-hiding-and-showing-checkbox-with-aspnet-and-javascript David O'Leary Fri, 24 Jul 2009 00:00:00 GMT DotNetNuke and MySQL A question that I see a lot of is, "Can DotNetNuke run on top of MySQL?" The short answer: while It is possible, it is a terrible idea . The same answer is also true for Oracle. But that doesn't mean you can't write DotNetNuke modules that consume data from MySQL, Oracle, or any external data source. The Long Answer While DNN does provide a data abstraction layer so that it can, in theory, be run on top of any modern DBMS, the reality is DNN is a very large and complicated system that relies heavily on SQL Server specific Stored Procedures. The SQL used for DotNetNuke is chock full of Stored Procedures. The Stored Procedures improve the performance and security of the system. A few intrepid souls have attempted to create and maintain MySQL providers but, with the availability of cheap hosting and free versions of SQL Server, there simply isn't enough need for that in order to make it worthwhile and those providers are long out of date. Even if someone does manage get the latest version of DNN's core running against MySQL, it's still a bad idea because you would lose the key thing that makes DNN special, Modules . You would need to ensure that every module you ever want to use has a MySQL provider and that that provider would continue to be updated throughout the life of the module. Or, you would have to create a MySQL provider for every module that you want to use. The cost of doing this would far exceed the cost of using a hosting company that would provide you a shared SQL Server on which you can run DNN. But don't lose hope... http://www.efficionconsulting.com/Blog/itemid/588/amid/1500/dotnetnuke-and-mysql David O'Leary Mon, 27 Apr 2009 00:00:00 GMT