Upgrade Your Drupal Skills

We trained 1,000+ Drupal Developers over the last decade.

See Advanced Courses NAH, I know Enough

Ways to shoot yourself in the foot: Custom module and theme names

I was writing an extremely simple custom module (for a D6 site) to make use of hook_block. Every time I enabled the module the blocks no longer displayed on the pages. Since it had been a long time since I had done any work in D6, I figured there must be something I was overlooking in how I wrote the function. If I disabled the module (or even just commented out the hook_block) function then the blocks reappeared. So, I spent a fair amount of time looking over how I had written the hook. But, I couldn't see anything wrong with it.

Next, I tried the usual fix-all of clearing cache. In fact, I cleared it two times in a row just to be sure. I also looked for any entries in error logs, including the watchdog file and the server error logs, and didn't find anything.

In the process of testing, I re-enabled the module and uncommented the function and things seemed to just start working again. I thought to myself, "Must be gremlins in the server." (Actually, I typed it out in the IRC channel.) But, the site was apparently working again, so I went on my way. Naturally, the problem cropped up again.

Since it seemed to be a sporadic error, I thought that it must be related to something with the server setup. So, I tested whether increasing the memory_limit or max_execution_time had any effect to no avail. Out of desperation I thought about just changing the name of the custom module, and a light finally went on! I realized that I had named the custom module the same thing as the custom theme. So, the situation was that I had /sites/mysite/themes/mycustomname/mycustomname.info as well as /sites/all/modules/custom/mycustomname/mycustomname.info and /sites/all/modules/custom/mycustomname/mycustomname.module. This lead to the function being named function mycustomname_block($op = 'list', $delta = 0, $edit = array()).

Once I renamed the module everything worked just as expected. I haven't investigated where in the process things broke between the module and the theme layer. The theme is a sub-theme of Omega and there is an empty preprocess-block.inc file in the /sites/all/themes/omega/preprocess directory. But, there is no implementation of hook_preprocess_block in the template.php for the custom theme or the base theme.

So, the moral of the story is: Whenever you are working on a site make sure that your theme names and your module names are distinct.

Author: 
Original Post: 

About Drupal Sun

Drupal Sun is an Evolving Web project. It allows you to:

  • Do full-text search on all the articles in Drupal Planet (thanks to Apache Solr)
  • Facet based on tags, author, or feed
  • Flip through articles quickly (with j/k or arrow keys) to find what you're interested in
  • View the entire article text inline, or in the context of the site where it was created

See the blog post at Evolving Web

Evolving Web