MÓDULO 7
Ampliar la funcionalidad del gestor de
             contenidos.
        Creación de módulos
MÓDULO 7:
Creación de módulos con Drupal


    Índice:

        1. Introducción

        2. Introducción a PHP

        3. Modulos con Drupal

        4. Principales Hooks
MÓDULO 7:
Creación de módulos con Drupal

  Introducción:

    En este módulo se pretende hacer una
    introducción a la creación de módulos con
    drupal.
    Se presentarán módulos que nos ayuden a la
    hora del desarrollo de nuestros módulos.
    Se presentarán los conceptos básicos de los
    módulos en Drupal.
    Se presentarán los Hooks más utilizados.
MÓDULO 7:
Creación de módulos con Drupal

  Php:

  • Sensibilidad a mayúsculas y minúsculas: variables SI,
  funciones, clases y palabras reservadas NO.
                  echo(“hola”);      Equivalentes
                  Echo(“hola”);
  • Las sentencias se separan con “;”. Sólo opcional antes de
  la etiqueta de cierre de PHP.
  • Los espacios en blanco no importan en php
          Buscar($a, $cadena) ;   Buscar(
                                          $a,
                                          $cadena
                                        );
MÓDULO 7:
Creación de módulos con Drupal

  Php:

  • Comentarios:
      • De una linea: “//” . $x = 17; // La variable x vale 17

     • De varias lineas: “/* */” . /* En este trozo de
                                      código vamos a sumar
                                      dos variable
                                   */
MÓDULO 7:
 Creación de módulos con Drupal

   Php:

• Variables: Comienzan siempre con el símbolo “$”.
• Constantes: define(‘MI_CONSTANTE’, 20);
• Tipos de datos:
    • Escalares: - Boolean: Verdadero o Falso. 1 y 0, TRUE FALSE
                 - Integer: Números enteros. 65, 075(octal) 0x10 (hex)
                 - Float: Decimales 3.14 0.314E1
                 - String: Cadenas. “Una cadena” , ‘ Una cadena’.
    • Compuestos: - Array: array ( key => value)
                        Key: Integer o String,
                        Value: Cualquier valor.
MÓDULO 7:
Creación de módulos con Drupal

  Php:

  …             - Object: class prueba {
                            function acceder_prueba {
                              echo “Hola";
                            }
                          }
                          $var = new prueba;
                          $var->acceder_prueba();
MÓDULO 7:
 Creación de módulos con Drupal

    Php:

    • Sentencia If:    if (expr)
                         sentencia


                           b) <?php                     c) <?php
a) <?php                                                if ($a > $b) {
                           if ($a > $b) {
if ($a > $b) {                                              echo "a es mayor que b";
                             echo "a es mayor que b";
  echo "a es mayor que b";                              } elseif ($a == $b) {
                           } else {
  $b = $a;                                                  echo "a es igual que b";
                             echo "a NO es mayor que
}                                                       } else {
                           b";
?>                                                          echo "a es menor que b";
                           }
                           ?>                           }
                                                        ?>
while (expr) sentencia
      MÓDULO 7:
      Creación de módulos con Drupal

           Php:

            • Sentencia while:             while (expr)
                                            sentencia


                    <?php                $i = 1;
                    $i = 1;              while ($i <= 10):
                    while ($i <= 10) {      echo $i;
                       echo $i++;           $i++;
                    }                    endwhile;
                                         ?>
MÓDULO 7:
Creación de módulos con Drupal

  Php:

  • Sentencia do-while:
   <?php
   $i = 0;
   do {
      echo $i;
   } while ($i > 0);
   ?>
MÓDULO 7:
Creación de módulos con Drupal

  Php:

  • Sentencia for:       for (expr1; expr2; expr3)
                           sentencia

         for ($i = 1; ; $i++) {
           if ($i > 10) {
              break;
           }
           echo $i;
         }
MÓDULO 7:
Creación de módulos con Drupal

  Php:

  • Sentencia foreach:
         foreach (array_expression as $value)
           sentencias
         foreach (array_expression as $key =>
         $value)
           sentencias
MÓDULO 7:
Creación de módulos con Drupal

  Php:
                       <?php
 • Sentencia switch:   if ($i == 0) {            switch ($i) {
                          echo "i es igual a 0"; case 0:
                       } elseif ($i == 1) {          echo "i es igual a
                          echo "i es igual a 1"; 0";
                       } elseif ($i == 2) {          break;
                          echo "i es igual a 2"; case 1:
                       }                             echo "i es igual a
                                                 1";
                                                     break;
                                                   case 2:
                                                     echo "i es igual a
                                                 2";
                                                     break;
                                                 }
                                                 ?>
MÓDULO 7:
Creación de módulos con Drupal


 Funciones:
  •   Los nombres de las fuciones son insensibles a mayúsculas-minúsculas
  •   Un nombre de función válido comienza con una letra o guión bajo, seguido
      de cualquier número de letras, números, o guiones bajos.
  •   <?php
      function nombre_funcion($arg_1, $arg_2, /* ..., */ $arg_n)
      {
        echo "Función de ejemplo.n";
        return $valordevuelto;
      }
      ?>
  •
MÓDULO 7:
Creación de módulos con Drupal


 Funciones: (argumentos)
  •   pasados por referencia:
      o Permite modificar los argumentos pasados a una funcion
      o hay que poner delante del nombre del argumento el signo 'ampersand'
         (&)
      o <?php
         function añadir_algo(&$cadena)
         {
           $cadena .= 'y algo más.';
         }
         $cad = 'Esto es una cadena, ';
         añadir_algo($cad);
         echo $cad; // imprime 'Esto es una cadena, y algo más.'
         ?>
MÓDULO 7:
Creación de módulos con Drupal


 Funciones: (argumentos)
  •   argumentos predeterminados:
  •   <?php
      function hacercafe($tipo = "capuchino")
      {
        return "Hacer una taza de $tipo.n";
      }
      echo hacercafe();
      echo hacercafe(null);
      echo hacercafe("espresso");
      ?>
MÓDULO 7:
Creación de módulos con Drupal


 Funciones: (argumentos)
  •   argumentos de longitud variable

 <?php
 function foo()
 {
    $num_args = func_num_args();
    echo "Número de argumentos: $num_args<br />n";
    if ($num_args >= 2) {
    echo "El segundo argumento es: " . func_get_arg(1) . "<br />n";
    }
 }

 foo (1, 2, 3);
 ?>
MÓDULO 7:
Creación de módulos con Drupal


 Funciones:
 function ordenación_de_burbuja($array){
              $count = count($array); //Cuento los elementos del arreglo
              if ($count <= 0) return false; //Si no hay elementos entonces que
 voy ordenar? retorno falso
              for($i=0; $i<$count; $i++){//Recorro cada uno de los elementos
                    for($j=$i+1; $j<$count; $j++){
                           if ($array[$j] < $array[$i]){//Comparo si hay un elemento
 del arreglo menor que el de la posicion i, si es asi intercambio posiciones
                                        $tmp = $array[$j];
                                        $array[$j] = $array[$i];
                                        $array[$i] = $tmp;
                           }
                    }
             }
 return $array;
 }
MÓDULO 7:
Creación de módulos con Drupal


 Formularios:
  <FORM NAME='mi_formulario' ACTION='procesar.php' METHOD='POST'>
  ........
  </FORM>

  • NAME: el nombre del formulario para luego ser referenciado en el código.
  • ACTION: indica la página de destino a la que se deben mandar los datos del
  formulario.
  • METHOD: indica cómo se deben pasar los parámetros:
       • POST: se mandan como variables “ocultas”.
       • GET: las variables se mandan dentro de la URL de destino.
  • Los valores se recogerán en:
       • Si hemos usado METHOD=GET tendremos un array asociativo
       $_GET[“nombre_var”] para referenciar cada variable del formulario.
       • Si hemos usado METHOD=POST el array será $_POST[“nombre_var”].
MÓDULO 7:
Creación de módulos con Drupal


 Formularios:
  • Etiqueta INPUT para texto corto
       <input type="text" name="nombre">
       <input type="text" name="nombre" value="Perico Palotes">
  • Etiqueta INPUT, modalidad de texto oculto
       <input type="password" name="nombre">
  • Etiqueta TEXTAREA para texto largo
       <textarea name="comentario" rows="10" cols="40"></textarea>
  •Listas de opciones
       <select name="estacion">
       <option value=“P”>Primavera</option>
       <option value=“V”>Verano</option>
       <option value=“O”>Otoño</option>
       <option value=“I”>Invierno</option>
       </select>
MÓDULO 7:
Creación de módulos con Drupal


 Formularios:
  • Botones de radio
       <input type="radio" name="estacion" value="1">Primavera
       <br>
       <input type="radio" name="estacion" value="2">Verano
       <br>
       <input type="radio" name="estacion" value="3">Otoño
       <br>
       <input type="radio" name="estacion" value="4">Invierno
  • Cajas de validación
       <input type="checkbox" name="paella“ value=“YES”>Me gusta la paella
  • Botón de envío de formulario (botón de submit)
       <input type="submit" value="Enviar">
  • Botón de borrado (botón de reset)
       <input type="reset" value="Borrar">
MÓDULO 7:
Creación de módulos con Drupal


 Formularios:
  • Datos ocultos (campos hidden)
      <input type=hidden name="sitio" value="www.terra.es">
MÓDULO 7:
Creación de módulos con Drupal

  Creacion de módulos:

  • A la hora de desarrollar un sitio o una aplicación web,
  aparecen una serie de funcionalidades que no son
  cubiertas por los módulos existentes.
       • No existe un módulo similar :
           • Desarrollar completamente el módulo.
       • Existe un módulo similar.
           • Funcionalidades adicionales a ese módulo a
           base de parches ("patches").
           • Se puede optar por desarrollar un módulo
           nuevo, reutilizando código
MÓDULO 7:
Creación de módulos con Drupal

  Creacion de módulos: Dónde los coloco?
 • Carpeta modules: No es recomendable y sólo debería usarse para los
 módulos que vienen por defecto con Drupal.
 • En la carpeta sites: Aquí hay varias opciones.
      • Carpeta Default (visible para el sitio por defecto de Drupal), en la
      • Carpeta All (visible para todos los sitios en caso de una instalación
      multisite) o lo podemos instalar en la carpeta de un sitio en concreto para
      que sólo sea visible para ese sitio.

 Como norma general los módulos se instalan en                      la   carpeta
 sites/all/modules/nombremodulo.(En caso de no existir              la   carpeta
 modules/nombremodulo , la crearemos).
MÓDULO 7:
Creación de módulos con Drupal

  Creacion de módulos: Qué archivos necesito?
 • nombremodulo.info : que contiene      "metainformación del
 modulo".

 • nombremodulo.module: que contiene el código del módulo.

 • nombremodulo.install (opcional): que contiene parámetros de
 configuración, esquemas de la base de datos, información para
 desinstalación …
MÓDULO 7:
Creación de módulos con Drupal

  Archivo .info
 ; $Id$
     Obligatorios
 name = nombremodulo
 descripcion = Breve descripcion de lo que hace el módulo.
 core = 6.x (version de Drupal con la que es compatible)

      Opcionales
 dependencies[] = nombre del modulo del que depende
 (especifica el nombre del módulo o módulos que son necesarios
 para que nuestro módulo funcione correctamente).
 package = "grupo" .
MÓDULO 7:
Creación de módulos con Drupal

  Sistema de Hooks:

 • El sistema de   módulos de Drupal se basa en el concepto de
 "Hooks".

 • <nombremimodulo>_hook_name(). Ejemplo: hook_block() =>
 nombremimodulo_block()

 • http://api.drupal.org/api/drupal/includes--module.inc/group/hooks/6
MÓDULO 7:
Creación de módulos con Drupal

  Sistema de Hooks:

 • hook_menu()
 • hook_link($type, $object, $teaser = FALSE)
 • hook_perm()
 • hook_block($op = 'list', $delta = 0, $edit = array())
 • hook_form_alter(&$form, &$form_state, $form_id)
 • hook_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL)
MÓDULO 7:
Creación de módulos con Drupal

  Funciones:

 • Forms Api de Drupal
     • drupal_get_form($form_id)
     • system_settings_form($form)
 • variable_get($name, $default)
 • variable_set($name, $value)
 • Database abstraction layer
MÓDULO 7:
Creación de módulos con Drupal

  Módulos:

 • Devel.
 • Drupal for Firebug
 • Coder
MÓDULO 7:
Creación de módulos con Drupal

  RESUMEN:


    En este módulo hemos aprendido a:

    • Usar herramientas que nos ayuden a la creación de
    módulos en drupal.
    • Los “hooks” más habituales a la hora de creación de
    módulos.
    • La utilización de la API de Drupal.

Curso Drupal. Creacion de modulos en Drupal

  • 1.
    MÓDULO 7 Ampliar lafuncionalidad del gestor de contenidos. Creación de módulos
  • 2.
    MÓDULO 7: Creación demódulos con Drupal Índice: 1. Introducción 2. Introducción a PHP 3. Modulos con Drupal 4. Principales Hooks
  • 3.
    MÓDULO 7: Creación demódulos con Drupal Introducción: En este módulo se pretende hacer una introducción a la creación de módulos con drupal. Se presentarán módulos que nos ayuden a la hora del desarrollo de nuestros módulos. Se presentarán los conceptos básicos de los módulos en Drupal. Se presentarán los Hooks más utilizados.
  • 4.
    MÓDULO 7: Creación demódulos con Drupal Php: • Sensibilidad a mayúsculas y minúsculas: variables SI, funciones, clases y palabras reservadas NO. echo(“hola”); Equivalentes Echo(“hola”); • Las sentencias se separan con “;”. Sólo opcional antes de la etiqueta de cierre de PHP. • Los espacios en blanco no importan en php Buscar($a, $cadena) ; Buscar( $a, $cadena );
  • 5.
    MÓDULO 7: Creación demódulos con Drupal Php: • Comentarios: • De una linea: “//” . $x = 17; // La variable x vale 17 • De varias lineas: “/* */” . /* En este trozo de código vamos a sumar dos variable */
  • 6.
    MÓDULO 7: Creaciónde módulos con Drupal Php: • Variables: Comienzan siempre con el símbolo “$”. • Constantes: define(‘MI_CONSTANTE’, 20); • Tipos de datos: • Escalares: - Boolean: Verdadero o Falso. 1 y 0, TRUE FALSE - Integer: Números enteros. 65, 075(octal) 0x10 (hex) - Float: Decimales 3.14 0.314E1 - String: Cadenas. “Una cadena” , ‘ Una cadena’. • Compuestos: - Array: array ( key => value) Key: Integer o String, Value: Cualquier valor.
  • 7.
    MÓDULO 7: Creación demódulos con Drupal Php: … - Object: class prueba { function acceder_prueba { echo “Hola"; } } $var = new prueba; $var->acceder_prueba();
  • 8.
    MÓDULO 7: Creaciónde módulos con Drupal Php: • Sentencia If: if (expr) sentencia b) <?php c) <?php a) <?php if ($a > $b) { if ($a > $b) { if ($a > $b) { echo "a es mayor que b"; echo "a es mayor que b"; echo "a es mayor que b"; } elseif ($a == $b) { } else { $b = $a; echo "a es igual que b"; echo "a NO es mayor que } } else { b"; ?> echo "a es menor que b"; } ?> } ?>
  • 9.
    while (expr) sentencia MÓDULO 7: Creación de módulos con Drupal Php: • Sentencia while: while (expr) sentencia <?php $i = 1; $i = 1; while ($i <= 10): while ($i <= 10) { echo $i; echo $i++; $i++; } endwhile; ?>
  • 10.
    MÓDULO 7: Creación demódulos con Drupal Php: • Sentencia do-while: <?php $i = 0; do { echo $i; } while ($i > 0); ?>
  • 11.
    MÓDULO 7: Creación demódulos con Drupal Php: • Sentencia for: for (expr1; expr2; expr3) sentencia for ($i = 1; ; $i++) { if ($i > 10) { break; } echo $i; }
  • 12.
    MÓDULO 7: Creación demódulos con Drupal Php: • Sentencia foreach: foreach (array_expression as $value) sentencias foreach (array_expression as $key => $value) sentencias
  • 13.
    MÓDULO 7: Creación demódulos con Drupal Php: <?php • Sentencia switch: if ($i == 0) { switch ($i) { echo "i es igual a 0"; case 0: } elseif ($i == 1) { echo "i es igual a echo "i es igual a 1"; 0"; } elseif ($i == 2) { break; echo "i es igual a 2"; case 1: } echo "i es igual a 1"; break; case 2: echo "i es igual a 2"; break; } ?>
  • 14.
    MÓDULO 7: Creación demódulos con Drupal Funciones: • Los nombres de las fuciones son insensibles a mayúsculas-minúsculas • Un nombre de función válido comienza con una letra o guión bajo, seguido de cualquier número de letras, números, o guiones bajos. • <?php function nombre_funcion($arg_1, $arg_2, /* ..., */ $arg_n) { echo "Función de ejemplo.n"; return $valordevuelto; } ?> •
  • 15.
    MÓDULO 7: Creación demódulos con Drupal Funciones: (argumentos) • pasados por referencia: o Permite modificar los argumentos pasados a una funcion o hay que poner delante del nombre del argumento el signo 'ampersand' (&) o <?php function añadir_algo(&$cadena) { $cadena .= 'y algo más.'; } $cad = 'Esto es una cadena, '; añadir_algo($cad); echo $cad; // imprime 'Esto es una cadena, y algo más.' ?>
  • 16.
    MÓDULO 7: Creación demódulos con Drupal Funciones: (argumentos) • argumentos predeterminados: • <?php function hacercafe($tipo = "capuchino") { return "Hacer una taza de $tipo.n"; } echo hacercafe(); echo hacercafe(null); echo hacercafe("espresso"); ?>
  • 17.
    MÓDULO 7: Creación demódulos con Drupal Funciones: (argumentos) • argumentos de longitud variable <?php function foo() { $num_args = func_num_args(); echo "Número de argumentos: $num_args<br />n"; if ($num_args >= 2) { echo "El segundo argumento es: " . func_get_arg(1) . "<br />n"; } } foo (1, 2, 3); ?>
  • 18.
    MÓDULO 7: Creación demódulos con Drupal Funciones: function ordenación_de_burbuja($array){ $count = count($array); //Cuento los elementos del arreglo if ($count <= 0) return false; //Si no hay elementos entonces que voy ordenar? retorno falso for($i=0; $i<$count; $i++){//Recorro cada uno de los elementos for($j=$i+1; $j<$count; $j++){ if ($array[$j] < $array[$i]){//Comparo si hay un elemento del arreglo menor que el de la posicion i, si es asi intercambio posiciones $tmp = $array[$j]; $array[$j] = $array[$i]; $array[$i] = $tmp; } } } return $array; }
  • 19.
    MÓDULO 7: Creación demódulos con Drupal Formularios: <FORM NAME='mi_formulario' ACTION='procesar.php' METHOD='POST'> ........ </FORM> • NAME: el nombre del formulario para luego ser referenciado en el código. • ACTION: indica la página de destino a la que se deben mandar los datos del formulario. • METHOD: indica cómo se deben pasar los parámetros: • POST: se mandan como variables “ocultas”. • GET: las variables se mandan dentro de la URL de destino. • Los valores se recogerán en: • Si hemos usado METHOD=GET tendremos un array asociativo $_GET[“nombre_var”] para referenciar cada variable del formulario. • Si hemos usado METHOD=POST el array será $_POST[“nombre_var”].
  • 20.
    MÓDULO 7: Creación demódulos con Drupal Formularios: • Etiqueta INPUT para texto corto <input type="text" name="nombre"> <input type="text" name="nombre" value="Perico Palotes"> • Etiqueta INPUT, modalidad de texto oculto <input type="password" name="nombre"> • Etiqueta TEXTAREA para texto largo <textarea name="comentario" rows="10" cols="40"></textarea> •Listas de opciones <select name="estacion"> <option value=“P”>Primavera</option> <option value=“V”>Verano</option> <option value=“O”>Otoño</option> <option value=“I”>Invierno</option> </select>
  • 21.
    MÓDULO 7: Creación demódulos con Drupal Formularios: • Botones de radio <input type="radio" name="estacion" value="1">Primavera <br> <input type="radio" name="estacion" value="2">Verano <br> <input type="radio" name="estacion" value="3">Otoño <br> <input type="radio" name="estacion" value="4">Invierno • Cajas de validación <input type="checkbox" name="paella“ value=“YES”>Me gusta la paella • Botón de envío de formulario (botón de submit) <input type="submit" value="Enviar"> • Botón de borrado (botón de reset) <input type="reset" value="Borrar">
  • 22.
    MÓDULO 7: Creación demódulos con Drupal Formularios: • Datos ocultos (campos hidden) <input type=hidden name="sitio" value="www.terra.es">
  • 23.
    MÓDULO 7: Creación demódulos con Drupal Creacion de módulos: • A la hora de desarrollar un sitio o una aplicación web, aparecen una serie de funcionalidades que no son cubiertas por los módulos existentes. • No existe un módulo similar : • Desarrollar completamente el módulo. • Existe un módulo similar. • Funcionalidades adicionales a ese módulo a base de parches ("patches"). • Se puede optar por desarrollar un módulo nuevo, reutilizando código
  • 24.
    MÓDULO 7: Creación demódulos con Drupal Creacion de módulos: Dónde los coloco? • Carpeta modules: No es recomendable y sólo debería usarse para los módulos que vienen por defecto con Drupal. • En la carpeta sites: Aquí hay varias opciones. • Carpeta Default (visible para el sitio por defecto de Drupal), en la • Carpeta All (visible para todos los sitios en caso de una instalación multisite) o lo podemos instalar en la carpeta de un sitio en concreto para que sólo sea visible para ese sitio. Como norma general los módulos se instalan en la carpeta sites/all/modules/nombremodulo.(En caso de no existir la carpeta modules/nombremodulo , la crearemos).
  • 25.
    MÓDULO 7: Creación demódulos con Drupal Creacion de módulos: Qué archivos necesito? • nombremodulo.info : que contiene "metainformación del modulo". • nombremodulo.module: que contiene el código del módulo. • nombremodulo.install (opcional): que contiene parámetros de configuración, esquemas de la base de datos, información para desinstalación …
  • 26.
    MÓDULO 7: Creación demódulos con Drupal Archivo .info ; $Id$ Obligatorios name = nombremodulo descripcion = Breve descripcion de lo que hace el módulo. core = 6.x (version de Drupal con la que es compatible) Opcionales dependencies[] = nombre del modulo del que depende (especifica el nombre del módulo o módulos que son necesarios para que nuestro módulo funcione correctamente). package = "grupo" .
  • 27.
    MÓDULO 7: Creación demódulos con Drupal Sistema de Hooks: • El sistema de módulos de Drupal se basa en el concepto de "Hooks". • <nombremimodulo>_hook_name(). Ejemplo: hook_block() => nombremimodulo_block() • http://api.drupal.org/api/drupal/includes--module.inc/group/hooks/6
  • 28.
    MÓDULO 7: Creación demódulos con Drupal Sistema de Hooks: • hook_menu() • hook_link($type, $object, $teaser = FALSE) • hook_perm() • hook_block($op = 'list', $delta = 0, $edit = array()) • hook_form_alter(&$form, &$form_state, $form_id) • hook_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL)
  • 29.
    MÓDULO 7: Creación demódulos con Drupal Funciones: • Forms Api de Drupal • drupal_get_form($form_id) • system_settings_form($form) • variable_get($name, $default) • variable_set($name, $value) • Database abstraction layer
  • 30.
    MÓDULO 7: Creación demódulos con Drupal Módulos: • Devel. • Drupal for Firebug • Coder
  • 31.
    MÓDULO 7: Creación demódulos con Drupal RESUMEN: En este módulo hemos aprendido a: • Usar herramientas que nos ayuden a la creación de módulos en drupal. • Los “hooks” más habituales a la hora de creación de módulos. • La utilización de la API de Drupal.