Scrivere Modulo Drupal

Ultimamente mi sono concentrato molto su Drupal, soprattutto per la sua flessibilità e modularità.
La possibilità di scrivere un modulo, che aggiunge funzioni, senza andare a toccare il core del resto del cms è veramente molto utile e produttivo.

Ecco un esempio di primo modulo che chiameremo nodelist:
Creiamo un file nodelist.info che contiene le informazioni del modulo.

; $Id: nodelist.info Exp $<br /> name = Nodelist<br /> description = visualizza list nodi<br /> package = node<br /> version = VERSION<br /> core = 6.x

; Information added by drupal.org packaging script on 2008-08-14<br /> version = "6.4"<br /> project = "drupal"

Creare il file nodelist.module in cui scriveremo il modulo vero e proprio.

Per fare ciò utilizziamo i famosi Hook di Drupal.
Le varie function per convenzione si chiameranno nodelist_[hook].

`
/**

  • Display help and module information
  • @param path which path of the site we’re displaying help
  • @param arg array that holds the current path as would be returned from arg() function
  • @return help text for the path
    */
    function nodelist_help($path, $arg) {
    $output = ‘’;
    switch ($path) {
    case “admin/help#nodelist”:
    $output = ‘<p>‘.t(“Displays links to nodes “) .’</p>’;
    break;
    }
    return $output;
    }
    /**
  • Valid permissions for this module
  • @return array An array of valid permissions for the mailing module
    */
    function nodelist_perm() {
    return array(‘access nodelist content’);
    } // function nodelist_perm()
    /**
    *
  • @return
    */
    function nodelist_block($op=’list’, $delta=0) {
    // listing of blocks, such as on the admin/block page
    if ($op == “list”) {
    $block[0][“info”] = t(“node List”);
    return $block;
    } else if ($op == ‘view’) {
    // our block content
    // content variable that will be returned for display
    $block_content = ‘’;
    $result = db_query(“SELECT nid, title, created FROM {node} “);
    while ($links = db_fetch_object($result)) {
    $block_content .= l($links->title, ‘node/’.$links->nid) . ‘
    ’;
    }
    // check to see if there was any content before setting up the block
    if ($block_content == ‘’) {
    // no content from a week ago, return nothing.
    return;
    }
    // set up the block
    $block[‘subject’] = ‘node’;
    $block[‘content’] = $block_content;
    return $block;
    }
    }
    `

Con questi file dentro la cartella nodelist e caricata nella cartella modules vi troverete la possibilità di abilitare il nuovo modulo.
Abilitandolo avrete il nuovo blocco a disposizione.