⭐ If you would like to buy me a coffee, well thank you very much that is mega kind! : https://www.buymeacoffee.com/honeyvig Hire a web Developer and Designer to upgrade and boost your online presence with cutting edge Technologies
Showing posts with label Joomla. Show all posts
Showing posts with label Joomla. Show all posts

Friday, January 11, 2013

Login to Joomla Administrator Not Working and No Error Is Displayed

Login to Joomla Administrator Not Working and No Error Is Displayed

 

Yesterday we had a client that told us that he was unable to login to his Joomla website. He told us that everytime he tries to login, he gets redirected back to the login page with no error! Since he was a technical person, he told us that he did a research on the subject and the thinks that it’s the session.savepath Joomla problem. This made sense because Joomla uses the built-in PHP $_SESSION superglobal variable to maintain information about the logged in person and if it can’t save that information to the session, then it won’t be able to login the person.

So, the first thing we tried to do was to check whether sessions were actually working on the site, and they were (we set a session variable in one page and we retrieved in another page) – so that takes care of our client’s theory of why the problem is happening.

Our second attempt was to check the ACL (Access Control List) of the website as this problem is often associated with incorrect ACL. So we logged in to phpMyAdmin, we selected the database of his Joomla website, and we checked it and it was all clean: the tables jos_users, jos_usergroups, jos_user_usergroup_map, and jos_viewlevels were all OK. We then checked the specific entries in the table jos_assets that might affect the login process, and all these entries were fine.

We then tried to do things a bit differently, since our customer was a technical person, he made a backup for the website (the backup consisted of the filesystem and the database) before the problem happened and immediately after the problem happened. So, what we did was that we extracted the database from both backups and started comparing the database of the working website with that of the non-working website. There were about 20 differences – all of them were trivial, with the exception of a very small difference in one of the INSERT lines (the difference is in red):

INSERT line in the working version:

INSERT INTO `jos25_extensions` (`extension_id`, `name`, `type`, `element`, `folder`, `client_id`, `enabled`, `access`, `protected`, `manifest_cache`, `params`, `custom_data`, `system_data`, `checked_out`, `checked_out_time`, `ordering`, `state`) VALUES
(432, 'plg_user_joomla', 'plugin', 'joomla', 'user', 0, 1, 1, 0, '{"legacy":false,"name":"plg_user_joomla","type":"plugin","creationDate":"December 2006","author":"Joomla! Project","copyright":"(C) 2005 - 2009 Open Source Matters. All rights reserved.","authorEmail":"admin@joomla.org","authorUrl":"www.joomla.org","version":"2.5.0","description":"PLG_USER_JOOMLA_XML_DESCRIPTION","group":""}', '{"autoregister":"1"}', '', '', 0, '0000-00-00 00:00:00', 2, 0);

INSERT line in the non-working version:

INSERT INTO `jos25_extensions` (`extension_id`, `name`, `type`, `element`, `folder`, `client_id`, `enabled`, `access`, `protected`, `manifest_cache`, `params`, `custom_data`, `system_data`, `checked_out`, `checked_out_time`, `ordering`, `state`) VALUES
(432, 'plg_user_joomla', 'plugin', 'joomla', 'user', 0, 0, 1, 0, '{"legacy":false,"name":"plg_user_joomla","type":"plugin","creationDate":"December 2006","author":"Joomla! Project","copyright":"(C) 2005 - 2009 Open Source Matters. All rights reserved.","authorEmail":"admin@joomla.org","authorUrl":"www.joomla.org","version":"2.5.0","description":"PLG_USER_JOOMLA_XML_DESCRIPTION","group":""}', '{"autoregister":"1"}', '', '', 0, '0000-00-00 00:00:00', 2, 0);

As you can see, there is a “1? in the first line that is a “0? in the first line, and guess what – that was the cause of the whole problem. You see, that little 1 was telling Joomla that the user plugin was enabled and that all user activity should work normally. The 0 in the non-working version was telling Joomla to disable the user plugin, and that’s why logins where not working on the Joomla site and no errors were returned. Changing that value back to 1 fixed the whole problem.

So why did that happen?

We think that there are two reasons of why that happened:

    Someone manually disabled the user plugin on the Joomla website.

    A (badly written) extension mistakenly disabled the userplugin. Our preliminary investigation on this issue leads to believe that this extension might be the userport extension.

If you have the problem where you’re trying to login to your Joomla backend and you’re getting redirected to the login screen, and if this post did not help you (or if it’s a bit too technical for you) then all you need to do is to contact us. We will respond immediately, we will fix your website as soon as we can, and we won’t charge you much!

Tuesday, November 8, 2011

How To Modify A Default Joomla 1.5 Template


Joomla is a popular open-source content management system with a lot of possibilities. One of the strengths of Joomla is the vast number of extensions and templates available, both free and commercial. You can download and install a template in a few simple steps, although some templates are included in the Joomla installation package, and most users start with one of those.
This article takes you through one of the default Joomla 1.5 templates and shows you how to modify it for your website.
Joomla 1.6, which was released earlier this year, has a different way of handling templates. For instance, it introduced the concept of template styles. However, many users are still on Joomla 1.5. Thus, the information in this post will be valid to many Joomla users. Also, the techniques used in this post can be applied to Joomla 1.6 and later versions even if the template structure is somewhat different.


Templates Available In Joomla 1.5

Joomla 1.5 comes with three front-end templates. One of them, Beez, is provided merely as an example of how to build a template (it’s hideous).
The other two, JA Purity and Rhuk Milkyway, are more usable.
The Rhuk Milkyway template includes rounded corners in its design. The template is often used as a framework to demo third-party extensions for Joomla 1.5.
The JA Purity features a couple of color themes and template parameters for adjusting the template’s width, logo type (text or image) and other options.

Tools You’ll Need

For this tutorial, you’ll need the Firefox browser. You’ll also have to download and install the Firebug add-on for Firefox (info on getting started). Firebug integrates with Firefox and puts a wealth of development tools at your fingertips as you browse. You can edit, debug and monitor CSS, HTML and JavaScript live on any Web page, which will be handy when you later implement working code in your Joomla style sheet. Firebug is an invaluable tool for website developers and designers and a must have for this tutorial.
screenshot
You will also need an HTML text editor, Dreamweaver or the like, as well as FTP access to your Joomla files.
Another option is to install the free eXtplorer component for Joomla. This is a file manager that lets you edit and save files directly in the browser.

Pick Your Default Template

In this article, I will use the JA Purity template, which I find is easiest for a beginner to modify.
When you enable the template, it will look something like this:
screenshot
As you can see, some elements here need to be changed. Thankfully, this template is flexible and easy to understand.

Understanding The Template

A Joomla template is made up of several files. The ones we’ll need to consider in this tutorial are:
  • The main index file
    /templates/ja_purity2/index.php
  • The main template file
    /templates/ja_purity2/css/template.css
  • The CSS menu file
    /templates/ja_purity2/css/menu.css
  • The template details file
    /templates/ja_purity2/templateDetails.xml

Work From A Copy

If you want to be able to roll back any changes, make a copy of the template before starting. This way, you can always go back to the original and copy the code there if you mess up. Also, without a copy, you might overwrite your modifications if you use the default folder and at some point upgrade your Joomla installation.
Copy the template folder and give it a new name. For this tutorial, I’ll name the folder ja_purity2.
You now have two copies of the template on your Joomla website. If you go to Extensions → Template manager, you’ll see that both templates are named JA Purity. This is not good because we won’t be able to easily tell which one we’re working with:
screenshot
To name the copied template to something else, you will have to edit the template XML file.
Open the file at /templates/ja_purity2/templateDetails.xml, and change the name. Then save the file.
screenshot
You will see that the copy in the folder ja_purity2 now has the name JA_Purity Modified. Now, select the radio button to the left of your JA_Purity Modified template, and click the “Default” button. This will activate your copy as the template for the website.
screenshot

Choose What To Modify

There are good reasons to modify the default template. You might like the structure but want to give the website a new design. Or you might already have a logo and brand colors or a complete Photoshop mock-up created by you or another designer. Some of you will have to recreate an existing website in Joomla, keeping the design and elements the same.
We’ll go over the elements of the template and how to modify them to create whatever design you like.

Template Overrides

There is a /templates/ja_purity2/html/ folder, where the template overrides are stored. Getting into template overrides in detail is beyond the scope of this article. For more on this, please see my blog post on the subject.
In short, template overrides override the output of Joomla’s core components and modules, without requiring you to hack the core. This allows you to override the output of the content component, which shows the content of the website. When the Joomla core is updated, your overrides are left untouched. If you modify the same files in the core, they might be overridden by a future Joomla update. Template overrides can also be used for installed components and modules.

Module Positions

Every Joomla template has a set of module positions. These are PHP snippets that fetch one or more modules assigned to that position.
We’ll talk more about module positions at the end of this article.

Modify The Template Parameters

The first thing I usually do is look at the template parameters in the Joomla administrator. You can find this by logging into the Joomla admin area. Then go to Extensions → Template manager → JA_Purity.
On the right side you will see a list of parameters. These are unique to the template, because they are added by the developer. The settings made here are saved in the params.ini file in the /templates/ja_purity2/ folder and are picked up by the index.php file when a page loads.
The JA Purity template has a few options. Let’s look at a few of them:
  1. Logo type
    You can use either an image file or text here. The logo image must be saved in the /templates/ja_purity2/ folder and be named logo.png. The default logo has dimensions of 207×80 pixels.
  2. Logo text
    If you choose “Text” as the logo type, this is where you would enter your text.
  3. Slogan
    This is the line of text that appears below the logo.
  4. Horizontal NavigationType
    You have two options here: SuckerFish Menu and JAMoo Menu. Leave it on SuckerFish Menu for now.
  5. Template width
    For some reason, the template defaults to a width of 97%. I don’t think I’ve ever given a website a fluid width, at least not in the last 10 years. ;) Change the setting to “Specified in pixels.”
  6. Specified width
    Here, enter a pixel number, like 980. This will be the width of the template container.
  7. Right modules collapsible function
    Nice as it is, I normally disable this function, which lets the user collapse the right-column modules. I don’t really see this used much.
The remaining parameters can be left as they are for now.
screenshot
The parameters look like this in the params.ini file:
screenshot
So far so good. You have now adjusted everything that you can change without going into the code.
You’ll notice some buttons at the top of the page. As you can see, you have access to the HTML and CSS directly from here. For quick modifications, using this is okay. However, I find these views to be less flexible than using an external editor or FTP access or using the eXtplorer component.
screenshot

Change The Logo

The first thing you’ll want to do is add your own logo to the template.
To change the logo, upload a new image file named logo.png to the /templates/ja_purity2/ folder.
If the logo has the same dimensions as the original, you’re all set. The original logo is 207×80 pixels:
screenshot
If your logo has different dimensions, you’ll need to edit the dimensions of the logo and header in the CSS. In this example, we’re adding a logo with a width of 270 pixels and a height of 120 pixels.
If I had just uploaded the logo to the template image folder with the same name, this is what it would look like:
screenshot
For the logo to appear correctly, I need to adjust the CSS for both the logo itself and the header containing it.
You can use Firebug to inspect the code for the logo and header. Right-click on the header image to bring up the context menu, and select “Inspect element”:
screenshot
The Firebug window will open in your browser, and you’ll see something like this:
screenshot
Using Firebug, you can easily detect where the relevant CSS is located and start experimenting with changes. You can change the CSS in Firebug and see the changes immediately:
screenshot
Here, we’ve disabled the background image for .ja-headermask by clicking the icon (turning it red), and we adjusted the height to 120 pixels. The CSS will auto-complete for you, making it really fast to work with.
When you’re done experimenting with Firebug, you can apply the changes permanently to the template CSS file. This saves a lot of time going back and forth.
To adjust the CSS, we open the /templates/ja_purity2/css/template.css file.
On line 921, we find the following code:
01#ja-headerwrap {
02   background: #333333;
03   color: #CCCCCC;
04   line-height: normal;
05   height: 80px;
06}
07
08#ja-header {
09   position: relative;
10   height: 80px;
11}
In this case, we adjust the height of both #ja-headerwrap and #ja-header to 140 pixels. I want to leave some more space above and below the logo, so I’ve add a padding-top to the #ja-header:
01#ja-headerwrap {
02 background: #333333;
03 color: #CCCCCC;
04 line-height: normal;
05height: 140px;
06}
07
08#ja-header {
09   position: relative;
10   height: 140px;
11   padding-top:10px;
12}
The header now looks like this:
screenshot
You can see that the header is taller but the logo is cropped. The reason is that the logo is contained inside the h1 link tag and set as a background. So, we need to adjust the size of the box that contains it.
Further down in the CSS file, we find this code:
1h1.logo a {
2 width: 208px;
3 display: block;
4 background: url(../http://www.smashingmagazine.com/wp-content/uploads/2010/08/logo.png) no-repeat;
5 height: 80px;
6 position: relative;
7 z-index: 100;
8 }
I’ll change the width to 270 pixels and the height to 120 pixels. Now, the logo looks correct:
screenshot
As you might also have noticed, this is the spot in the CSS file where the path to the logo is stored. So, if your logo is online, this is where you would add the URL. The default image is located in the /templates/ja_purity2/ folder. You can see that the path to the file is relative; the developer has used the …/ format to identify the URL. To identify a folder in the website’s root, write out /http://www.smashingmagazine.com/wp-content/uploads/2010/08/ followed by the image’s file name.
1h1.logo a {
2 width: 270px;
3 display: block;
4 background: url(/http://www.smashingmagazine.com/wp-content/uploads/2010/08/adifferentlogo.png) no-repeat;
5 height: 120px;
6 position: relative;
7 z-index: 100;
8 }

Change Or Remove The Header Images

JA Purity comes with a built-in header image rotator. You can use it with your own images or remove it completely. To use it, create images at a size of 600×80 pixels. Upload the images to the /templates/ja_purity2/header/ folder. The script will read the images from the folder and rotate them, fading each image on both sides.
screenshot
As nice as that is, you can remove the image rotator from the header if you’d like. Open the index.php file in your editor of choice, and locate the following section:
1
2
"ja-headerwrap">
3
"ja-header" class="clearfix" style="background:
4url(templateurl(); ?>/http://www.smashingmagazine.com/wp-content/uploads/2010/08/header/
5getRandomImage(dirname(__FILE__).DS.'http://www.smashingmagazine.com/wp-content/uploads/2010/08/header'); ?>)
6no-repeat top direction == 'rtl') echo 'left'; else echo 'right';?>;">
7
8
"ja-headermask"
The header images are placed using the background style for #ja-header. Also, #ja-headermask acts as a mask to fade the image on both sides. To remove the header images and mask, change the code to this:
1
2
"ja-headerwrap">
3
4
"ja-header" class="clearfix">
Basically, we’re removing the background styling from #ja-header and removing #ja-headermask entirely.

Remove Other Elements

While we’re at it, we might as well remove a few more elements. The template has a tool in the header to change the font size.
screenshot
Comment that out or remove it if you don’t need it:
1
Also, two CSS and XHTML validator buttons are in the footer:
screenshot
You’ll probably want to comment that out or remove the entire section

Change The Header’s Background Color

To change the background color of the header, we just have to change the hex code for the background-color. For this example, I’ve gone with a blue color with the code #3E5E93 (okay, not exactly a design statement, but it shows the point).
1#ja-headerwrap {
2background: #3E5E93;
3color: #CCCCCC;
4line-height: normal;
5height: 140px;
6}
This gives the entire header this blue background color. Of course, you can add a background image to the header if you prefer that. Now, your template looks something like this: screenshot As it is, the background color runs across the entire top of the website. If you hover your cursor over #ja-header in Firebug, you’ll see that the div is highlighted on the page. We can experiment here with a color other than that of #ja-headerwrap. To do this, we change the background color of #ja-headerwrap to transparent. We’ll also change the ja-header background color to the blue. Now, the header looks like this: screenshot Looks a bit odd, right? We’ll have to remove the shadow, which is located below the #ja-headerwrap. This must be done on all four divs that have the shadow background image. You can see how it looks in Firebug: screenshot You’ll see that these backgrounds are entered in two different CSS files: template.css and the file at /templates/ja_purity2/styles/elements/black/style.css (if the black is what you want). To make it easy, add the following code to the bottom of the style.css file (because it loads after the template.css, it will override those styles):
1#ja-containerwrap-fr,
2#ja-containerwrap,
3#ja-containerwrap2 {
4background-image:none !important;
5}
In addition to removing the shadows, I added a bit of padding and some borders around the main container. I also removed the background image here:
1#ja-container2 {
2border-left:1px solid #DDDDDD;
3border-right:1px solid #DDDDDD;
4padding:20px 10px !important;
5
6}
Which gives us this result: screenshot Not a design masterpiece, but definitely better than what we started with. Only your imagination limits you.

Taking It Further

By now you should have a good idea of how to adjust the template CSS and other settings to fit your needs. The above tips are quite basic. You can extend you skill set by learning how to use template overrides, module positions and module chrome, to name a few.
  • Template overrides Code that overrides the default output of a module or component.
  • Module positions PHP snippets that put modules in the template.
  • Module chrome Code that controls the HTML or XHTML output of a module. (Read more on the Joomla website.)
Both template overrides and module chrome are too complicated for this article, but I will show you how to add a module position to the template.

Adding Module Positions

As mentioned, every Joomla template has a number of module positions. You can display the module positions in your template by adding the parameter ?tp=1 after the URL. For example, entering http://www.joomla.org/?tp=1 shows you the module positions on Joomla.org. screenshot Note that this feature can be blocked by adding code to the .htaccess file (so don’t get confused if you try it out on a Joomla website and it doesn’t work). The module positions in Joomla are located in the template’s index.php file. There are basically two kinds of module positions: a regular module position and the component output. The component output (e.g. Joomla articles, third-party component output, etc.) looks like this:
1
The regular module positions look something like this:
1"modules" name="left" style="xhtml" />
The name is the “Position” you choose when assigning your modules to the position. screenshot The style is the module chrome, or style output, applied to the module position. The HTML output of the menu will be the menu items, wrapped by the module chrome.
Using this simple method, you can add as many module positions as you’d like to your template. You could have positions for ads, more positions for the right or left columns (to divide those into more columns) or simply a position for a template that is missing a position exactly where you need it. You can also add positions to contain scripts that you do not want to be displayed on the front end of your website. For instance, I’ve added module positions at the end of the head tag and the beginning and end of the body tag to be able to assign different types of scripts (Google Analytics, CrazyEgg, etc).

Adding The Position To The XML File

To make a new template position appear in the module position drop-down menu in modules, add it to the template XML file. Open the file at /templates/ja_purity2/templateDetails.xml again and look for the section called : screenshot Add another line between and . For instance, if you add the position leftbottom, then add leftbottom to the file. Now, the module position will appear in the modules parameter view: screenshot Actually, you don’t need to add the position to the XML file. Writing the position name into the position field is enough. However, adding it to the XML file is good, too. If no module is assigned to the position, then it will otherwise not appear in the list.

Conclusion

Of course, this is just scratching the surface of what can be done with Joomla templates. To sum up, this is how you would proceed:
  • With Firebug, inspect the element you want to change,
  • Do experimental changes with Firebug to test your adjustments,
  • Apply the CSS to the template style sheet,
  • Check the adjustments in all major browsers.
As always, make these changes on a copy of your original template. Good luck!

Thursday, June 2, 2011

Joomla! Plugins in VirtueMart



Joomla! plugins (mambots) are great! Show a video, play some music, protect an email address, or format that nifty quote. Unfortunately, content plugins don't work by default in VirtueMart 1.0.x. This hack lets you run Joomla! plugins in VirtueMart pages

-------
Note:
The files modified in this tutorial are available for download in the Projects section of this site for those of you who just want the results but are not interested in the details. The modifications are marked with the text, gregdev. All modifications are done with respect to VirtueMart 1.0.9.
------
Calling Joomla! Plugins

There are three main steps required to call a Joomla! plugin:

Get access to the global $_MAMBOTS object.
Load a plugin group (in our case, content plugins).
Trigger an event.

Thus, the code for running some text, say $text_to_process, through the Joomla! content plugins would look like this:



global $_MAMBOTS;
$_MAMBOTS->loadBotGroup( 'content' );
$tmp_row = new stdClass();
$tmp_params = new mosParameters('');
$tmp_row->text = $text_to_process;
$_MAMBOTS->trigger( 'onPrepareContent', array( &$tmp_row, &$tmp_params ), true );
$text_to_process = $tmp_row->text;



So, to make plugins work in VirtueMart pages, we just need to add this code to the VirtueMart files where we'd like the plugins to be called.

NOTE: Be sure to back up the files before making any changes. All the files that you'll need to edit are located in the /administrator/components/com_virtuemart/html directory.


Product Details Pages

To show plugins on your product details pages, you'll need to edit shop.product_details.php. Look for the following line, near the bottom of the file (line 394):



$template = preg_replace("/{vm_lang:([^}]*)}/ie", "\$VM_LANG->\\1", $template);



Right after that line, add the plugin calling code:

global $_MAMBOTS;
$_MAMBOTS->loadBotGroup( 'content' );
$tmp_row = new stdClass();
$tmp_params = new mosParameters('');
$tmp_row->text = $template;
$_MAMBOTS->trigger( 'onPrepareContent', array( &$tmp_row, &$tmp_params ), true );
$template = $tmp_row->text;



Notice that the text we are running the plugins on is contained in the $template variable.

Now just call the plugin from your product description (the long description) in VirtueMart.

Shop Browse Pages

You might also want to run a plugin on the shop browse pages - for example, on a category description or a product's short description. To do this, you'll need to modify shop.browse.php.

Near the top of the file, look for this line (19):

mm_showMyFileName( __FILE__ );



Right after this add just the code that loads the plugins:

global $_MAMBOTS;
$_MAMBOTS->loadBotGroup( 'content' );
$plug_row = new stdClass();
$plug_params = new mosParameters('');



Notice that we're loading the plugin group at the beginning of the file, but not actually triggering the plugins yet. We'll trigger the plugins later on the category descriptions and short product descriptions separately.

Now, to run plugins on category descriptions, look for these two lines (83-84):

echo '

';
echo $desc;



Right between those two lines, add this code to trigger the plugins:

$plug_row->text = $desc;
$_MAMBOTS->trigger( 'onPrepareContent', array( &$plug_row, &$plug_params ), true );
$desc = $plug_row->text;



The variable $desc contains the category description.
Let's also make plugins work for the short product descriptions that appear on the shop browse pages. In the same file, shop.browse.php, look for this line (476):

echo $product_cell;



Right before it, add the following plugin code:

$plug_row->text = $product_cell;
$_MAMBOTS->trigger( 'onPrepareContent', array( &$plug_row, &$plug_params ), true );
$product_cell = $plug_row->text;



The variable $product_cell contains the short product description.

Now just add the appropriate plugin call to a category description or short product description in VirtueMart, and you'll have Joomla! plugins displayed in VirtueMart's shop browse page


Saturday, May 21, 2011

How to Evaluate What CMS to Use

Content Management Systems (CMS) have evolved into more than just publishing content, but managing your workflow as well. CMS’s nowadays allow you to easily conceive, edit, index, and publish content, while giving designers and developers more flexibility in customizing their look and functionality. Although there are many that require advanced skills to operate successfully, this article is going to cover a select few that offer a balance between design, code, and end-user usability.

How to Evaluate What CMS to Use

This article will help you make an informed decision on what CMS is right for you.
Evaluating Content Management Systems

Evaluating content management systems can be an overwhelming task, not because it’s rocket science, but simply because there are tons of them to choose from. However, with a structured approach to your evaluation, things can be much easier and less intimidating. Let’s talk about the things you should look at when deciding what CMS to use; here are eight characteristics that a good CMS should have.
1. Intuitiveness: easy to understand and use

Your CMS should have a GUI (Graphical User Interface) that’s easy on the eyes, doesn’t have overly complicated options, and offers simplicity in its administration interface. A good interface means that tasks pertaining to creating and managing your content will be quicker, saving you a lot of time and increasing your productivity.

You should also look at it from an end user’s perspective: if you’re building a content management system for a client who’s not "technology-savvy" and you choose a solution that requires a Ph. D. in computer science, it’s less likely that they’ll be able to use the system (thus, defeating the whole purpose of a CMS, which is to empower its users).
2. Flexibility and Ease of Customization

Flexibility and Ease of Customization

When taking into consideration a content management system, make sure that you’re not obligated to use their design templates. A large quantity of CMS solutions allows you to customize your own design without major restrictions. If your CMS forces you to choose a fixed and unalterable design template, then you’re stripped of creative license and your website will look like everyone else’s.

CMS’s that offer customizations on templates are Expression Engine, WordPress, and Joomla just to name a few; these content management systems boast and promote their ability to be easily modified.
3. Extensibility via Plugins and Modules

Extensibility via Plugins and Modules

A good CMS will allow you incorporate helpful site features into your site by letting you extend the default configuration with plugins.

Plugins/extensions/modules (their terminology varies between different platforms) make a difference in terms of enhancing your site’s ability to provide your site users with useful options for interfacing with your site.

Look for a CMS with a powerful Application Programming Interface (API) in case you need to write your own extensions. Make sure that the CMS you’re considering already has a huge list of plugins. Though you might not need plugins right away, it’s important that this is available to you, later down the road.
4. No Need for Programming Knowledge

If you’re more "design-oriented" than anything else, make sure you select a CMS where you won’t need to have extensive programming abilities to publish and maintain your site.

There is a wide selection of CMS’s that have WYSIWYG editors, letting you edit content without the need for code. Having to edit text through HTML markup can be time consuming and takes you away from other aspects of your managing and building your site.

Complex sites, however, can require a CMS that will let you type in some code, edit files with extensions such as .php, .css, .html, and make changes without that need for a third-party source code editor.
5. Optimized for Performance and Speed

Taking into consideration the speed your pages load on the browser, and how fast your site can make a connection to a server, is vital. Choosing a CMS that is bulky will drive away visitors rather then bring them in. By visiting examples of live sites, you’ll be able to gauge somewhat how fast pages load.

Keep in mind that you can increase the load time of your site by choosing a good host, and adding plugins that cache/compress/minify feeds, CSS, JS and also caches your database objects. A case study on this subject can be found here.

A simple and free tool that you can use to evaluate page response times of your CMS candidates is YSlow. Install it and head on over to demo sites of your CMS’s to see how well it’s front-end performs.
6. Security

Security

Adequate security for your site is very important and must be in place in order to protect your content. There are CMS’s that allow you to install specific plugins and edit files/permissions in order to increase security levels. Make sure you choose a management system that offers modules to protect the integrity of your site. You can also protect your site by selecting a CMS that allows you to easily assign a different username and password to each user. This will let you view and control what each user has access to.

For WordPress, be sure to read about essential security tips and hacks for WordPress.
7. Documentation and Community Support

Nothing’s more frustrating than trying to figure out how to do something, and not have references online that you can take advantage of. One way to ensure that you won’t be running into this problem is by reading through the documentation of your candidate CMS’s. Also, a quick Google search will tell you how popular and well-documented a content management system is.

The availability (or lack thereof) of support from users of the system can be a deal maker or deal breaker. When users are active and proud of being part of the community, you not only have access to individuals that are more familiar with the system, but also, you can be assured that the project will be developed continually. Nothing’s worse than investing your resources and effort on a dead (or soon to be dead) project.
8. Emphasis on Web Standards and Best Practices

Content Management Systems developed under web standards guidelines and best practices will ensure that you won’t get burned later down the road. When applications are designed with best practices in mind, you can be assured ultimate cross-browser compatibility, lean-and-mean code, and ease of maintenance.

Look for content management systems that promote the use of web standards, and those that put it at the forefront of their development and design philosophy.
Some Key Content Management Systems to Consider

Now that you know the key characteristics of a good content management system, let’s take a look at a handful of major CMS’s that excel in most, if not all, of those areas.
ExpressionEngine

ExpressionEngine

ExpressionEngine (EE) is a flexible CMS for any scope of project. Within a few minutes, you’ll understand how to easily begin creating content. EE’s templating system lets you quickly see instant changes live. EE also has a multi-layered caching system to try and minimize the database usage. In addition, EE lets you embed and run PHP directly within its templates, very similar to WordPress.

ExpressionEngine has various features such as allowing you to have multiple sites with just one installation of their software. Just as we spoke in the above section dealing with connections and load times, EE has a unique template caching, query caching and tag caching keep the site running at a pretty quick pace by storing database queries in memory to reduce database connections when generating web pages.
WordPress

WordPress

WordPress is one of the most popular publishing platforms currently available in the market, and it’s known for being an excellent blogging platform. WordPress is free and open source, and it can be downloaded and installed as many times as you want.

WordPress installations are very quick and easy. It only takes a few minutes for your admin panel to be operational. If coding is not your strong suit, then no worries, WordPress offers its users a WYSIWYG editor (called Visual Editor).
Business Catalyst/Goodbary

Business Catalyst/Goodbary

Business Catalyst/Goodbary (owned by Adobe) is a powerful ecommerce CMS for developers. This content publishing platform has an array of useful features such as email marketing and in-depth site analytics. Business Catalyst gives you an easy way for your business to gain an online presence in no time. GB allows you to easily keep track of a customer’s actions, build and manage a customer database of any size, and sell your products and services online. Business Catalyst integrates well with a lot of popular payment systems such as PayPal, Google Checkout and pre-integrated gateways.
Joomla!

Joomla!

Joomla! is an advanced CMS with excellent function and content management. The installation process is pretty quick and easy. Joomla! is a complete CMS allowing you to build simple to advanced sites. Joomla also has super support for access control protocols like LDAP and OpenID, and can interface with popular and open API’s such as Google APIs.

With Joomla!, you’ll have more then 3,500 extensions at your disposal along with the support of an entire community. With a simple extension, you can add almost any needed functionality to your site.

One downside to Joomla! is that their heavy-artillery list of extensions often require you to purchase them. Hopefully, in the future, they will make their plugins free in order to aid users on a tight budget.
Drupal

Drupal

Drupal, a great open source CMS supported by a very active community, lets users publish content through any time with very little restrictions. Once the installation is finalized, you will discover features such as forums, user blogs, OpenID sign-ons, profiles and more. This CMS was written in PHP/MySQL for ease of customization and has one of the highest-regarded API’s in the open source content management system field.
Cushy CMS

Cushy CMS

Cushy CMS is a hosted and free content management system that’s lightweight, though powerful enough to jumpstart your site in a jiffy. With Cushy CMS, you have to add CSS styles to the sections that you will eventually change or edit. This CMS allows you to access and store content while it uploads this same data to server.

Cushy was built for content editors and designers and so it’s very simple and easy to manage. Being a SaaS, you don’t need to install or self-maintain the CMS.
TYPOlight

TYPOlight

TYPOlight is great for site builders that will be maintaining multiple sites and is an ideal solution for web developers. If you’re thinking about creating a simple or advanced site design with great functionality, then TYPOlight CMS can definitely get the job done for you.
RadiantCMS

RadiantCMS

RadiantCMS is a Ruby on Rails app. Radiant has a very active community for core support and updates. If you are a RoR developer, it’s right up your alley. Radiant has concentrated on making things much more user-friendly for end users and web designers. RadiantCMS also contains an innovative custom tagging language (called Radius) that’s easy to pick up.
SilverStripe

SilverStripe

SilverStripe is an open source application written on top of PHP and was designed with emphasis on flexibility. SilverStripe has many configurable options and is geared towards content-heavy websites.

This CMS was completely built on its own PHP framework, called Saphire. SS offers content version control and great SEO support. All users alike are welcome to customize the administration area for their clients or themselves.

The only downside with SS is that the default templates are garbage; however, that’s nothing a little elbow grease wouldn’t fix.
Textpattern CMS

Textpattern CMS

Textpattern CMS is a very popular system for many designers due to its simplicity.

Textpattern strives to provide great content management that produces quick, easy, and desirable web standards-compliant pages. There is no WYSIWYG editor because Textpattern utilizes textile markup for content generation.

The backend is very easy to use and follow. New users will learn the administration section with super speedy ease.
Alfresco

Alfresco

Alfresco is a JSP enterprise content management solution that’s quick and easy to install. Alfresco lets you drop files into folders and convert those files into interactive web documents. This CMS isn’t as easy to become familiar with when compared to others, however, with a little bit of time investment, you’ll definitely get the hang of it. Alfresco could be targeted more towards the intermediate developer, although its pure functionality allows it to become very usable. The administration GUI is very organized, well maintained, and easy to navigate through.

Got tips on how to evaluate the right CMS? Do you have experiences (good or bad) with the content management systems shown here? Talk to us about it in the comments.