Skip to main content

You are here

Including Site-Specific Files and Code in a Drupal Site

With every site we develop, we include a custom module directory, sites/all/modules/mysite. In this directory we place all of the custom style sheets, javascript files and php code specific to our site at mysite.com.

First we create a file, mysite.info:

name = mysite
description = Various functions and files required by mysite.com
core = 7.x
package = Other
; Uncomment and expand the following lines as required.
;
; Files containing classes
;files[] = mysite.inc
;
;stylesheets[all][] = mysite.css
;scripts[] = mysite.js

Any special stylesheets or javascript files are placed in the modules/mysite directory, and references with the appropriate directive are put in the modules/mysite/mysite.info file. This allows the files to be aggregated and cached on a production site, improving performance, and it means that the modifications are not overwritten when the core, a theme or a module is upgraded. Any scripts or stylesheets defined in the .info file will be loaded by hook_init() and will be aggregated and included on every page. More information is available on the Drupal site here.

We also create a file, mysite.module, containing any site-specific php code which might be necessary. The most common function in this module is mysite_cron(), which implements any special maintenance tasks necessary for the site to function. Even if you do not have any site-specific functions, place an empty mysite.module file in the modules/mysite directory so your module can be activated under admin/modules.

<?php
/*
* mysite.module
*
* Add any site specific tasks and hook implementations below.
*/
?>

The sky is the limit here, but the intent of this method is to create a repository of all those little odds and ends you include in any site development.

If you are developing a major function for your site, you are advised to do it in its own module, and perhaps put it up on the Drupal site, as others may have an interest in it. That way you have the whole community testing, coding, proposing upgrades, etc.

Comments

It should be noted that the cascading stylesheets defined in the modules are loaded at the beginning of page generation. Any general style changes may be overwritten by the theme stylesheets. If you are trying to override a theme default, place them in a mysite.css file in the theme directory and add a directive to theme.info as follows:

...
stylesheets[all][] = style.css
stylesheets[all][] = mysite.css ;custom styles to override theme defaults, must be last in list
...

Placing your mysite.css as the last style sheet in the list ensures that it is loaded last. This way your style changes are not overwritten if you upgrade the theme. You will, however, have to recreate the directive in the new theme.info file.

Link to this page

To refer others to this page copy the following link code and paste it into your page, blog, text or email.

Premium Drupal Themes by Adaptivethemes