Che cos'è un blocco in Moodle? Un blocco è un elemento che può essere aggiunto a sinistra o a destra, oppure al centro di qualsiasi pagina; normalmente i blocchi sono posizionati a lato rispetto al contenuto principale e scivolano in fondo alla pagina nei layout per mobile.
Dove reperire i blocchi
Esiste un buon numero di blocchi predefiniti per la visualizzazione delle informazioni standard, per esempio abbiamo blocchi per il login, la navigazione, la lista dei corsi, i commenti, i tag, solo per citare alcuni esempi. Per capirsi ancora meglio con un esempio, il blocco login è quello che contiene il codice per la visualizzazione del form di login e il link al recupero password:
Oltre ai blocchi di default, nell'installazione di Moodle esistono molti altri blocchi disponibili per il download, per una panoramica si può visitare la pagina dedicata.
Creazione di un blocco
Il nostro percorso prevede la creazione di un nuovo blocco, tramite i passaggi proposti avremo modo di osservare più da vicino la struttura e conoscere i dettagli del funzionamento.
Nella root dell'installazione di Moodle è presente la directory /blocks
, contenitore dei blocchi disponibili. Per aggiungere un nuovo blocco dobbiamo decidere il nome, in genere tutto in minuscolo, creare una directory con lo stesso nome e i file che ci servono al suo interno. Pertanto creiamo la cartella myblock
.
Il primo file da creare si chiamerà block_mybock.php
, una classe che estende la classe block_base
. Le regole di naming sono piuttosto rigide, l'unica parte flessibile è quella relativa al "myblock" che è il nome del nostro blocco, tutto il resto è standardizzato. Nella classe andrà aggiunto un metodo init()
per valorizzare le proprietà dell'oggetto. Possiamo definire per esempio un titolo da visualizzare e avere un codice di questo tipo:
class block_myblock extends block_base {
public function init() {
$this->titolo = get_string('myblock', 'block_myblock');
}
}
Per rendere visibile il blocco useremo:
function applicable_formats() {
return array('all' => true);
}
Tale impostazione permette di aggiungere il blocco ovunque, per limitarne la visibilità ad alcune pagine rimuoveremo dall'array l'opzione all
e aggiungeremo la lista dei valori desiderati:
'site-index' => true,
'course-view' => true,
Moodle fornisce funzionalità, addinstance
e myaddinstance
, per i blocchi principali. Esse permettono di controllare l'accesso e l'uso dei singoli blocchi, sarà quindi opportuno aggiungerle anche al nostro blocco. Per lo scopo creiamo la cartella db
e un file access.php
al suo interno con il seguente contenuto:
$capabilities = array(
'block/myblock:myaddinstance' => array(
'captype' => 'write',
'contextlevel' => CONTEXT_SYSTEM,
'archetypes' => array(
'user' => CAP_ALLOW
),
'clonepermissionsfrom' => 'moodle/my:manageblocks'
),
'block/myblock:addinstance' => array(
'riskbitmask' => RISK_SPAM | RISK_XSS,
'captype' => 'write',
'contextlevel' => CONTEXT_BLOCK,
'archetypes' => array(
'editingteacher' => CAP_ALLOW,
'manager' => CAP_ALLOW
),
'clonepermissionsfrom' => 'moodle/site:manageblocks'
),
);
Fatto ciò servirà un file per definire le etichette: useremo l'Inglese ma lo scopo è di localizzarlo nella lingua dell'installazione. Il file andrà creato nel percorso /lang/en
e avrà come nome standard block_myblock.php
Il contenuto del file fa riferimento alle etichette per la gestione del blocco e ovviamente il contenuto delle stringhe sarà relativo alla funzione del blocco:
$string['pluginname'] = 'Simple HTML block';
$string['myblock'] = 'Simple HTML';
$string['myblock:addinstance'] = 'Add a new simple HTML block';
$string['myblock:myaddinstance'] = 'Add a new simple HTML block to the My Moodle page';
Infine creiamo il file version.php
per definire la versione del plugin.
$plugin->component = 'block_myblock';
$plugin->version = 2019040100; // YYYYMMDDHH
$plugin->requires = 2019040100; // YYYYMMDDHH
L'ultimo valore fa riferimento alla versione di Moodle installata: in caso di dubbio su tale valore si può verificare quelo presente negli altri blocks.
Nota anche che non includiamo un "?>
" per la chiusura per evitare problemi di spazi bianchi alla fine del file.
Attivazione del blocco
A questo punto decidiamo il contenuto da mostrare, per esempio del semplice testo, e poi attiviamo il blocco. Aggiungiamo quindi alla classe il metodo get_content()
:
public function get_content() {
if ($this->content !== null) {
return $this->content;
}
$this->content = new stdClass;
$this->content->text = 'Il nostro nuovo blocco';
$this->content->footer = 'Il Footer del nostro blocco';
return $this->content;
}
Ora attiviamo la modifica dei blocchi dall'amministrazione e aggiungiamo il blocco che comparirà nella pagina una volta terminata l'operazione d'inserimento.