El blog de Javier Aranda

aprendiendo a ser ingeniero informático

Tutorial de creación de un módulo para Moodle 1.9 (III)

4 comentarios

Tras un periodo de exámenes, continúo escribiendo este tutorial.

Descripción de modsms

Como ya se ha comentado en entradas anteriores, vamos a realizar un módulo de actividad muy sencillo llamado modsms que nos permitirá tratar todos los aspectos básicos a tener en cuenta a la hora de desarrollar nuestro módulo. Este módulo hará uso de una base de datos para almacenar una serie de mensajes breves escritos por los alumnos (como un chat aunque sin una actualización en tiempo real) que responden a una pregunta del profesor. El diseño relacional de la base de datos queda de la siguiente forma:

Esquema Entidad-Relación modSMS

Esquema Entidad-Relación modSMS

De color azul tenemos las tablas creadas por este módulo, y de color rosa las ya existentes en moodle pero que son referenciadas desde las nuestras.

Definición de las tablas: db/install.xml

El primer archivo que vamos a crear en nuestro módulo es el archivo de definición de las tablas que se usarán en nuestro módulo y que se crearán cuando lo activemos/instalemos. Este archivo es necesario crearlo aunque no usemos en nuestro módulo nada de las bases de datos, pero, como veremos más adelante, siempre resulta necesario crear una tabla con el nombre de nuestro módulo donde se almacenarán las distintas instancias de nuestro módulo en los cursos.

Este archivo contiene una definición de las tablas en un formato XMLDB modificado por moodle a su manera, por lo que si usamos algún editor existente que soporte ese xml deberemos prestar atención a los cambios. Para facilitarnos esa tarea, el propio moodle lleva incorporado un editor web que es el que usaremos para crear el esquema. Para ello, crearemos la estructura inicial del módulo creando la carpeta modsms bajo raiz-de-moodle/mood, dentro de ella la carpeta db y dentro de esta un archivo de texto llamado install.xml.

El primer paso es dotar de contenido a este archivo con una estructura básica para que el editor de moodle pueda reconocerlo y editarlo:



    
        
            
          
            
          

Como puede observarse, el xml consta de dos partes: la definición de tablas (tables) y la definición de consultas (statements). Por ahora nos olvidaremos de esta última parte y nos centraremos en la primera, la cual define la tabla principal del módulo (modsms) con un único campo (id) que identifica cada instancia de nuestro módulo de forma única.

Ahora entramos como administrador en moodle y en el menú de administración seleccionamos Miscelánea > XMLDB Editor. Una vez estemos en la página, buscamos la línea mod/modsms/db y pulsamos sobre Load, lo cual cargará nuestro archivo xml para su edición. Una vez cargado, en la misma línea tendremos activada la opción de editar (Edit), y pulsando sobre ella accederemos a la interfaz de edición del xmldb.

Vista de la interfaz de edición de XMLDB

Vista de la interfaz de edición de XMLDB

Creando la estructura de las tablas

Como puede apreciarse en la página de edición, disponemos ya de una tabla creada, llamada modsms, que se corresponde con la única tabla obligatoria para un módulo de actividad en moodle. En esta tabla se creará un registro/fila/tupla por cada una de las instancias de nuestra actividad en cualquier curso de todo moodle. Y… ¿qué es una instancia? Pues es simplemente una actividad que insertamos en algún curso, que se diferencia de otras instancias de la misma actividad por un número de identificación único que se guarda en la tabla como el campo id. Esta tabla debe contener obligatoriamente tres campos: id, course y name, que identifican de forma unica cada instancia, hace referencia al curso donde está y el nombre que tiene, respectivamente. Para editar la tabla solamente pulsaremos sobre el enlace [Edit] que se encuentra junto al nombre de la tabla bajo la sección Tables.

Como se observa, la tabla ya contiene el campo id mencionado anteriormente. Ahora es el turno de añadir los demás campos que necesitamos en base al diseño realizado arriba. Para añadir un nuevo campo, sólo hay que pulsar sobre [New Field] y rellenar los datos del campo en la siguiente página. En el caso del campo course, el formulario lucirá el siguiente aspecto:

Editando el campo course

Editando el campo course

Repetiremos este proceso hasta completar todos los campos de la tabla. Es importante que todos los campos tengan la restricción de no nulo (NOT NULL), ya que ninguno debe ser nulo para el correcto funcionamiento del módulo. Una vez creados todos los campos, el siguiente paso es aplicar las restricciones y las relaciones a los campos que lo requieran. En esta tabla, deberemos reflejar que el campo course es una clave foránea (hace referencia a) del campo id en la tabla course. Para informar de esto a la base de datos, pulsamos sobre [New Key] y rellenamos los datos:

Editando las restricciones de clave foranea

Editando las restricciones de clave foranea

Usando el enlace [Back] volvemos hacia atrás hasta llegar a la página que muestra la lista de tablas creadas (solo hay una por el momento). Si pulsamos sobre el enlace [New Table] nos mostrará la interfaz de creación de tablas dónde sólo hay que darle un nombre y el comentario es opcional, y la aplicación se encargará de crear el campo identificativo por defecto (id). En este paso creamos la tabla de nombre modsms_messages donde guardar los mensajes escritos por los alumnos. Y repetimos los pasos anteriores para dotar de contenido a esta nueva tabla.

Guardando el nuevo archivo

Por razones que desconozco, pese a contar el archivo con permisos 777 en linux, resulta imposible guardarlo desde moodle con la opción [Save] que aparece junto a la ruta en la lista de archivos editables de la interfaz de edición de xmldb. Por ello, la única manera de guardar los cambios es, estando en la interfaz de edición, pulsar sobre [View Edited] con el botón derecho del ratón y darle a Guardar como…, sustituyendo el antiguo archivo por este nuevo.

Cuando todo esté terminado, el contenido del archivo install.xml debe ser muy parecido a este:



  
    
        
        
        
        
        
      
        
        
      

Nota sobre los nombres de tablas y campos

En moodle, el nombre de la tabla principal de un módulo debe llamarse igual que este, y las demás tablas que necesitemos deben empezar por el nombre del módulo. En nuestro caso, el módulo se llama modsms, su tabla principal modsms y la otra que necesitamos modsms_messages.

Si en una tabla hacemos referencia al campo de otra tabla, este campo deberá llamarse de la forma nombredelatablanombredelcampo. Así, para hacer referencia al campo id de la tabla user, en nuestra tabla modsms_messages hemos creado un campo llamado userid.

Todos estos requerimientos pueden consultarse en la documentación en inglés sobre las bases de datos en moodle.

Entradas relacionadas:

  1. Tutorial de creación de un módulo para Moodle 1.9 (II)
  2. Tutorial de creación de un módulo para Moodle 1.9 (I)
  3. Tutorial de creación de un módulo para Moodle 1.9 (IV)

Escrito por javierav

17 Septiembre 2009 a las 10:46 am

Categorías: Moodle

Etiquetado con , , ,

4 respuestas a 'Tutorial de creación de un módulo para Moodle 1.9 (III)'

Suscríbase a los comentarios desde RSS o realice un TrackBack a 'Tutorial de creación de un módulo para Moodle 1.9 (III)'.

  1. Está muy bien. Pero ya no hay más?

    Nat

    29 Septiembre 2009 a las 1:33 pm

  2. muchas gracias javi. Sigue con el, por favor.
    Un saludo

    Icko

    7 Octubre 2009 a las 1:23 pm

  3. Hola javier. Tengo una duda sobre moodle. Estoy haciendo un módulo en el que necesito almacenar las respuestas de los cuestionarios en mi base de datos, porque luego estas respuestas debería pasarselas a una aplicacion externa mediante un apple de java. Estoy muy perdida y tengo que dar una respuesta de como hacerlo esta semana, podrías darme alguna idea ?? o sobretodo, podrías comentarme si es posible acceder desde mi base de datos a una tabla de otro módulo y donde se almacenan las respuestas de dichos cuestionarios ??? Perdon porque he hecho muchas respuestas seguidas y no se si muy claras, pero es que estoy desesperada. Gracias.

    rcr

    27 Febrero 2010 a las 1:50 pm

  4. Hola.

    En primer lugar te aclaro algunos conceptos. La base de datos de tu módulo es la misma que la de los otros módulos y del propio moodle en si. Lo que es distinto es las distintas tablas que la forman, dónde cada módulo tiene las suyas propias.

    Dicho esto, desde tu módulo puedes acceder a cualquier tabla de la base de datos que usa moodle. Para ello debes usar las funciones de acceso a la base de datos que tiene implementada moodle. Las respuestas de los cuestionarios se almacenan en las tablas del módulo de cuestionarios. Es cuestión de mirar cuales son y la forma en que se almacenan las distintas respuestas.

    Un saludo.

    javierav

    28 Febrero 2010 a las 4:51 pm

Deje una respuesta