Managing Drupal Views, the proper way


One of the most powerful and most useful modules on Drupal is Views. With one screen you can build custom pages & blocks based around your content, select the exact fields you need, add filters and arguments, and relatively easily customize the display, and that's just scratching the surface. In fact, Views is so flexible that I've built sites which have 90% of their architecture based solely around taxonomies and Views.

The main trick to making using Views manageable is to save them out as files and load them through a module. It sounds really easy, and it is really, but there's a few steps to it.

The first step is to have a per-site module specially for holding these kinds of things, a general bucket for your random chaos.


The second step is to go to each View in turn and export it to a file in your new module's directory. To do that, go to your site's Views list page and for each of the custom ones you've built or modified, click the Export link next to it to bring you to a page with the view's code listed out:


What you need to do next is save this text out to a file. By default all of the text is selected, but you're not ready for that yet. You first need to create the file to store the text. I like to use the following filename structure:


This both groups all views together and makes them easy to identify at a quick glance. Going by this, the above view would be saved with the filename:

Now, just copy all of the code from the Export page into the newly created file. Simple, huh? Well, there's a little gotcha - you need to add "<?php" to the top of the file otherwise the next steps won't work right, e.g.:


Well, we're not done yet, we still have to tell the site that there are views in this new module. This involves two further steps..

The first part is to tell the system that this module uses the Views API by adding some lines to your module:


The last part is to load the views into the system. To do this you must add another file to your module directory named:


Then add the following to the file:


And now you're done!

Well, almost. Your site is still going to load the view that's already in your database rather than the one in your module. To fix this just go back to the main Views list page, find the view you just exported and click the "Revert" link to revert it from the database-stored version to what was in your file; don't be afraid when it says "Are you sure you want to revert the view?" because yes, that's what you want to do. So do it.

And now you really are done. Enjoy. And make sure you save it into your site's SVN server promptly.

Learning Exercise:

To make more of this, and to test your PHP skills, try changing funkychicken_views_default_views() to automatically load all files named 'view.[something].inc' instead of having to manually list each one.

Make a special module for each Drupal site


One thing I've learned from my Drupal development time is that every site should have a new module created for it to house all of the small custom functions and things you'll use. Common things I've added to these per-site modules include:

  • Default views (more on those later),
  • Odd string modifications, e.g. shortening a node summary to fit a certain amount of space,
  • Hacks to modify forms in unusual ways, e.g. pre-assign taxonomy terms to simplify the editorial process,

I've found it much easier to manage these in one single module than e.g. hacking blocks with funky PHP code, etc, and you also gain the benefit of having it all in code, so you can track changes in a code versioning system like svn or git.

Bonus Tip

One final tidbit on this is to create a module "package" for all of the modules you create, i.e. add the following line to your file:

package = My Stuff

Now when you view the module admin page they'll all be grouped together, making them easier to find.

Testing out BlogPress

As part of a forthcoming longer post, I'm trying out the iPhone app Blogpress. So far I find it to be quite limited and I don't anticipate using the current version much.

-- Post From My iPhone

I'm on the radio!


This week Ryan Price of, friend of a few years and all-round awesome guy, invited me to join him and Mike Anello, who's also awesome, on their bi-weekly podcast - what an honor! We chatted for about 35 minutes about lots of things Drupal-related included the new Panels 3 beta, scaling, and the site I recently launched for work,

It was my first time ever on a podcast and was lots of fun. Unfortunately I had to rush off at the end for a legal matter (car accident from last year) so the discussion got cut off a little too quickly and I didn't get a chance to explain much of how Drupal was able to make the site development easier than had I used other tools, so expect some related blog posts soon.

Thanks for having me on the show, Ryan & Mike!


Subscribe to Front page feed