Diario de mi Proyecto : PFC sobre Moodle

  Archivos
Jul 07 [2]
Jun 07 [12]
Mayo 07 [13]
Mar 07 [3]
Nov 06 [6]
Oct 06 [5]


Sindicación
Artículos
Comentarios


Enlaces
eGrupos
ZoomBlog

 
Inicio | Mi Perfil | Suscríbete al blog
29 de Noviembre, 2006

 

Creación de un módulo de ejemplo

Enlace permanente 29 de Noviembre, 2006, 8:08

En este artículo voy a comentar el desarrollo y los problemas que he tenido al crear un módulo muy sencillo que he titulado "Ejemplo" (os dije que no tenía mucha imaginación).

Lo primero que hay que hacer es bajarse la plantilla NEWMODULE.ZIP. Os la podéis bajar del siguiente enlace. La estructura de archivos de este .zip la podéis estudiar en el módulo de actividades de Moodle. Lo que tenéis que quedaros para empezar es con lo siguiente:
  • mod.html: aquí editareis el formulario para insetar los datos del módulo cuando creéis una instancia del mismo (cuando se añade una nueva actividad).
  • db/mysql.sql: aquí creáis las tablas que necesitéis (esto lo explico más adelante).
  • lib.php: es la "librería" del módulo, es decir, aquí es donde crearéis vuestras funciones nuevas y editaréis las ya existentes.
¿Y ahora qué? Bueno, vamos paso a paso, para empezar a programar lo primero es pensar en las opciones de configuración del módulo. Para este "cutre-ejemplo" he elegido que va a tener un nombre, una descripción y una calificación, por lo tanto estas opciones las tendré que pedir cuando añada una nueva actividad ejemplo. Para realizar esto edito el fichero mod.html y añado (código html) un formulario normal y corriente, por ejemplo:

<td align="right"><b><?php  print_string("name", "ejemplo") ?>:</b></td>
    <td>
        <input type="text" name="name" size=60 value="<?php p($form->name) ?>">
    </td>

Aquí estoy añadiendo la variable "name" y le estoy diciendo a Moodle que guarde ese valor en $form->name. Se me ha olvidado antes que para iniciar esas variables al principio del formulario (mediante php) he insertado el código siguiente:

if (!isset($form->name)) {
    $form->name = '';
}
if (!isset($form->description)) {
    $form->description = "";
}
if (!isset($form->grade)) {
    $form->grade = 100; //100 es el valor predeterminado que tendrá.
}

Una vez que tengo el formulario creado salvo y guardo. Como buen pardillo, lo primero que hice fue integrarlo (que es sumamente sencillo) e intentar ver si funcionaba. GRAN ERROR. No funcionaba nada de nada, ni siquiera me salía el texto en español y cuando le daba a "añadir una nueva actividad" me salía en la lista de actividades [[newmodule]].

¿
Y por qué eso de newmodule? Bueno, esto me sirve para hablar del fichero de idioma. Ya sabéis que Moodle es internacional y ahí entra en juego el tema de los idiomas. Todavía no tengo muy claro los formatos de texto "oficiales" (utf-8, windows, etc), así que os explico algo muy sencillo. Para que en vuestro módulo os salgan las opciones y frases como queráis (Nuevo nombre para la actividad ejemplo en vez de Nombre) tendréis que crear un fichero en el directorio lang con el mismo nombre que el módulo. En mi caso se llamó ejemplo.php. En este fichero creamos entradas de este tipo:

//moodle
$string['modulename'] = 'Ejemplo';
$string['modulenameplural'] = 'Ejemplos';

//Del propio módulo

$string['Name'] = 'Nombre para la actividad Ejemplo';
$string['name'] = 'Nombre para la actividad Ejemplo';
$string['description'] = 'Descripción';
$string['grade']='Calificación del Ejemplo';

Y
para llamar a los "string" lo hacéis de la siguiente manera:

<td align="right"><b><?php  print_string("name", "ejemplo") ?>:</b></td>

Es decir, con la función print_string() le estoy diciendo que me devuelva la cadena name del fichero ejemplo. Una vez hecho esto e insertado el fichero de lenguaje ejemplo.php en /Appserv/moodledata/lang/es_utf8 ya funciona el tema del lenguaje correctamente y cuando añadimos una nueva actividad la apariencia es la siguiente:

            
Image Hosted by ImageShack.us

Bueno y ahora, introducimos las opciones le damos a "guardar cambios" y... TOMA ERROR!!!! Y así unas cuantas de veces... El error era el siguiente:

A required parameter (sesskey) was missing

Pufffffffffffff, parece grave no? Pues la verdad es que no lo es tanto cuando te das cuenta de lo que pasa. Esta variable la utiliza Moodle para temas de seguridad y se va propagando, por así decirlo, por toda la plataforma. Por lo tanto para que se siga propagando por nuestro módulo, hay que insetar en mod.html el siguiente código (al final del archivo):

<input type="hidden" name=sesskey       value="<?php p($form->sesskey) ?>" />


Guardamos los cambios, volvemos a añadir y... más errores!! Nos siguen faltando parámetros requeridos por Moodle, en este caso es el parámetro mode. Así que para concretar os recomiendo que nunca falte lo siguiente en el fichero mod.html:

<input type="hidden" name=course        value="<?php  p($form->course) ?>" />
<input type="hidden" name=module        value="<?php  p($form->module) ?>" />
  <input type="hidden" name=modulename    value="<?php  p($form->modulename) ?>" />
<input type="hidden" name=instance      value="<?php  p($form->instance) ?>" />
<input type="hidden" name=sesskey       value="<?php p($form->sesskey) ?>" />
<input type="hidden" name="mode"          value="<?php  p($form->mode) ?>" />
<input type="hidden" name="section"       value="<?php  p($form->section) ?>" />


¿Funciona ya por fin? Pues todavía no, nos falta un tema importantísimo en Moodle, las tablas... Como ya sabemos, Moodle guarda la información en bases de datos asi que nuestro módulo tendrá que tener tablas para almacenar la información. Este tema no lo tengo muy claro todavía, pero lo que sí se es que para nuestro ejemplo hay que crearse como mínimo una tablita e insetar el código en db/mysql.sql:

CREATE TABLE `prefix_ejemplo` (
  `id` int(10) unsigned NOT NULL auto_increment, //ESTE ATRIBUTO ID NUNCA DEBE FALTAR
  `course` int(10) unsigned NOT NULL default '0',
  `name` varchar(255) NOT NULL default '',
  `description` text NOT NULL,
  `grade` int(10) NOT NULL default '0',
  `timemodified` int(10) unsigned NOT NULL default '0',
  PRIMARY KEY  (`id`)
) COMMENT='Define Ejemplo';

Y una vez realizado esto solo nos faltará retocar la función para añadir una instancia en lib.php:

function ejemplo_add_instance($ejemplo) {
   
    $ejemplo->timemodified = time();
    if ($mod->course) {
        if (!
$course = get_record("course", "id", $mod->course)) {
            error("Course is misconfigured");
        }
    }

    # May have to add extra stuff in here #
    return insert_record("ejemplo",$ejemplo);
}

Simplemente he añadido $ejemplo->timemodified = time(); porque esto no lo recogo en el formulario, es una variable que me indica el momento en el que modifico la instancia.

Ahora una vez que guardemos todos los cambios e insertemos el módulo, lo primero que se produce es la creación de la tabla. Y una vez introducida la información desde el formulario pues se crea la instancia del nuevo módulo y todo funcionará correctamente.

Os resumo los pasos:

  1. Creación de las respectivas tablas en db/mysql.sql
  2. Creación del formulario.
  3. Editar función ****_add_instance() en lib.php

Bye

Comentarios 23 ~ Comentar | Referencias (0)



Blog alojado en ZoomBlog.com

 

 

<<   Noviembre 2006  >>
LMMiJVSD
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30    

Categorías
General [41] Sindicar categoría