jueves, 13 de febrero de 2025

Top 5 de la semana

Artículos relacionados

Guía Completa: Crea tu Propio Plugin Módulo en Moodle – Ejemplo Práctico

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!

Jordi Morillo
Jordi Morillohttps://www.programador-web.com
Soy un programador PHP Senior con más de 20 años de experiencia en desarrollo web y administración de sistemas Linux, especializado en Symfony y metodologías ágiles como Scrum. He trabajado con tecnologías como MySQL, MongoDB y WordPress, y siempre busco nuevas oportunidades para seguir aprendiendo y aplicando mis conocimientos.

DEJA UNA RESPUESTA

Por favor ingrese su comentario!
Por favor ingrese su nombre aquí

Artículos populares