I think Display Suite should be in this top ten list, and before Panel if you ask me...
Top Ten Best Drupal 7 Contrib Modules
Over the years I have used hundreds of Drupal contributed modules and have written a lot of my own. However, I thought it appropriate to compile a list of my 10 best Drupal 7 contrib modules that I don't think I could live without.
Criteria for my best drupal 7 modules list
First a little bit on how I selected these modules. I based these selections on modules that I use most often in my daily web development. I still work primarily in Drupal 6, however I have been doing my fair share of Drupal 7 development in the last 4 to 6 months. I only wanted to focus on Drupal 7 modules for this post.
Basically if I had to start a fresh Drupal 7 website today and had no idea what the site was going to be, these are the modules I would install.
Best Drupal 7 Module #1: Views
I would be surprised if you weren't expecting this one. This module is essential in every website I build. It makes displaying lists of content very easy. If you want an image slideshow, a list of blog posts, a list of products, etc., views is the best place to start.
If you have been building websites for a few years, you probably know what it feels like to have to write custom SQL to pull pretty much everything from the database (even for the simple things). Views solves 98% of those problems for you. It is a flexible and dynamic query builder that will help make even relatively inexperienced web developers look like a pro.
Because of the underlying complexity of the module, it has a little bit of a learning curve. It helps if you have some of the underlying SQL knowledge so you can make sense of what some of the advanced functions of the Drupal Views Module are doing in the background.
Best Drupal 7 Module #2: Panels
Panels gives you the ability to create custom pages easily. These custom pages can have multiple regions of content. For example, you may want to create a home page that has a Slideshow on the top, and a two column layout below. You could use Drupal's native block system for this, but I would highly recommend using Panel's instead.
One of the most useful pieces of Panels functionality is the ability to override the default node view for various content types. My Drupal sites tend to end up having quite a few content types by the time I am finished and the Drupal Panels module gives me the ability to easily change how each of those content types looks when viewed.
Best Drupal 7 Module #3: Ctools
Views and Panels both require the Drupal Ctools module as a dependency. It also worked out nicely to round out the top 3 with all merlinofchaos modules. On its own, Ctools does not seem to do a lot. However, it is actually a very powerful framework if you begin developing your own modules. I have used Ctools in the past for developing multi-step forms, modal dialog boxes, and even multi-step forms inside of modal dialog boxes.
Best Drupal 7 Module #4: Token
Tokens are little snippets of text that can be used as replacement patterns. For example, if your website sends out emails and you want to add in the users name, or you want fill in a link path with a node id to provide a helpful link to content, tokens will save the day. It may sound confusing, but many modules have token support and if you build a few sites you will most likely find yourself using them. There is also a fairly easy to implement API for exposing token values for your own Drupal modules.
Best Drupal 7 Module #5: Pathauto
The Pathauto module is a necessity for any website that frequently adds new content. It is also especially important if you have a website that allows users to create content using content types. Pathauto simplifies creating clean and search engine friendly URLS for the various content you add to your site. For example, it can make sure that all your blog posts are posted under "/blog/my-blog-title" (with the my-blog-title being replaced using Tokens). It is critical for creating and maintaining a well designed URL structure on any Drupal 7 website.
Best Drupal 7 Module #6: Webform
If you want to provide easy to fill out forms for the visitors of your site, the Webform module will help you out. The Webform module is great for contact forms, surveys, online employment applications etc.
The Webform module also proves to be very easy to use, even if you are not an experienced website developer. Simply build out the fields on your form, publish it, and you have yourself a working form... about as simple as it gets.
Best Drupal 7 Module #7: Rules
The Drupal Rules module is not something I use on every Drupal website that I build, however, it is such a flexible and powerful tool, I had to include it. Drupal rules will allow you to set up condition actions. If you find yourself saying:
If ________ (this happens)
Then ________ (do this)
Rules can help you build it. You can use Rules in your Drupal website to help you send emails, set messages, redirect to other pages on your site, and much more. If you become an avid user of Rules you may hit the ceiling of what you can do, however if you get to that point you have to start asking yourself if a custom module would be a better fit anyway.
Best Drupal 7 Module #8: Features
If you are building a lot of similar Drupal sites, you may find yourself rebuilding a lot of the same content types, views, and panel pages. Features helps solve those problems by allowing you to export those content types, views, panel pages, and other settings, into a Drupal module. The next time you need that functionality, simply drop in and install your Drupal features module and you will be good to go.
There is an even deeper level of respect for this module when you start talking about development/staging and live/production environments. If you create a content type and view in a development environment, and want to get that synced to the live environment, there is no better way than the Drupal features module. Any site that I build that needs a development environment gets all the content types, views, panel pages, and settings exported into one (or sometimes more than one) features module. This module then gets version controlled and can easily be pushed to the live environment. If you aim to become a serious Drupal developer, you can't live without the feature module.
Best Drupal 7 Module #9: Strongarm
This might not seem like it belongs in the top 10, but if you export as many features as I often do on some of the large sites I work on, this module is needed. I do not install features without installing the Strongarm module in tandem. This modules allows you to export your website configuration variables like your default email address for the website, front page url, and numerous content type options. It was a little overwhelming to me when I first was starting with Drupal, but if you understand a little bit about how Drupal works and how the Drupal variable table functions, you will quickly see how helpful this module can be.
Best Drupal 7 Module #10: Date
This is useful for allowing the easy selections of dates in content types (with a nice date popup). It also integrates nicely with the views module.
Other great modules
There are a ton of other great modules that didn't quite make my top 10. I have listed a handful of them here.
- Drush - I know this isn't actually a module, but its to great a tool to leave out. This makes the task of installing/uninstalling modules and updating your drupal website a breeze. It also has a lot of other handy functions. If you are module developer, you can also write your own drush commands.
- Views Slideshow - Used to make nice looking image slideshows using views. Used on most public facing business sites I develop
- Entity - this is required by a lot of modules so it ends up being installed on most of my Drupal 7 websites
- Entity Reference - for the most part this replaces nodereferences and userreferences from Drupal 6. Helps you link various pieces of content together.
- Libraries - Makes organizing your various libraries of functionality easy (see Jquery UI above for an example).
- Google Analytics - I don't build a Drupal website without adding Google Analytics. This module makes it very simple. What gets measured, gets improved after all.
There are many more that I use often that I neglected to mention, but the list is getting long enough. If you have others that would make your top 10, leave them in the comments.
Modules recommended in the comments
Here are a few modules that were recommended in the comments:
It has been quite awhile since I last tried out Display Suite. From what I remember it is a great modules for doing fairly simple layout changes (it is probably much more advanced now).
I like Panels because of its flexibility and ease of exporting with the features module, however I should probably give Display Suite another try.
Thanks for the comment.
I'm moving on from Panels by means of the Delta and Context modules with Omega theme (my base theme of choice). Far more flexible, less overhead, easier to configure, fully exportable with Features and you don't have to deal with all the cruft in the HTML that is generated by Panels.
There have been a lot of others mentioning using alternatives to Panels such as display suite, context, etc. I have not given the Drupal 7 versions of these modules a good go around yet and plan to do so in the near future. Who knows, maybe I will be convinced of moving away from Panels as well.
Thanks for the post.
I've been using Panels very recently, up until my last project but that will be the last project I use Panels for. I do think it's a great module but I'm finding it can be a little flakey at times and by using the Delta module, particularly with Omega, it's so easy to create an additional custom theme configuration that will let me configure the visible regions, it essentially works like Panels does. But like most things with Drupal, it's just one of many ways to skin a cat!
just want to say wonderfull post
My personal opinion...
If you like to create highly complex layouts with endless options for inserting content, then Panels is great. The problem with Panels is that every time that I ever sat for hours setting them up and configuring, and sorting through the skyscraper of additional divs and debugging because of poor integration, and... I quickly realized that I could have done the same thing in Display Suite in minutes.
I like DS so much that I convert nearly every content-type display to DS, whether it's a 2 col stacked, or just a simple 1 column window.
Give DS another try, Shane... and thanks for all of the great tuts.
I think that It's better to use display suit to change the node's layout, and panels for biggest things.
But with Context, php and css you can make the same thing that with panels, and it'll load faster than panels.
I would agree that you can use Context, php and css to do the same things that panels does, however Panels provides a nice way for people who do not know how to code. There is also some simple caching built into panels that helps speed it up a little bit.
May I ask, what do you do to get your comments listed as 2, 2-1 etc?
I had to do some tricky things with theming the comments by modifying the comment.tpl.php file and the comment-wrapper.tpl.php.
I also had to limit the comment thread depth to one. My blog is still on Drupal 6, so I am not sure exactly how it would work with a Drupal 7 site.
Thanks for the info. Good work!
Super helpful post thanks for sharing. Great for newcomers to Drupal 7 like myself who want to scope out what the more frequently used modules are.
You should not thing what is the more frequently used, you should look what you really need.
Thanks for the good link. However, if you are new to Drupal going to that page can be slightly misleading. For instance, if I was new to Drupal and starting a Drupal 7 site, I might go to that link and think that I needed to install CCK. It certainly has a very large install base of users, but based on the usage statistics very few of those are from Drupal 7 (due to fields being in core now).
Definitely a great reference, but as a comment above says, just because it appears to be the most popular does not mean it is necessarily something you need.
The best bet is to always research and try out new modules to see if it fits your requirements.
Thanks for the comment.
I would have put Drush in the top 10 it is so powerful and easy to use. Drupal wouldn't be the same without it don't you think ?
I wanted to put Drush in the top 5 but since it is not really a "module", I decided against it. I would completely agree that Drupal would not be the same without Drush.
Context is the future.
I would use Panels if a client explicitly required that I use it, but then only after trying to convince them to use something else. In my experience, it's difficult to implement, hard to style, hard to maintain, and nearly impossible to train on.
We might have to agree to disagree on this one. While I agree with you that it is very difficult to train on, I believe it's a function of its complexity.
I have a front end designer that knows very little about coding that can use panels to create (and style) extremely complex layouts.
Do you have modules you prefer to use in place of panels, or do you prefer to just handle it all in the theme?
Thanks for the comment, it is always good to hear the opinions of other developers.
I agree with you ! Panels is a powerful tool, hard to start with but when very useful when the training period is over. In my opinion the big default of panels is the performance. Just like Khalid Baheyeldin pointed it out during multiple DrupalCon conferences it should not be used on high traffic websites.
As I mentioned before a lot of the performance issues can be managed by correctly setting up caching on the Panel pages. This has proven sufficient for me on small to medium sized Drupal sites. You can even add memcached for better caching and performance.
Another thing to consider, a huge part of Panels performance is a result of what you load in those Panels. If you have three highly SQL intensive views loading in one panel, and you do not want to cache the results... there is no way to make that scale on a large website.
If you are building a site where you plan on getting hundreds of thousands of visitors a month. I would agree and say you should probably do so without Panels. However, if your site falls in the small to medium size range, the Drupal Panels module can speed up the development process and make page maintenance easier.
You listed jQuery UI as one of your "other" modules. This module doesn't and probably won't have a D7 release as far as I know. jQuery UI is now included in core.
Must have added that in the list from all the D6 sites I have been working on. It has been removed. Thanks for the catch.
I agree that Display Suite should be in this list. The D7 version is awesome and we use it in every project nowadays.
Webform is great, but stop using it for contact forms. Unless the client actually need to create/customize several contact forms herself. There is no point using webform for a single and mostly static contact form.
Most of the webform powered contact forms I've seen would have been easier to maintain if they were made with hook_form_alter() and hook_mail_alter().
While I agree it would be easy to create a contact form with a simple module, a lot of users do not want to have to create a custom module just to set up a simple contact form.
Also, if you are creating a lot of business websites (as I often do), clients often like to be able to look back at past contact form submissions to see how many people have contacted them from their site. It is a pretty rudimentary metric, but it helps them easily track how many leads/sales the website is producing.
What makes a webform difficult to maintain? In my mind a webform is much easier to maintain than a custom module and it puts the power in the hands of the client if they want to change fields on the form.
Thanks for the comment.
A single feature module, written using well known APIs is, IMHO, easier to maintain than carefully crafted configuration stored in the database.
Webforms are content. They are identified by a serial numeric IDs and not (easily) exportable to code. They are not stored in a version control system (git, subversion, whatever you chose). And if they require custom and dedicated code (additional behavior, complex, layouts, etc.), it will be have untraceable dependencies over your database content, which make it harder to maintain.
Also, if the form need to evolve to meet some requirements beyond what's provided by Webform, it will have to be rewritten using the Form API or the developer in charge of the changes will have to deal with all the webformness. How do you make a webform field label translatable? How to you alter a webform submission before sending the mail? How to add a customized processing when the form is submitted? How do I had collapsible field sets and dependend fields to a webform? etc. All of this is already handled by the Form API but require special care or a dedicated solution with Webform. Off course, Webform provides enough customization hook. But are its features worth a whole new API (to learn by every developer who may have to work on the form), for a single contact form?
For a team with a good understanding of Webforms and its APIs, this may not be an issue. But in a world where (good) Drupal developers are scarce, adding Webform as requirement to maintain a contact form seems overkill to me.
The mentioned use case is interesting and Webform provide a ready to use solution. But there is (was?) a module for that (https://drupal.org/project/contact_save). Which has the advantage of keeping things separated and based on APIs every Drupal developer already (or should) known about.
Thanks for all the great information you have provided here. I am pretty familiar with Webforms hooks because of projects that I have worked on in the past, however like you mentioned not all developers should be expected to have that knowledge (on top of the typical form API knowledge).
I have yet to have a situation in which a contact form has needed to grow outside the capabilities of Webform. Despite not having experienced the situation myself, I can see how it could be a huge burden if that situation did happen.
I also see the issues with exporting/version controlling/etc. Many of the websites I build tend to be smaller and don't have a significant need for a development/staging environment, but having the ability to easily version control the code for the contact form would be nice.
I think some of it comes down to the situation. If it is a small website you are building for a client and they have no need to a development site to test out changes on, then I think the webform option gives them more control. Sometimes this is a good thing, and other times it can be bad. If you are building a site in which you need multiple environments, I think your suggestions should be taken very seriously.
You definitely have me reconsidering my approach... thanks for the information.
- module filter
- adds vertical tabs and a search to the module page. I can't even start developing without this module in place.
- css injector
- i often don't fully design themes for clients, but instead quickly modify core themes via this easy to use in-site interface.
- in conjunction with the the core revision module, it allows you to review the changes made between revisions
I enjoy what you guys tend to be up too. This type of clever work and reporting! Keep up the terrific works guys I've incorporated you guys to my own blogroll.
This is really useful for new comers. Thanks.
Hello, does anyone know how can I see dependent content fields for entity reference module?
Thanks for sharing these amazing Drupal 7 modules.
Greetings, brand new to Drupal. You can and maybe should delete posts 18 to 21. Just posting their spam links.
Drupal sure is confusing to me as a new player. I mean, I can not really even make any content (page or post) with out a module if I wanted it to look different in any way. That has got to be the single hardest part for me as a new user that was only OK in wordpress.
So, I am grabbing many of these listed modules and downloading them and not knowing much about them, how I will use them, and if I will even know what I am using or when I am using them. Argh, so confusing. Can you tell I am in my first hours...
Anyway, thanks for another useful short list for new users.