SlideShare ist ein Scribd-Unternehmen logo
1 von 12
Downloaden Sie, um offline zu lesen
Creación de
bloques en Moodle
Iñigo Bustos Mardones
Creación de Bloques en Moodle.
¿Qué es un bloque en Moodle?

     El entorno de Moodle, puede variar en función de las necesidades de alumnos y
profesores. Para ello, Moodle ofrece una serie de bloques para realizar varias tareas y
presentar diferentes tipos de información. Existen varios tipos de bloques con
funcionalidades muy diversas, algunos trabajan de forma independiente, mientras que
otros colaboran entre sí.


     Se pueden personalizar los cursos con el uso de diferentes bloques. Aparecerán a
izquierda y derecha de la pantalla, reservando la parte central para mostrar los
contenidos. Los bloques nos dan facilidades y funcionalidades que no podríamos
conseguir de otra manera.


       Puede que los bloques que ya están implementados, no tengan las
funcionalidades que nosotros necesitamos. Por eso, y gracias a esta introducción,
vamos a aclarar los conceptos básicos a la hora de crear nuestro propio bloque para
Moodle.



Primeros pasos

    Para empezar, tendremos que crear la carpeta de nuestro bloque (nuevo_bloque)
dentro de la carpeta blocks en el directorio donde tengamos instalado Moodle. A
continuación crearemos un archivo .php dentro de la carpeta con el prefijo block_ y el
nombre de nuestro bloque (el mismo que el de la carpeta).




El código básico para crear cualquier bloque es el siguiente:

<?php
class block_nuevo_bloque extends block_base {
   function init() {
     $this->title    = 'nuevo bloque';
     $this->version = 2009010100;
   }
}
?>
•    $this->title           = 'nuevo bloque';


     Este será el título que se mostrará en la cabecera de nuestro bloque. Convendría
     que fuera algo descriptivo y que dé una idea a los usuarios de lo que el bloque
     ofrece.


•    $this->version = 2009010100;

     Esto hará referencia a la versión de nuestro bloque, que podrá ser utilizado luego
     por un script para actualizar la base de datos, si fuera necesario, en el caso de que
     hubiera habido actualizaciones o cambios.


Una vez tenemos la estructura inicial del bloque, solo queda añadir un método más
para poder mostrar algo en nuestro bloque:

<?php
class block_nuevo_bloque extends block_base {
  function init() {
    $this->title    ='nuevo bloque';
    $this->version = 2009010100;
  }
  function get_content(){

          $this->content->text .= 'Cuerpo del bloque';

         return $this->content;
     }
}
?>

Ya tenemos un bloque que muestra el mensaje Cuerpo del bloque. Ahora nos
autenticaremos como administradores en nuestra plataforma Moodle e iremos a
Notificaciones en el panel de administración para instalar nuestro nuevo bloque. Una
vez instalado el nuevo bloque, iremos a cualquier curso que tengamos, y activando la
edición añadiremos nuevo_bloque.
Quedará mostrado así en nuestro curso:




Profundizando un poco más


Ahora que ya sabemos lo más básico pasaremos a añadir nuevas funcionalidades a
nuestro bloque.

Un bloque será visualizado tanto por alumnos, como por profesores y administradores.
Puede que eso no siempre nos interese y solo queramos que cierto grupo de personas
accedan a determinada información, o que el bloque muestre cosas diferentes según
quien lo esté visualizando. Dentro de Moodle cada persona tiene un rol diferente, por
lo que nosotros daremos privilegios dependiendo del rol del usuario conectado en ese
momento. A este sistema de dar permisos según roles se le llama capabilities.

Empezaremos creando una carpeta que llamaremos db dentro de nuevo_bloque. A
continuación dentro de esa carpeta crearemos un archivo .php llamado access.




Dentro del archivo access.php añadiremos el siguiente fragmento de código:
  <?php
     $block_nuevo_bloque_capabilities = array(
          'block/nuevo_bloque:teacher_access' => array(
                 'captype' => 'write',
                 'contextlevel' => CONTEXT_MODULE,
                 'legacy' => array(
                            'teacher' => CAP_ALLOW,
                            'editingteacher' => CAP_ALLOW,
                            'coursecreator' => CAP_ALLOW,
                            'admin' => CAP_ALLOW
                            )
        ),
        'block/nuevo_bloque:student_access' => array(
                'captype' => 'write',
                'contextlevel' => CONTEXT_MODULE,
                'legacy' => array(
                          'student' => CAP_ALLOW
                          )
        )
   );
  ?>
En este parte del código hemos creado dos tipos de permisos. Para los profesores y
para los estudiantes. Ahora pasaremos a añadir la nueva funcionalidad a nuestro
bloque dependiendo del usuario que lo esté visualizando.

Antes el bloque solo imprimía Cuerpo del bloque. Ahora va a saludar dependiendo de
su rol a la persona que esté conectada. Añadiremos el siguiente fragmento de código
para manejar las capabilities:

<?php
   if(has_capability('block/nuevo_bloque:teacher_access',
$context, $USER->id, false)){
      $this->content->text .= quot;¡Hola señor profesor!quot;;
   }
   else{
      $this->content->text .= quot;¡Buenos dias queridos
alumnos!quot;;
   }
?>

Detalle de la función has_capability() :

   •   bool has_capability (string $capability, [object $context = NULL], [integer
       $userid = NULL], [bool $doanything = true])
          o string $capability: - nombre de la capability
          o object $context: - un objeto context
          o integer $userid: - un id de usuario
          o bool $doanything: - if false, ignore do anything

Tendremos que añadir tambien un par de líneas más para que todo funcione dentro
del método get_content() :

<?php
global $USER, $COURSE;

      $context = get_context_instance(CONTEXT_COURSE,
$COURSE->id);
?>

Detalle función get_context() :

   •   void get_context_instance ([$level $contextlevel = NULL], [$instance
       $instance = 0])

           o   $level $contextlevel
           o   $instance $instance
Nuestro bloque ahora nos saludará de esta manera, dependiendo del usuario.


Bloque del profesor:




Bloque del alumno:




Ahora que ya manejamos las capabilities podemos mostrar cierta información a los
usuarios que queramos y de esa manera dotar de mucha funcionalidad a nuestros
bloques.

El código completo del bloque hasta ahora quedará así:

<?php

class block_nuevo_bloque extends block_base {
  function init() {
    $this->title    ='nuevo bloque';
    $this->version = 2009010100;
  }
  function get_content(){
      global $USER, $COURSE;

      $context = get_context_instance(CONTEXT_COURSE,
$COURSE->id);

      if(has_capability('block/nuevo_bloque:teacher_access',
$context, $USER->id, false)) {
        $this->content->text .= quot;¡Hola señor profesor!quot;;
    }
    else{
        $this->content->text .= quot;¡Buenos dias queridos
alumnos!quot;;
    }
      return $this->content;
  }
}

?>
Multilingüismo al poder

Tenemos nuestro bloque, pero solo está en un idioma y por lo tanto no lo podemos
compartir con la comunidad. Vamos a traducir nuestro bloque y lo vamos a ofrecer en
inglés y castellano.

Empezaremos creando tantos archivos block_nuevo_bloque.php como idiomas a los
que queramos traducir nuestro bloque. Cada archivo luego irá colocado dentro de la
carpeta correspondiente a su idioma. En nuestro caso irán en
en_utf8block_nuevo_bloque.php y en es_utf8block_nuevo_bloque.php , que son los
paquetes correspondientes a inglés y castellano dentro de la carpeta lang.

Todos los archivos van a ser iguales en cuanto a formato. Aquí tenemos nuestros
bloques traducidos:

Castellano:

<?php
$string['titulo'] = 'Nuevo Bloque';
$string['saludo_profesor'] = '¡Hola señor profesor!';
$string['saludo_alumno'] = 'Hola queridos alumnos';
?>

Inglés:

<?php
$string['titulo'] = 'New block';
$string['saludo_profesor'] = 'Hello Mr. Teacher!';
$string['saludo_alumno'] = 'Hi dear students!';
?>

Ahora que ya tenemos los archivos block_nuevo_bloque.php con todo el contenido del
bloque traducido tenemos que cambiar algunas cosas en el código del bloque para que
se pueda visualizar el contenido en los idiomas deseados.

Utilizaremos la función get_string() y le pasaremos dos parámetros. El primero el texto
a visualizar y el segundo el nombre del archivo con las traducciones.

Ejemplo:

<?php
$this->title = get_string('titulo','block_nuevo_bloque');
?>
El código completo del bloque hasta ahora quedará así:



<?php
class block_nuevo_bloque extends block_base {
   function init() {
     $this->title    =
get_string('titulo','block_nuevo_bloque');
     $this->version = 2009010100;
   }
   function get_content(){
       global $USER, $COURSE;

      $context = get_context_instance(CONTEXT_COURSE,
$COURSE->id);

     if(has_capability('block/nuevo_bloque:teacher_access',
$context, $USER->id, false)) {
       $this->content->text .=
get_string('saludo_profesor','block_nuevo_bloque');
   }
   else{
       $this->content->text .=
get_string('saludo_alumno','block_nuevo_bloque');
   }


         return $this->content;
     }
}
?>


Si seleccionamos como idioma de la plataforma el inglés se mostrará:
Bases de Datos

Cuando estemos trabajando en Moodle necesitaremos acceder a la Base de Datos con
frecuencia. PHP tiene sus propias funciones para ejecutar consultas a Bases de Datos,
pero como estamos en Moodle, utilizaremos sus propias funciones.

Todas las funciones que Moodle utiliza para trabajar con la BD están en la librería
dmllib.php de la carpeta lib. Ésta es la lista de Bases de Datos que actualmente están
probadas y funcionan para Moodle: mysql, postresql, mssql, oracle.

Probaremos una sencilla función de dmllib.php . Hemos elegido la función
get_records_sql() :

   •   get_records_sql($sql, $limitfrom=, $limitnum=)
         Devuelve un array de objetos con el resultado.

Ejemplo de utilización:

<?php
    $request = quot;SELECT * FROM {$CFG->prefix}usersquot;;
    $requested_info = get_records_sql($request);
?>

Para que estas líneas funcionen tenemos que añadir otra línea más, dentro del método
get_content() :

<?php
global $CFG;
?>

Ya tenemos en $requested_info toda la información sobre usuarios que tenemos en la
base de datos como un array de objetos.

Para más información sobre las funciones de la librería dmllib.php:

Versión de Moodle anterior a la 2.0.*

   •   http://docs.moodle.org/en/Development:DML_functions_-_pre_2.0



Versión de Moodle 2.0.* o posterior

   •   http://docs.moodle.org/en/DML_functions
Añadiendo nuestras tablas


Si lo que buscamos es crear una tabla nueva en la base de datos para nuestro nuevo
bloque, lo mas recomendable es utilizar el XMLDB editor que trae integrado Moodle.
En el panel de administración principal pincharemos en Miscellaneous/XMLDB editor
para acceder a la herramienta. El XMLD editor nos creará un instal.xml en la carpeta db
que cargará las tablas que nosotros le indiquemos al instalar el bloque en Moodle.

Buscaremos nuestro bloque en la lista (blocks/nuevo_bloque/db) y a continuación
pulsaremos sobre [Create] . Se recargará la página y tendremos la opción [Load]
disponible que también pulsaremos. Llegados a este punto tendremos ya creado el
instal.xml en nuestra carpeta db y la opción [Edit] disponible. El instal.xml que
tenemos en este momento tendrá cargada una tabla de prueba que podremos editar
si pulsamos [edit].



Ahora podremos editar la tabla nuevo_bloque que nos ha creado o añadir tablas
nuevas. La herramienta es sencilla. Vamos añadiendo nuevos campos y determinando
sus características. Cuando terminemos pulsaremos Change.




Cuando ya tengamos nuestro instal.xml creado con esta herramienta volveremos a [Back
to Main] y pulsaremos [Save] para guardar los cambios realizados. Ahora solo falta
quitar el bloque desde el Panel de Administración y volver a instalarlo para que nos
creé nuestras tablas.
Modificación / Actualización de tablas


Ya sabemos crear nuestras propias tablas con el XMLDB editor, pero puede que en
algún momento tengamos que actualizar esas tablas y no podemos desinstalar el
bloque porque se perderia la información de las tablas que ya tenemos creadas. La
solución es crear un script que nos actualice las tablas necesarias cuando nuestra
versión del bloque sea mayor.

Empezaremos creando un archivo upgrade.php en la carpeta db con esta estructura:

<?php

function xmldb_block_nuevo_bloque_upgrade($oldversion=0) {

     global $CFG, $THEME, $db;
     $result = true;

        if ($result && $oldversion < YYYYMMDD00) {

        //Codigo a añadir para actualizar la BD.

      }
     return $result;
}
?>

Dentro de la estructura if iremos añadiendo funciones para actualizar la BD. Esas
funciones deben ser genéricas para trabajar con las BD, asi que utilizaremos las de
Moodle. Todas esas funciones se encuentran en libddlib.php.

Este ejemplo actualiza el nombre de la tabla anteriormente creada con install.xml:
<?php

function xmldb_block_nuevo_bloque_upgrade($oldversion=0) {

     global $CFG, $THEME, $db;
     $result = true;

        if ($result && $oldversion < YYYYMMDD00) {

        //Código a añadir para actualizar la BD.
        echo quot;Actualizando la Base de Datosquot;;

          $table = new XMLDBTable('nuevo_bloque');
          $result = $result && rename_table($table,
'block_nuevo_bloque');
     }
    return $result;
}
?>
Para más información sobre las funciones de la librería ddlib.php:

Versión de Moodle anterior a la 2.0.*

   •   http://docs.moodle.org/en/Development:DDL_functions_-_pre_2.0

Versión de Moodle 2.0.* o posterior

   •   http://docs.moodle.org/en/Development:DDL_functions


Solo falta cambiar YYYYMMDD00 y ponerle la ultima versión. Pondremos, por
ejemplo 2009050400, que además tendra que coincidir con la nueva vesión del código
del bloque. Por lo tanto, también actualizaremos la linea correspondiente a la versión
en block_nuevo_bloque.php:

<?php
    $this->version = 2009050400;
?>

Ahora, si vamos al Panel de Administración y pinchamos en Notifications se actualizará
nuestra tabla de la Base de Datos sin perder la posible información que tuviéramos ya
guardada.

Weitere ähnliche Inhalte

Andere mochten auch

GoodSpring Портфолио
GoodSpring ПортфолиоGoodSpring Портфолио
GoodSpring ПортфолиоTodor Todorov
 
опоры по орфографии
опоры по орфографииопоры по орфографии
опоры по орфографииAlenavaabel
 
Sentencia caso Europa Telde
Sentencia caso Europa TeldeSentencia caso Europa Telde
Sentencia caso Europa TeldeEnrique Vega
 
Олеся Погуляева «Мамарации! Любишь фотографировать — давайте делать это лучш...
Олеся Погуляева  «Мамарации! Любишь фотографировать — давайте делать это лучш...Олеся Погуляева  «Мамарации! Любишь фотографировать — давайте делать это лучш...
Олеся Погуляева «Мамарации! Любишь фотографировать — давайте делать это лучш...Сергей Соколов
 
Portales educativos
Portales educativosPortales educativos
Portales educativosDante Vila
 

Andere mochten auch (8)

Internet
InternetInternet
Internet
 
GoodSpring Портфолио
GoodSpring ПортфолиоGoodSpring Портфолио
GoodSpring Портфолио
 
Rol2
Rol2Rol2
Rol2
 
опоры по орфографии
опоры по орфографииопоры по орфографии
опоры по орфографии
 
Uso del email en la educacion
Uso del email en la educacionUso del email en la educacion
Uso del email en la educacion
 
Sentencia caso Europa Telde
Sentencia caso Europa TeldeSentencia caso Europa Telde
Sentencia caso Europa Telde
 
Олеся Погуляева «Мамарации! Любишь фотографировать — давайте делать это лучш...
Олеся Погуляева  «Мамарации! Любишь фотографировать — давайте делать это лучш...Олеся Погуляева  «Мамарации! Любишь фотографировать — давайте делать это лучш...
Олеся Погуляева «Мамарации! Любишь фотографировать — давайте делать это лучш...
 
Portales educativos
Portales educativosPortales educativos
Portales educativos
 

Ähnlich wie Creacion Bloques Inigo Bustos

Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensionesJoomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensionesdeivit86
 
Ejercicio de automatizacion IntelliJ+reporte.docx
Ejercicio de automatizacion IntelliJ+reporte.docxEjercicio de automatizacion IntelliJ+reporte.docx
Ejercicio de automatizacion IntelliJ+reporte.docxssuser2e6b96
 
Guía PHP Orientado a Objeto con MVC
Guía PHP Orientado a Objeto con MVC Guía PHP Orientado a Objeto con MVC
Guía PHP Orientado a Objeto con MVC lissette_torrealba
 
Intro aplicaciones web con php
Intro aplicaciones web con phpIntro aplicaciones web con php
Intro aplicaciones web con phpFer Nando
 
Taller desarrollando sitios web multiplataforma
Taller desarrollando sitios web multiplataformaTaller desarrollando sitios web multiplataforma
Taller desarrollando sitios web multiplataformaLuis Beltran
 
Elggcampba 2010 - Customize a Social Network in Elgg without losing patience
Elggcampba 2010 - Customize a Social Network in Elgg without losing patienceElggcampba 2010 - Customize a Social Network in Elgg without losing patience
Elggcampba 2010 - Customize a Social Network in Elgg without losing patienceDiego Gallardo
 
PresentacióN1
PresentacióN1PresentacióN1
PresentacióN1Rokr02
 
Programación orientada a objetos II
Programación orientada a objetos IIProgramación orientada a objetos II
Programación orientada a objetos IIyanburbano
 
Taller introduccion symfony2
Taller introduccion symfony2Taller introduccion symfony2
Taller introduccion symfony2Mario IC
 
Explicacion metodologia 3 capas y base de datos, proyecto de ejemplo jsp
Explicacion metodologia 3 capas y base de datos, proyecto de ejemplo jspExplicacion metodologia 3 capas y base de datos, proyecto de ejemplo jsp
Explicacion metodologia 3 capas y base de datos, proyecto de ejemplo jspBoris Salleg
 
Herencia y Polimorfismo en Java
Herencia y Polimorfismo en JavaHerencia y Polimorfismo en Java
Herencia y Polimorfismo en JavaAme Linares Vivas
 
Puntos que contiene la plataforma de moodle
Puntos que contiene la plataforma de moodlePuntos que contiene la plataforma de moodle
Puntos que contiene la plataforma de moodlekarina Hernàndez
 
modularidad de programación 2da parte (3) (1).pptx
modularidad de programación 2da parte (3) (1).pptxmodularidad de programación 2da parte (3) (1).pptx
modularidad de programación 2da parte (3) (1).pptxjavierccallo
 

Ähnlich wie Creacion Bloques Inigo Bustos (20)

Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensionesJoomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
 
Ejercicio de automatizacion IntelliJ+reporte.docx
Ejercicio de automatizacion IntelliJ+reporte.docxEjercicio de automatizacion IntelliJ+reporte.docx
Ejercicio de automatizacion IntelliJ+reporte.docx
 
Guía PHP Orientado a Objeto con MVC
Guía PHP Orientado a Objeto con MVC Guía PHP Orientado a Objeto con MVC
Guía PHP Orientado a Objeto con MVC
 
Bootstrap
BootstrapBootstrap
Bootstrap
 
Intro aplicaciones web con php
Intro aplicaciones web con phpIntro aplicaciones web con php
Intro aplicaciones web con php
 
Taller desarrollando sitios web multiplataforma
Taller desarrollando sitios web multiplataformaTaller desarrollando sitios web multiplataforma
Taller desarrollando sitios web multiplataforma
 
Guia poo php
Guia poo phpGuia poo php
Guia poo php
 
Elggcampba 2010 - Customize a Social Network in Elgg without losing patience
Elggcampba 2010 - Customize a Social Network in Elgg without losing patienceElggcampba 2010 - Customize a Social Network in Elgg without losing patience
Elggcampba 2010 - Customize a Social Network in Elgg without losing patience
 
9.herencia en java
9.herencia en java9.herencia en java
9.herencia en java
 
1 -programacion_oo
1  -programacion_oo1  -programacion_oo
1 -programacion_oo
 
PresentacióN1
PresentacióN1PresentacióN1
PresentacióN1
 
Introduccion mvc
Introduccion mvcIntroduccion mvc
Introduccion mvc
 
Programación orientada a objetos II
Programación orientada a objetos IIProgramación orientada a objetos II
Programación orientada a objetos II
 
Taller introduccion symfony2
Taller introduccion symfony2Taller introduccion symfony2
Taller introduccion symfony2
 
Explicacion metodologia 3 capas y base de datos, proyecto de ejemplo jsp
Explicacion metodologia 3 capas y base de datos, proyecto de ejemplo jspExplicacion metodologia 3 capas y base de datos, proyecto de ejemplo jsp
Explicacion metodologia 3 capas y base de datos, proyecto de ejemplo jsp
 
Herencia y Polimorfismo en Java
Herencia y Polimorfismo en JavaHerencia y Polimorfismo en Java
Herencia y Polimorfismo en Java
 
Puntos que contiene la plataforma de moodle
Puntos que contiene la plataforma de moodlePuntos que contiene la plataforma de moodle
Puntos que contiene la plataforma de moodle
 
Java beans en jsp
Java beans en jspJava beans en jsp
Java beans en jsp
 
modularidad de programación 2da parte (3) (1).pptx
modularidad de programación 2da parte (3) (1).pptxmodularidad de programación 2da parte (3) (1).pptx
modularidad de programación 2da parte (3) (1).pptx
 
10.herencia en c++
10.herencia en c++10.herencia en c++
10.herencia en c++
 

Mehr von MoodleMoot Euskadi

MoodleMoot Euskadi 2009 - Anibal de la Torre
MoodleMoot Euskadi 2009 - Anibal de la TorreMoodleMoot Euskadi 2009 - Anibal de la Torre
MoodleMoot Euskadi 2009 - Anibal de la TorreMoodleMoot Euskadi
 
Zientzia Hezkuntza Moodle Tere Santos
Zientzia Hezkuntza Moodle Tere SantosZientzia Hezkuntza Moodle Tere Santos
Zientzia Hezkuntza Moodle Tere SantosMoodleMoot Euskadi
 
Migracion De Cursos Ander Beaskoetxea
Migracion De Cursos Ander BeaskoetxeaMigracion De Cursos Ander Beaskoetxea
Migracion De Cursos Ander BeaskoetxeaMoodleMoot Euskadi
 
Moodle eta talde handiak Maialen Sagarna
Moodle eta talde handiak Maialen SagarnaMoodle eta talde handiak Maialen Sagarna
Moodle eta talde handiak Maialen SagarnaMoodleMoot Euskadi
 
Sesiones Online Xabier Basogain
Sesiones Online Xabier BasogainSesiones Online Xabier Basogain
Sesiones Online Xabier BasogainMoodleMoot Euskadi
 
Experiencia Moodle Economia Pedro Flores
Experiencia Moodle Economia Pedro FloresExperiencia Moodle Economia Pedro Flores
Experiencia Moodle Economia Pedro FloresMoodleMoot Euskadi
 
Experiencia Moodle Ugutz Garitaonaindia
Experiencia Moodle Ugutz GaritaonaindiaExperiencia Moodle Ugutz Garitaonaindia
Experiencia Moodle Ugutz GaritaonaindiaMoodleMoot Euskadi
 
Personalizacion Moodle Juan Manuel Vaca
Personalizacion Moodle Juan Manuel VacaPersonalizacion Moodle Juan Manuel Vaca
Personalizacion Moodle Juan Manuel VacaMoodleMoot Euskadi
 
Nazaret Zentroa Proyecto EnseñA
Nazaret Zentroa Proyecto EnseñANazaret Zentroa Proyecto EnseñA
Nazaret Zentroa Proyecto EnseñAMoodleMoot Euskadi
 
En Las Puertas Del 2010 Esther Gtz Orrantia
En Las Puertas Del 2010 Esther Gtz OrrantiaEn Las Puertas Del 2010 Esther Gtz Orrantia
En Las Puertas Del 2010 Esther Gtz OrrantiaMoodleMoot Euskadi
 
Experiencia Del Profesorado Egile Tknika
Experiencia Del Profesorado Egile TknikaExperiencia Del Profesorado Egile Tknika
Experiencia Del Profesorado Egile TknikaMoodleMoot Euskadi
 
Convertir Moodle En Un Punto Itxaro Latasa
Convertir Moodle En Un Punto Itxaro LatasaConvertir Moodle En Un Punto Itxaro Latasa
Convertir Moodle En Un Punto Itxaro LatasaMoodleMoot Euskadi
 
Proyecto Items Bernat Martinez
Proyecto Items Bernat MartinezProyecto Items Bernat Martinez
Proyecto Items Bernat MartinezMoodleMoot Euskadi
 
PersonalizacióN Moodle Juan Vaca
PersonalizacióN Moodle Juan VacaPersonalizacióN Moodle Juan Vaca
PersonalizacióN Moodle Juan VacaMoodleMoot Euskadi
 

Mehr von MoodleMoot Euskadi (20)

MoodleMoot Euskadi 2009 - Anibal de la Torre
MoodleMoot Euskadi 2009 - Anibal de la TorreMoodleMoot Euskadi 2009 - Anibal de la Torre
MoodleMoot Euskadi 2009 - Anibal de la Torre
 
Zientzia Hezkuntza Moodle Tere Santos
Zientzia Hezkuntza Moodle Tere SantosZientzia Hezkuntza Moodle Tere Santos
Zientzia Hezkuntza Moodle Tere Santos
 
Migracion De Cursos Ander Beaskoetxea
Migracion De Cursos Ander BeaskoetxeaMigracion De Cursos Ander Beaskoetxea
Migracion De Cursos Ander Beaskoetxea
 
Moodle eta talde handiak Maialen Sagarna
Moodle eta talde handiak Maialen SagarnaMoodle eta talde handiak Maialen Sagarna
Moodle eta talde handiak Maialen Sagarna
 
Gestion De Moodle Jon Iza
Gestion De Moodle Jon IzaGestion De Moodle Jon Iza
Gestion De Moodle Jon Iza
 
Sesiones Online Xabier Basogain
Sesiones Online Xabier BasogainSesiones Online Xabier Basogain
Sesiones Online Xabier Basogain
 
Experiencia Moodle Economia Pedro Flores
Experiencia Moodle Economia Pedro FloresExperiencia Moodle Economia Pedro Flores
Experiencia Moodle Economia Pedro Flores
 
Experiencia Moodle Ugutz Garitaonaindia
Experiencia Moodle Ugutz GaritaonaindiaExperiencia Moodle Ugutz Garitaonaindia
Experiencia Moodle Ugutz Garitaonaindia
 
Personalizacion Moodle Juan Manuel Vaca
Personalizacion Moodle Juan Manuel VacaPersonalizacion Moodle Juan Manuel Vaca
Personalizacion Moodle Juan Manuel Vaca
 
Nazaret Zentroa Proyecto EnseñA
Nazaret Zentroa Proyecto EnseñANazaret Zentroa Proyecto EnseñA
Nazaret Zentroa Proyecto EnseñA
 
En Las Puertas Del 2010 Esther Gtz Orrantia
En Las Puertas Del 2010 Esther Gtz OrrantiaEn Las Puertas Del 2010 Esther Gtz Orrantia
En Las Puertas Del 2010 Esther Gtz Orrantia
 
Experiencia Del Profesorado Egile Tknika
Experiencia Del Profesorado Egile TknikaExperiencia Del Profesorado Egile Tknika
Experiencia Del Profesorado Egile Tknika
 
Convertir Moodle En Un Punto Itxaro Latasa
Convertir Moodle En Un Punto Itxaro LatasaConvertir Moodle En Un Punto Itxaro Latasa
Convertir Moodle En Un Punto Itxaro Latasa
 
Moodle Mahara Eduardo Sanchez
Moodle Mahara Eduardo SanchezMoodle Mahara Eduardo Sanchez
Moodle Mahara Eduardo Sanchez
 
Gestion Moodle Jon Iza
Gestion Moodle Jon IzaGestion Moodle Jon Iza
Gestion Moodle Jon Iza
 
Puertas 2010 Esther Gutierrez
Puertas 2010 Esther GutierrezPuertas 2010 Esther Gutierrez
Puertas 2010 Esther Gutierrez
 
Proyecto Items Bernat Martinez
Proyecto Items Bernat MartinezProyecto Items Bernat Martinez
Proyecto Items Bernat Martinez
 
PersonalizacióN Moodle Juan Vaca
PersonalizacióN Moodle Juan VacaPersonalizacióN Moodle Juan Vaca
PersonalizacióN Moodle Juan Vaca
 
Moodle Talde Maialen Sagarna
Moodle Talde Maialen SagarnaMoodle Talde Maialen Sagarna
Moodle Talde Maialen Sagarna
 
Moodleri Bigarren Juan Ezeiza
Moodleri Bigarren Juan EzeizaMoodleri Bigarren Juan Ezeiza
Moodleri Bigarren Juan Ezeiza
 

Kürzlich hochgeladen

Programacion Anual Matemática4 MPG 2024 Ccesa007.pdf
Programacion Anual Matemática4    MPG 2024  Ccesa007.pdfProgramacion Anual Matemática4    MPG 2024  Ccesa007.pdf
Programacion Anual Matemática4 MPG 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
plan de capacitacion docente AIP 2024 clllll.pdf
plan de capacitacion docente  AIP 2024          clllll.pdfplan de capacitacion docente  AIP 2024          clllll.pdf
plan de capacitacion docente AIP 2024 clllll.pdfenelcielosiempre
 
MAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMarjorie Burga
 
origen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioorigen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioELIASAURELIOCHAVEZCA1
 
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSOCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSYadi Campos
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.amayarogel
 
Programacion Anual Matemática5 MPG 2024 Ccesa007.pdf
Programacion Anual Matemática5    MPG 2024  Ccesa007.pdfProgramacion Anual Matemática5    MPG 2024  Ccesa007.pdf
Programacion Anual Matemática5 MPG 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
proyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niñoproyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niñotapirjackluis
 
Qué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaQué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaDecaunlz
 
Ley 21.545 - Circular Nº 586.pdf circular
Ley 21.545 - Circular Nº 586.pdf circularLey 21.545 - Circular Nº 586.pdf circular
Ley 21.545 - Circular Nº 586.pdf circularMooPandrea
 
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICABIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICAÁngel Encinas
 
INSTRUCCION PREPARATORIA DE TIRO .pptx
INSTRUCCION PREPARATORIA DE TIRO   .pptxINSTRUCCION PREPARATORIA DE TIRO   .pptx
INSTRUCCION PREPARATORIA DE TIRO .pptxdeimerhdz21
 
plande accion dl aula de innovación pedagogica 2024.pdf
plande accion dl aula de innovación pedagogica 2024.pdfplande accion dl aula de innovación pedagogica 2024.pdf
plande accion dl aula de innovación pedagogica 2024.pdfenelcielosiempre
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxlclcarmen
 
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdfGUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdfPaolaRopero2
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...JAVIER SOLIS NOYOLA
 
Imperialismo informal en Europa y el imperio
Imperialismo informal en Europa y el imperioImperialismo informal en Europa y el imperio
Imperialismo informal en Europa y el imperiomiralbaipiales2016
 
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdfEjercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdfMaritzaRetamozoVera
 
ORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptx
ORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptxORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptx
ORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptxnandoapperscabanilla
 

Kürzlich hochgeladen (20)

Programacion Anual Matemática4 MPG 2024 Ccesa007.pdf
Programacion Anual Matemática4    MPG 2024  Ccesa007.pdfProgramacion Anual Matemática4    MPG 2024  Ccesa007.pdf
Programacion Anual Matemática4 MPG 2024 Ccesa007.pdf
 
plan de capacitacion docente AIP 2024 clllll.pdf
plan de capacitacion docente  AIP 2024          clllll.pdfplan de capacitacion docente  AIP 2024          clllll.pdf
plan de capacitacion docente AIP 2024 clllll.pdf
 
MAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grande
 
origen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioorigen y desarrollo del ensayo literario
origen y desarrollo del ensayo literario
 
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSOCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
 
La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.La triple Naturaleza del Hombre estudio.
La triple Naturaleza del Hombre estudio.
 
Programacion Anual Matemática5 MPG 2024 Ccesa007.pdf
Programacion Anual Matemática5    MPG 2024  Ccesa007.pdfProgramacion Anual Matemática5    MPG 2024  Ccesa007.pdf
Programacion Anual Matemática5 MPG 2024 Ccesa007.pdf
 
proyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niñoproyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niño
 
Qué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaQué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativa
 
Ley 21.545 - Circular Nº 586.pdf circular
Ley 21.545 - Circular Nº 586.pdf circularLey 21.545 - Circular Nº 586.pdf circular
Ley 21.545 - Circular Nº 586.pdf circular
 
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICABIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
 
INSTRUCCION PREPARATORIA DE TIRO .pptx
INSTRUCCION PREPARATORIA DE TIRO   .pptxINSTRUCCION PREPARATORIA DE TIRO   .pptx
INSTRUCCION PREPARATORIA DE TIRO .pptx
 
plande accion dl aula de innovación pedagogica 2024.pdf
plande accion dl aula de innovación pedagogica 2024.pdfplande accion dl aula de innovación pedagogica 2024.pdf
plande accion dl aula de innovación pedagogica 2024.pdf
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
 
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdfGUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
 
Imperialismo informal en Europa y el imperio
Imperialismo informal en Europa y el imperioImperialismo informal en Europa y el imperio
Imperialismo informal en Europa y el imperio
 
Sesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronósticoSesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronóstico
 
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdfEjercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
Ejercicios de PROBLEMAS PAEV 6 GRADO 2024.pdf
 
ORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptx
ORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptxORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptx
ORGANIZACIÓN SOCIAL INCA EN EL TAHUANTINSUYO.pptx
 

Creacion Bloques Inigo Bustos

  • 1. Creación de bloques en Moodle Iñigo Bustos Mardones
  • 2. Creación de Bloques en Moodle. ¿Qué es un bloque en Moodle? El entorno de Moodle, puede variar en función de las necesidades de alumnos y profesores. Para ello, Moodle ofrece una serie de bloques para realizar varias tareas y presentar diferentes tipos de información. Existen varios tipos de bloques con funcionalidades muy diversas, algunos trabajan de forma independiente, mientras que otros colaboran entre sí. Se pueden personalizar los cursos con el uso de diferentes bloques. Aparecerán a izquierda y derecha de la pantalla, reservando la parte central para mostrar los contenidos. Los bloques nos dan facilidades y funcionalidades que no podríamos conseguir de otra manera. Puede que los bloques que ya están implementados, no tengan las funcionalidades que nosotros necesitamos. Por eso, y gracias a esta introducción, vamos a aclarar los conceptos básicos a la hora de crear nuestro propio bloque para Moodle. Primeros pasos Para empezar, tendremos que crear la carpeta de nuestro bloque (nuevo_bloque) dentro de la carpeta blocks en el directorio donde tengamos instalado Moodle. A continuación crearemos un archivo .php dentro de la carpeta con el prefijo block_ y el nombre de nuestro bloque (el mismo que el de la carpeta). El código básico para crear cualquier bloque es el siguiente: <?php class block_nuevo_bloque extends block_base { function init() { $this->title = 'nuevo bloque'; $this->version = 2009010100; } } ?>
  • 3. $this->title = 'nuevo bloque'; Este será el título que se mostrará en la cabecera de nuestro bloque. Convendría que fuera algo descriptivo y que dé una idea a los usuarios de lo que el bloque ofrece. • $this->version = 2009010100; Esto hará referencia a la versión de nuestro bloque, que podrá ser utilizado luego por un script para actualizar la base de datos, si fuera necesario, en el caso de que hubiera habido actualizaciones o cambios. Una vez tenemos la estructura inicial del bloque, solo queda añadir un método más para poder mostrar algo en nuestro bloque: <?php class block_nuevo_bloque extends block_base { function init() { $this->title ='nuevo bloque'; $this->version = 2009010100; } function get_content(){ $this->content->text .= 'Cuerpo del bloque'; return $this->content; } } ?> Ya tenemos un bloque que muestra el mensaje Cuerpo del bloque. Ahora nos autenticaremos como administradores en nuestra plataforma Moodle e iremos a Notificaciones en el panel de administración para instalar nuestro nuevo bloque. Una vez instalado el nuevo bloque, iremos a cualquier curso que tengamos, y activando la edición añadiremos nuevo_bloque.
  • 4. Quedará mostrado así en nuestro curso: Profundizando un poco más Ahora que ya sabemos lo más básico pasaremos a añadir nuevas funcionalidades a nuestro bloque. Un bloque será visualizado tanto por alumnos, como por profesores y administradores. Puede que eso no siempre nos interese y solo queramos que cierto grupo de personas accedan a determinada información, o que el bloque muestre cosas diferentes según quien lo esté visualizando. Dentro de Moodle cada persona tiene un rol diferente, por lo que nosotros daremos privilegios dependiendo del rol del usuario conectado en ese momento. A este sistema de dar permisos según roles se le llama capabilities. Empezaremos creando una carpeta que llamaremos db dentro de nuevo_bloque. A continuación dentro de esa carpeta crearemos un archivo .php llamado access. Dentro del archivo access.php añadiremos el siguiente fragmento de código: <?php $block_nuevo_bloque_capabilities = array( 'block/nuevo_bloque:teacher_access' => array( 'captype' => 'write', 'contextlevel' => CONTEXT_MODULE, 'legacy' => array( 'teacher' => CAP_ALLOW, 'editingteacher' => CAP_ALLOW, 'coursecreator' => CAP_ALLOW, 'admin' => CAP_ALLOW ) ), 'block/nuevo_bloque:student_access' => array( 'captype' => 'write', 'contextlevel' => CONTEXT_MODULE, 'legacy' => array( 'student' => CAP_ALLOW ) ) ); ?>
  • 5. En este parte del código hemos creado dos tipos de permisos. Para los profesores y para los estudiantes. Ahora pasaremos a añadir la nueva funcionalidad a nuestro bloque dependiendo del usuario que lo esté visualizando. Antes el bloque solo imprimía Cuerpo del bloque. Ahora va a saludar dependiendo de su rol a la persona que esté conectada. Añadiremos el siguiente fragmento de código para manejar las capabilities: <?php if(has_capability('block/nuevo_bloque:teacher_access', $context, $USER->id, false)){ $this->content->text .= quot;¡Hola señor profesor!quot;; } else{ $this->content->text .= quot;¡Buenos dias queridos alumnos!quot;; } ?> Detalle de la función has_capability() : • bool has_capability (string $capability, [object $context = NULL], [integer $userid = NULL], [bool $doanything = true]) o string $capability: - nombre de la capability o object $context: - un objeto context o integer $userid: - un id de usuario o bool $doanything: - if false, ignore do anything Tendremos que añadir tambien un par de líneas más para que todo funcione dentro del método get_content() : <?php global $USER, $COURSE; $context = get_context_instance(CONTEXT_COURSE, $COURSE->id); ?> Detalle función get_context() : • void get_context_instance ([$level $contextlevel = NULL], [$instance $instance = 0]) o $level $contextlevel o $instance $instance
  • 6. Nuestro bloque ahora nos saludará de esta manera, dependiendo del usuario. Bloque del profesor: Bloque del alumno: Ahora que ya manejamos las capabilities podemos mostrar cierta información a los usuarios que queramos y de esa manera dotar de mucha funcionalidad a nuestros bloques. El código completo del bloque hasta ahora quedará así: <?php class block_nuevo_bloque extends block_base { function init() { $this->title ='nuevo bloque'; $this->version = 2009010100; } function get_content(){ global $USER, $COURSE; $context = get_context_instance(CONTEXT_COURSE, $COURSE->id); if(has_capability('block/nuevo_bloque:teacher_access', $context, $USER->id, false)) { $this->content->text .= quot;¡Hola señor profesor!quot;; } else{ $this->content->text .= quot;¡Buenos dias queridos alumnos!quot;; } return $this->content; } } ?>
  • 7. Multilingüismo al poder Tenemos nuestro bloque, pero solo está en un idioma y por lo tanto no lo podemos compartir con la comunidad. Vamos a traducir nuestro bloque y lo vamos a ofrecer en inglés y castellano. Empezaremos creando tantos archivos block_nuevo_bloque.php como idiomas a los que queramos traducir nuestro bloque. Cada archivo luego irá colocado dentro de la carpeta correspondiente a su idioma. En nuestro caso irán en en_utf8block_nuevo_bloque.php y en es_utf8block_nuevo_bloque.php , que son los paquetes correspondientes a inglés y castellano dentro de la carpeta lang. Todos los archivos van a ser iguales en cuanto a formato. Aquí tenemos nuestros bloques traducidos: Castellano: <?php $string['titulo'] = 'Nuevo Bloque'; $string['saludo_profesor'] = '¡Hola señor profesor!'; $string['saludo_alumno'] = 'Hola queridos alumnos'; ?> Inglés: <?php $string['titulo'] = 'New block'; $string['saludo_profesor'] = 'Hello Mr. Teacher!'; $string['saludo_alumno'] = 'Hi dear students!'; ?> Ahora que ya tenemos los archivos block_nuevo_bloque.php con todo el contenido del bloque traducido tenemos que cambiar algunas cosas en el código del bloque para que se pueda visualizar el contenido en los idiomas deseados. Utilizaremos la función get_string() y le pasaremos dos parámetros. El primero el texto a visualizar y el segundo el nombre del archivo con las traducciones. Ejemplo: <?php $this->title = get_string('titulo','block_nuevo_bloque'); ?>
  • 8. El código completo del bloque hasta ahora quedará así: <?php class block_nuevo_bloque extends block_base { function init() { $this->title = get_string('titulo','block_nuevo_bloque'); $this->version = 2009010100; } function get_content(){ global $USER, $COURSE; $context = get_context_instance(CONTEXT_COURSE, $COURSE->id); if(has_capability('block/nuevo_bloque:teacher_access', $context, $USER->id, false)) { $this->content->text .= get_string('saludo_profesor','block_nuevo_bloque'); } else{ $this->content->text .= get_string('saludo_alumno','block_nuevo_bloque'); } return $this->content; } } ?> Si seleccionamos como idioma de la plataforma el inglés se mostrará:
  • 9. Bases de Datos Cuando estemos trabajando en Moodle necesitaremos acceder a la Base de Datos con frecuencia. PHP tiene sus propias funciones para ejecutar consultas a Bases de Datos, pero como estamos en Moodle, utilizaremos sus propias funciones. Todas las funciones que Moodle utiliza para trabajar con la BD están en la librería dmllib.php de la carpeta lib. Ésta es la lista de Bases de Datos que actualmente están probadas y funcionan para Moodle: mysql, postresql, mssql, oracle. Probaremos una sencilla función de dmllib.php . Hemos elegido la función get_records_sql() : • get_records_sql($sql, $limitfrom=, $limitnum=) Devuelve un array de objetos con el resultado. Ejemplo de utilización: <?php $request = quot;SELECT * FROM {$CFG->prefix}usersquot;; $requested_info = get_records_sql($request); ?> Para que estas líneas funcionen tenemos que añadir otra línea más, dentro del método get_content() : <?php global $CFG; ?> Ya tenemos en $requested_info toda la información sobre usuarios que tenemos en la base de datos como un array de objetos. Para más información sobre las funciones de la librería dmllib.php: Versión de Moodle anterior a la 2.0.* • http://docs.moodle.org/en/Development:DML_functions_-_pre_2.0 Versión de Moodle 2.0.* o posterior • http://docs.moodle.org/en/DML_functions
  • 10. Añadiendo nuestras tablas Si lo que buscamos es crear una tabla nueva en la base de datos para nuestro nuevo bloque, lo mas recomendable es utilizar el XMLDB editor que trae integrado Moodle. En el panel de administración principal pincharemos en Miscellaneous/XMLDB editor para acceder a la herramienta. El XMLD editor nos creará un instal.xml en la carpeta db que cargará las tablas que nosotros le indiquemos al instalar el bloque en Moodle. Buscaremos nuestro bloque en la lista (blocks/nuevo_bloque/db) y a continuación pulsaremos sobre [Create] . Se recargará la página y tendremos la opción [Load] disponible que también pulsaremos. Llegados a este punto tendremos ya creado el instal.xml en nuestra carpeta db y la opción [Edit] disponible. El instal.xml que tenemos en este momento tendrá cargada una tabla de prueba que podremos editar si pulsamos [edit]. Ahora podremos editar la tabla nuevo_bloque que nos ha creado o añadir tablas nuevas. La herramienta es sencilla. Vamos añadiendo nuevos campos y determinando sus características. Cuando terminemos pulsaremos Change. Cuando ya tengamos nuestro instal.xml creado con esta herramienta volveremos a [Back to Main] y pulsaremos [Save] para guardar los cambios realizados. Ahora solo falta quitar el bloque desde el Panel de Administración y volver a instalarlo para que nos creé nuestras tablas.
  • 11. Modificación / Actualización de tablas Ya sabemos crear nuestras propias tablas con el XMLDB editor, pero puede que en algún momento tengamos que actualizar esas tablas y no podemos desinstalar el bloque porque se perderia la información de las tablas que ya tenemos creadas. La solución es crear un script que nos actualice las tablas necesarias cuando nuestra versión del bloque sea mayor. Empezaremos creando un archivo upgrade.php en la carpeta db con esta estructura: <?php function xmldb_block_nuevo_bloque_upgrade($oldversion=0) { global $CFG, $THEME, $db; $result = true; if ($result && $oldversion < YYYYMMDD00) { //Codigo a añadir para actualizar la BD. } return $result; } ?> Dentro de la estructura if iremos añadiendo funciones para actualizar la BD. Esas funciones deben ser genéricas para trabajar con las BD, asi que utilizaremos las de Moodle. Todas esas funciones se encuentran en libddlib.php. Este ejemplo actualiza el nombre de la tabla anteriormente creada con install.xml: <?php function xmldb_block_nuevo_bloque_upgrade($oldversion=0) { global $CFG, $THEME, $db; $result = true; if ($result && $oldversion < YYYYMMDD00) { //Código a añadir para actualizar la BD. echo quot;Actualizando la Base de Datosquot;; $table = new XMLDBTable('nuevo_bloque'); $result = $result && rename_table($table, 'block_nuevo_bloque'); } return $result; } ?>
  • 12. Para más información sobre las funciones de la librería ddlib.php: Versión de Moodle anterior a la 2.0.* • http://docs.moodle.org/en/Development:DDL_functions_-_pre_2.0 Versión de Moodle 2.0.* o posterior • http://docs.moodle.org/en/Development:DDL_functions Solo falta cambiar YYYYMMDD00 y ponerle la ultima versión. Pondremos, por ejemplo 2009050400, que además tendra que coincidir con la nueva vesión del código del bloque. Por lo tanto, también actualizaremos la linea correspondiente a la versión en block_nuevo_bloque.php: <?php $this->version = 2009050400; ?> Ahora, si vamos al Panel de Administración y pinchamos en Notifications se actualizará nuestra tabla de la Base de Datos sin perder la posible información que tuviéramos ya guardada.