Crear un plugin tipo módulo en Moodle puede sonar complicado al principio, pero si sigues un proceso paso a paso, pronto verás que es muy manejable. En este artículo te guiaré por la creación de un plugin básico, con un ejemplo práctico y código para que puedas entenderlo fácilment
1. Crea la estructura del plugin
Lo primero que tienes que hacer es crear la carpeta de tu plugin en mod/
. Vamos a llamarlo «mimodulo». La estructura básica debería verse así:
mod/
mimodulo/
db/
lang/
version.php
lib.php
mod_form.php
index.php
view.php
2. version.php
: Define la versión del plugin
Este archivo es esencial, ya que define la versión de tu plugin y otras dependencias. Aquí tienes un ejemplo de cómo podría verse el archivo version.php
:
<?php
defined('MOODLE_INTERNAL') || die();
$plugin->component = 'mod_mimodulo';
$plugin->version = 2023091900;
$plugin->requires = 2022041900; // Versión mínima de Moodle requerida
$plugin->maturity = MATURITY_STABLE;
$plugin->release = 'v1.0';
3. install.xml
: Estructura de la base de datos
En la carpeta db/
, crea el archivo install.xml
para definir las tablas que necesitará tu plugin. Vamos a crear una tabla sencilla llamada mimodulo
:
<?xml version="1.0" encoding="UTF-8"?>
<database>
<TABLES>
<TABLE NAME="mimodulo">
<FIELDS>
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
<FIELD NAME="name" TYPE="char" LENGTH="255" NOTNULL="true"/>
<FIELD NAME="intro" TYPE="text" NOTNULL="false"/>
<FIELD NAME="timecreated" TYPE="int" LENGTH="10" NOTNULL="true"/>
</FIELDS>
<KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="id"/>
</KEYS>
</TABLE>
</TABLES>
</database>
Esta tabla almacenará los nombres de las instancias de tu módulo y una introducción básica.
4. lib.php
: Funciones del módulo
El archivo lib.php
contiene las funciones principales para crear, actualizar y eliminar instancias del módulo. Aquí tienes algunas de las funciones esenciales que tendrás que implementar:
<?php
defined('MOODLE_INTERNAL') || die();
// Función para añadir una instancia del módulo
function mimodulo_add_instance($mimodulo) {
global $DB;
$mimodulo->timecreated = time();
return $DB->insert_record('mimodulo', $mimodulo);
}
// Función para actualizar una instancia del módulo
function mimodulo_update_instance($mimodulo) {
global $DB;
$mimodulo->timemodified = time();
$mimodulo->id = $mimodulo->instance;
return $DB->update_record('mimodulo', $mimodulo);
}
// Función para eliminar una instancia del módulo
function mimodulo_delete_instance($id) {
global $DB;
return $DB->delete_records('mimodulo', ['id' => $id]);
}
Estas funciones se encargarán de la gestión de las instancias de tu módulo, desde su creación hasta su eliminación.
5. mod_form.php
: Formulario de configuración
El archivo mod_form.php
es donde defines el formulario que se mostrará al crear o editar una instancia de tu módulo en Moodle. Aquí tienes un ejemplo básico:
<?php
defined('MOODLE_INTERNAL') || die();
require_once($CFG->dirroot.'/course/moodleform_mod.php');
class mod_mimodulo_mod_form extends moodleform_mod {
function definition() {
$mform = $this->_form;
// Campo de texto para el nombre
$mform->addElement('text', 'name', get_string('name', 'mod_mimodulo'), array('size' => '64'));
$mform->setType('name', PARAM_TEXT);
$mform->addRule('name', null, 'required', null, 'client');
// Campo de texto para la introducción
$mform->addElement('editor', 'introeditor', get_string('intro', 'mod_mimodulo'));
$mform->setType('introeditor', PARAM_RAW);
// Elementos estándar de Moodle
$this->standard_coursemodule_elements();
// Botón de acción
$this->add_action_buttons();
}
}
Esto generará un formulario donde el usuario puede ingresar el nombre y la introducción para la instancia del módulo.
6. index.php
: Página principal del módulo
El archivo index.php
será el punto de entrada principal de tu módulo. Aquí puedes mostrar una lista de todas las instancias creadas del módulo:
<?php
require_once('../../config.php');
require_login();
$PAGE->set_url('/mod/mimodulo/index.php');
$PAGE->set_title(get_string('modulename', 'mod_mimodulo'));
$PAGE->set_heading(get_string('modulename', 'mod_mimodulo'));
echo $OUTPUT->header();
echo $OUTPUT->heading('Mi Módulo');
if (!$instances = $DB->get_records('mimodulo')) {
echo $OUTPUT->notification('No hay instancias disponibles.');
} else {
foreach ($instances as $instance) {
echo html_writer::div($instance->name);
}
}
echo $OUTPUT->footer();
Este archivo muestra todas las instancias creadas del módulo en la base de datos, mostrando sus nombres en pantalla.
7. view.php
: Visualización de una instancia
El archivo view.php
se utiliza para mostrar una instancia específica de tu módulo. Aquí tienes un ejemplo básico:
<?php
require_once('../../config.php');
$id = required_param('id', PARAM_INT); // ID de la instancia
if (!$instance = $DB->get_record('mimodulo', ['id' => $id])) {
print_error('Instancia no válida');
}
$PAGE->set_url('/mod/mimodulo/view.php', ['id' => $id]);
$PAGE->set_title($instance->name);
$PAGE->set_heading($instance->name);
echo $OUTPUT->header();
echo $OUTPUT->heading($instance->name);
echo format_text($instance->intro);
echo $OUTPUT->footer();
Este archivo recupera una instancia concreta del módulo y muestra su nombre e introducción.
8. Pruebas y depuración
Con todo listo, es el momento de probar tu plugin en un entorno de desarrollo. Instálalo en tu Moodle local, crea una instancia en un curso y asegúrate de que todo funciona correctamente. Recuerda que los errores suelen surgir al principio, pero con la práctica, este proceso será cada vez más fluido.
Este ejemplo básico te proporciona los pasos iniciales para crear un módulo funcional en Moodle. Desde aquí, puedes ir añadiendo más funcionalidades y complejidad según tus necesidades. ¡Espero que esta guía te sea útil y te anime a seguir explorando el desarrollo en Moodle!