Módulos y bloques de Moodle

Moodle se divide en varias partes, y dentro de lo que es la funcionalidad se pueden encontrar los llamados “Módulos” que es el alma de moodle, ya que éstos son donde se hacen los cursos, se asignan las clases, el manejo de foros para profesores y alumnos puedan comunicarse en linea y muchas otras cosas que tienen que ver con la funcionalidad.

Para crear un módulo, y a diferencia de otros módulos en donde la implementacíon y desarrollo puede ser algo fácil, en Moodle es algo muy complejo de realizar, ya que al ser una parte principal de Moodle, lo normal es que siempre tengan asociadas consultas, inserciones y todo tipo de acciones en la base de datos para ir manteniendo la información actualizada.

Por ejemplo, fácilmente un módulo puede ser un cuestionario, en donde se tiene que ver quienes pueden participar en él, cuanto tiempo estará en linea y muchas otras cosas no tan fáciles como lo que a alguien se le pasaría por la mente de lo que es un módulo.
También en Moodle también existen pequeños módulos llamados “Bloques”, donde éstos van en las columnas de los costados y que pueden tener cualquier cosa que se pueda agregar, tales como un calendario, un sitio de autentificación, se puede colocar un traductor y un gran número de cosas que no necesariamente tengan relación a lo que hay en el centro de la pantalla.

En relación a estos bloques, su desarrollo puede ser algo bastante simple o algo complejo, dependiendo de lo que quiera hacer. Acá explicare algo bien básico para crear un bloque sencillo, cosa que no podría hacer con un módulo.

Por ejemplo, basta con un sólo archivo .php para crear un bloque, y lo normal es que se inicie de esta forma:

 

class block_mibloque extends block_base {
    function init(){
        $this->title = get_string('Título del Bloque','block_mibloque');
        $this->version = 2007101510;
    }
}

Primero, todo el código se coloca en el archivo “block_mibloque.php” dentro de la carpeta “moodle/blocks/mibloque”. Luego, analizando el código donde practicamente todo está estandarizado, hay que ver que “Título del bloque” y lo de “mibloque” es lo unico que se puede modificar en estas líneas.

Y una vez inicializado, se puede empezar a crear el contenido principal, donde se vería más o menos así:

function get_content(){
        global $USER, $CFG;
        if ($this->content !== NULL){
            return $this->content;
        }
        
        $this->content = new stdClass;
        $this->content->text = 'Contenido del bloque';
        $this->content->footer = 'Fin Bloque';
        return $this->content;
}

Lo que hace esta función es mostrar el contenido. La linea donde sale “global $USER, $CFG” es sólo para inicializar las variables globales para que se puedan usar, en donde la variable $CFG es la que tiene valores como la base de datos, la url específica donde se encuentra Moodle entre otras que se encuentran en la configuración global.

Con “$this->content->text” lo que hace es tomar un contenido donde acepta código HTML, por lo que se puede personalizar fácilmente un contenido, mientras que con “return $this->content” recien mostrará todo lo que tiene “content” incluido el footer, text y todo lo que se haya asignado a la variable.
Como un ejemplo que creé yo, hacemos una consulta en la base de datos para luego mostrar los datos. Antes de hacer la consulta a la base de datos, hay que crear un archivo llamado “upgrade.php” en el directorio “moodle/blocks/mibloque/db” (que realmente no se si es estrictamente necesario, pero por las dudas decidí incluirlo) y que sólo sería esto:

<?php  
function xmldb_block_prueba_upgrade($oldversion=0) {  

    global $CFG, $THEME, $db;

    $result = true;
    return $result;
}
?>

Ahora el código para la consulta:

$query = "SELECT id, username FROM {$CFG->prefix}user ORDER BY id";
        if ($users = get_records_sql($query, 0, 5)) {
            foreach ($users as $user){
                $this->content->text.= 'ID:'.$user->id;
                $this->content->text.= '-Nombre:'.$user->username;
            }
        }
        else{
            //$users = array();
            $this->content->text.= 'No se encontraron usuarios';
        }
        return $this->content;

 

Todo este código, aparte de ir dentro de la función “get_content()”, hace una consulta a la base de datos preguntando por los usuarios que existen, y que en mi caso arrojó 2 resultados.

Como observación, note que se puede devolver un sólo resultado (usando return $this->content), por lo que si se quiere poner a prueba este bloque (que por cierto si funciona), hay que comentar el primer return para que sea efectivo.
Existen muchas otras funciones con las que se puede ir jugando en caso de que se quiera que solo algunos puedan ver el bloque, si se maneja otro tipo de información como formularios o si será algo estático (como mi ejemplo pero con más funcionalidades).