Cierra completamente XAMPP
-
Cierra el Panel de Control.
-
Mata cualquier proceso de Apache que haya quedado en segundo plano:
En CMD (como administrador):
Blog personal de Julian Alzate: Desarrollador, apasionado por el Marketing, creador del blog con información de interés en Manizales y en Colombia.
Cierra el Panel de Control.
Mata cualquier proceso de Apache que haya quedado en segundo plano:
En CMD (como administrador):
taskkill /F /IM httpd.exe
Crear tu propio plugin en Moodle puede sonar complicado al principio, pero con este tutorial te mostraré cómo desarrollar un plugin básico de tipo “actividad” para que puedas entender la estructura y empezar a construir tus propias funcionalidades.
Un plugin de actividad llamado Mi Módulo, que aparecerá en el listado de actividades cuando edites un curso y te permitirá crear nuevas instancias con un solo campo: nombre.
Primero, crea una carpeta en:
moodle/mod/mimodulo
Dentro de esa carpeta, necesitas tener al menos estos archivos:
mimodulo/
├── db/
│ └── install.xml
acces.php
├── lang/
│ └── en/
│ └── mimodulo.php
├── lib.php
├── mod_form.php
├── version.php
├── view.php
Archivo obligatorio que define la versión del plugin.
<?php
defined('MOODLE_INTERNAL') || die();
$plugin->component = 'mod_mimodulo';
$plugin->version = 2025042500;
$plugin->requires = 2022041900;
$plugin->maturity = MATURITY_STABLE;
$plugin->release = 'v1.0';
Ubicado en db/install.xml
. Define la tabla del plugin.
<?xml version="1.0" encoding="UTF-8" ?>
<XMLDB PATH="mod/mimodulo/db" VERSION="2025042500"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../lib/xmldb/xmldb.xsd">
<TABLES>
<TABLE NAME="mimodulo" COMMENT="Tabla del módulo mimodulo">
<FIELDS>
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" SEQUENCE="true"/>
<FIELD NAME="name" TYPE="char" LENGTH="255" NOTNULL="true"/>
<FIELD NAME="timecreated" TYPE="int" LENGTH="10" NOTNULL="true"/>
<FIELD NAME="timemodified" TYPE="int" LENGTH="10" NOTNULL="false"/>
</FIELDS>
<KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="id"/>
</KEYS>
</TABLE>
</TABLES>
</XMLDB>
2.5 access.php
<?php
defined('MOODLE_INTERNAL') || die();
$capabilities = [
'mod/mimodulo:addinstance' => [
'captype' => 'write',
'contextlevel' => CONTEXT_COURSE,
'archetypes' => ['editingteacher' => CAP_ALLOW, 'manager' => CAP_ALLOW],
],
];
Define los textos visibles.
<?php
$string['pluginname'] = 'Mi Módulo';
$string['modulename'] = 'Mi Módulo';
$string['modulenameplural'] = 'Mis Módulos';
$string['mimodulo:addinstance'] = 'Agregar una nueva instancia de Mi Módulo';
$string['name'] = 'Nombre del módulo';
Formulario que se muestra al crear o editar la actividad.
<?php
require_once($CFG->dirroot . '/course/moodleform_mod.php');
class mod_mimodulo_mod_form extends moodleform_mod {
function definition() {
$mform = $this->_form;
$mform->addElement('text', 'name', get_string('name', 'mimodulo'), ['size' => '64']);
$mform->setType('name', PARAM_TEXT);
$mform->addRule('name', null, 'required', null, 'client');
$this->standard_coursemodule_elements();
$this->add_action_buttons();
}
}
Contiene funciones principales del módulo.
<?php
function mimodulo_add_instance($data, $mform) {
global $DB;
$data->timecreated = time();
return $DB->insert_record('mimodulo', $data);
}
function mimodulo_update_instance($data, $mform) {
global $DB;
$data->timemodified = time();
$data->id = $data->instance;
return $DB->update_record('mimodulo', $data);
}
function mimodulo_delete_instance($id) {
global $DB;
return $DB->delete_records('mimodulo', ['id' => $id]);
}
Lo que el estudiante verá al ingresar a la actividad.
<?php
require_once('../../config.php');
$id = required_param('id', PARAM_INT);
$cm = get_coursemodule_from_id('mimodulo', $id, 0, false, MUST_EXIST);
$context = context_module::instance($cm->id);
require_login($cm->course, true, $cm);
$PAGE->set_url('/mod/mimodulo/view.php', ['id' => $id]);
$PAGE->set_context($context);
$PAGE->set_title('Mi Módulo');
$PAGE->set_heading('Mi Módulo');
echo $OUTPUT->header();
echo $OUTPUT->heading('Hola, este es tu nuevo módulo en Moodle 🚀');
echo $OUTPUT->footer();
Copia la carpeta mimodulo
en moodle/mod/
.
Ve a tu Moodle como administrador.
Moodle detectará automáticamente el nuevo plugin.
Sigue el asistente de instalación.
¡Listo! Ya puedes usar tu módulo en cualquier curso.
Entra a un curso como administrador o profesor.
Activa edición.
Haz clic en “Agregar una actividad o recurso”.
Verás "Mi Módulo" en la lista.
Agrega una instancia y prueba su vista.
Este tutorial te brinda una base sólida para crear tu propio plugin de tipo actividad en Moodle con php. A partir de aquí, puedes expandir la funcionalidad, agregar configuraciones, vistas personalizadas, lógica de calificación y mucho más.
Si te gustó este artículo y te fue útil, ¡compártelo!.
Este tutorial fue creado pensando en los desarrolladores que usan Moodle en Colombia, especialmente en Manizales, donde la tecnología educativa sigue creciendo y conectando comunidades de aprendizaje, el objetivo es de aprendizaje para que puedan aprender a crear un plugin y a partir de esto desarrollar el que requieran a medida.