Créer un module pour drupal 7

Cf https://www.drupal.org/developing/modules/7

création dossier et 1er fichier

Important: nom module (apparait partout ds système) court, en minuscules et avec _. Ex: current_posts

Créer dossier sites/all/modules/current_posts Le code PHP doit etre dans le fichier current_posts.module

Créer fichier .info (le taxoh.doc est un .zip qui regroupe un ex)
enlightenedCf sur le web Writing .info files + Doc syntaxe .info pour modules: http://bit.ly/U0SuhH ; pour themes: http://bit.ly/Tol9P7
package = "Taxonomy" -> créer/intègre une sous-rubrique dans admin/modules

Il devrait apparaitre dans admin/modules.

Penser à commenter, See Doxygen and comment formatting conventions

hook_help

Le 1er hook doit etre hook_help (help dans la page des modules). Pour implémenter un hook, remplacer hook (dans le nom du module) par le nom court de son module, et créer dans .module une fonction de meme nom.
ex (source https://www.drupal.org/node/1095546): <?php
/**
 * Implements hook_help().
 *
 * Displays help and module information.
 *
 * @param path
 *   Which path of the site we're using to display help
 * @param arg
 *   Array that holds the current path as returned from arg() function
 */

function current_posts_help($path, $arg) {
  switch ($path) {
    case "admin/help#current_posts":
      return '<p>' . t("genere le lien help dans admin/module ce texte apparait dans /admin/help/MONMODULE") . '</p>';
      break;
  }
}
?>

Dans admin/modules, activer le module, et vérifier la précence du lien aide. Désactiver le module.

Déclarer le bloc (hook_block_info())

Il y a plus de 8 hooks de blocs. Ici on en voit 2: hook_block_info() qui indique à drupal quels blocs notre module va créer.

Dans current_posts.module ajouter
function current_posts_block_info() {
  $blocks['current_posts'] = array(
    // The name that will appear in the block list.
    'info' => t('Current posts'),
    // Default setting.
    'cache' => DRUPAL_CACHE_PER_ROLE,
  );
  return $blocks;
}

Drupal utilise massivement les tableaux associatifs.  See hook_block_info

Activer le module, aller vérifier que le bloc apparait. Désactiver le module.

db_select() dans current_posts_contents

Source: https://www.drupal.org/node/1104482

dans current_posts.module notes
<?php
/**
 * Custom content function.
 *
 * Set beginning and end dates, retrieve posts from database
 * saved in that time period.
 *
 * @return
 *   A result set of the targeted posts.
 */
retourne des posts
function current_posts_contents(){
  //Get today's date.
  $today = getdate();
  //Calculate the date a week ago midnight.
  $start_time = mktime(0, 0, 0,$today['mon'],($today['mday'] - 7), $today['year']);
  //Get all posts from one week ago to the present.
  $end_time = time();
  //Use Database API to retrieve current posts.
  $query = db_select('node', 'n')
    ->fields('n', array('nid', 'title', 'created'))
    ->condition('status', 1) //Published.
    ->condition('created', array($start_time, $end_time), 'BETWEEN')
    ->orderBy('created', 'DESC') //Most recent first.
    ->execute();
  return $query;
}
?>

on calcule la date de la semaine dernière
cf http://www.php.net/manual/en/function.mktime.php

méthode db_select(nom_table, alias)

méthode fields

méthode condition a 3 arg, (champ, valeur, operateur)
Sans op c'est =

execute compile et lance la requete, retourne un object en résultat

hook_block_view(), user_access(), l() et theme()

<?php
/**
 * Implements hook_block_view().
 *
 * Prepares the contents of the block.
 */

function current_posts_block_view($delta = '') {
  switch ($delta) {
    case 'current_posts':
      $block['subject'] = t('Current posts');
      if (user_access('access content')) {
        // Use our custom function to retrieve data.
        $result = current_posts_contents();
        // Array to contain items for the block to render.
        $items = array();
        // Iterate over the resultset and format as links.
        foreach ($result as $node) {
          $items[] = array(
            'data' => l($node->title, 'node/' . $node->nid),
          );
        }
       // No content in the last week.
        if (empty($items)) {
          $block['content'] = t('No posts available.');
        }
        else {
          // Pass data through theme function.
          $block['content'] = theme('item_list', array(
            'items' => $items));
        }
      }
    return $block;
  }
}
?>

hook_block_view retourne 2 valeurs: subject (titre du bloc) et content.
$delta indique à le fonction quel bloc est demandé

access content est le plus simple. Pour trouver le nom-systeme d'une perm, aller à admin/people
ou ch par ex "node_permission" dans ref api

$result on sauve dans cette var. $items est pour stocker les données traitées, formatées en tant que liens (fonction l(texte,path)).

theme (theme hook, contenu à thémer)

 

 

admin/config/development/performance effacer le cache

Doc tek: 
AttachmentSize
Microsoft Office document icon taxoh.doc2.04 KB