Follow us on Twitter!
Syndicate content
Login - Register - Latests submissions

Development

To let users translate your module strings, you must use the t() function. This allows the Drupal community to create translation files *.po. But this also allows user to tweak some strings to fit their needs, with the String Overrides module.

So everytime your write a sentence or a word in your module, surround your string with the t() function.

This is the bad way:

$foo = "Thank you for your submission";

This is the good way:

$foo = t("Thank you for your submission");

Note that you must always write your module strings in English as this is the default language in Drupal and is used as a base to provide the localization system.

You will need to insert values in your strings:

Don't write:

$points = 3;
$foo = t("You just won $points points");

This is the good way to insert placeholders values:

$points = 3;
$foo = t("You just won !points points", array('!points' => $points));

Check out the resources links to learn more about t() function use.

Note that starting with Drupal 6, you can also make your JavaScript files translatable.

In your code use Drupal.t() function. Example:

greetingMessage = Drupal.t("Your vote has been saved!");

When developping a module, we often use some commonly used PHP functions. As you may not know Drupal provides some overrides for these functions. They are often related to strings, they have the same name as their PHP native equivalent except that they are prefixed with drupal_. Here is a list of PHP functions you should replace with its Drupal equivalent:

  • Replace strlen() with drupal_strlen()
  • Replace strtoupper() with drupal_strtoupper()
  • Replace strtolower() with drupal_strtolower()
  • Replace ucfirst() with drupal_ucfirst()
  • Replace substr() with drupal_substr()
  • Replace eval() with drupal_eval()
  • Replace clone with drupal_clone()

For more on this, you should read includes/unicode.inc and includes/common.inc.

By default Drupal front page lists all nodes promoted to front page. We will often want the front page to display something different (a View, a panel, a node, etc.). To do so:

  • Go to Administer > Site configuration > Site Information
  • Set Default front page to the path of your View, Panel, node or anything.
  • Save your settings

Note that the default value for Default front page is node.

Sometimes, you need to enter email adresses in your content. Good examples are your About page, or even your Contact page. But this the better way to get spammed!

It is strongly recommened to install a module such as SpamSan:

  • Download and activate SpamSan module
  • Go to Site configuration > Input formats

For each of your input format do the following:

  • Click on Edit
  • Check that Hide email addresses is enabled and save
  • Click the Rearrange tab and set Hide email adresses with a super high weight (10 for example)
  • Click Save configuration

All email adresses are now spam protected.

Use full PHP tags

Write:

<?php print $foo; ?>

Don't write:

<? print $foo; ?>

Semicolons
Write:

<?php print $foo; ?>

Don't write:

<?php print $foo ?>

No closing tags
When writing a module or customizing your theme template.php, don't use PHP closing tag ?>.

Notice that at the bottom of the following snippet, there is no PHP closing:

<?php
// Your file starts here
function phptemplate_foo() {
  return $bar;
}
// Your file ends here
// Don't add PHP closing tag

By doing this you prevent PHP interpreter to stop and restart on the next source code file. This mean better performance.

There are some conventions when using contributed modules and/or themes. Most users would want to place them in modules and themes folders.

Don't ever do that! Never place modules or themes in these directories!

Everything added to a fresh Drupal install should go somewhere in the sites directory:

  • Contributed modules (from drupal.org) should go in sites/all/modules/contrib
  • Project custom modules should go in sites/all/modules/custom
  • Contributed themes (from drupal.org) should go in sites/all/themes/contrib
  • Project custom themes should go in sites/all/themes/custom

Note that if you have a multisite environment, you could place somes of the modules/themes:

  • in sites/default/..
  • or sites/example.com/..
  • or sites/anotherdomain.com/..
  • and so on..

... depending on your configuration.

Note that using a contrib and custom directory convention will help you find out which modules are contributed by the drupal community and which you have developped specifically for the website.

This will allow you to update more easily your websites as the only directory you will need to preserve will be sites/*.