Ejemplo de código fuente de un plugin para ver cómo poner iconos a cada categoría o subcategoría en Moodle, muy útil a veces para que nuestra plataforma de aprendizaje sea mucho más vistosa y atractiva para el alumno o para atraer a más alumnos.
ÍNDICE
Descripción del ejemplo
Lo primero que vamos a hacer es crear una carpeta para los iconos, que la llamaremos iconos_categorias y la crearemos dentro del directorio raíz donde tengamos instalado nuestro moodle. Es decir sería algo así: moodle/iconos_categorias
Ahora dentro de la carpeta iconos_categorias vamos a poner los iconos correspondientes a cada categoría, con el siguiente formato:
moode_category_ID.png
Es decir, por ejemplo serían así: 1.png, 2.png, 3.png, 4.png, 5.png,…etc.
Cuando tengamos creada la carpeta de iconos con sus respectivos iconos dentro, lo que haremos es añadir los códigos que están expuestos en la sección Código
Por último, para mostrar las categorías con sus iconos, en los ajustes de la página principal, pondremos que muestre la lista de categorías.
NOTA 1: ¡Recordad hacer antes copia de seguridad de todos los archivos que se modifiquen por si acaso o por actualizaciones de Moodle!
NOTA2: Este ejemplo ha sido testeado para Moodle 2.4.11
Código
Código para los iconos de las categorías.
Abrimos /moodle/course/lib.php y añadimos estas dos funciones:
<?php
//Función para contar los cursos de cada categoría
function contaCursos($id) {
global $DB;
$suma = 0;
$resultado = $DB->get_records_sql("SELECT `id`, `coursecount`, `parent` FROM `mdl_course_categories` WHERE `parent`='".$id."'");
foreach($resultado as $obj) {
$suma += $obj->coursecount;
if( !empty($obj->parent) ) {
$suma += contaCursos($obj->id);
}
}
return $suma;
}
//Función para mostrar los iconos de cada categoría
function mostrarIconos($category, $depth=0) {
global $DB, $CFG;
if( $depth != 0 ) return false;
echo '<div style="float: left; margin: 20px; padding: 5px; text-align: center; font-weight: bold; width: 130px; height: 100px;">';
$icono = $CFG->wwwroot.'/iconos_categorias/'.strtr( strtolower($category->id), ' ', '_' ).'.png';
//Para iconos de otros tamaños, cambiarle aquí el height y el width
$link = '<img src="'.$icono.'" title="'.$category->name.'" height="72" width="72" >';
$link .= '<br />'.$category->name;
$url = new moodle_url('/course/category.php', array('id'=>$category->id));
echo html_writer::link($url, html_writer::link($url, $link));
$suma = 0;
$resultado = $DB->get_records_sql("SELECT `coursecount` FROM `mdl_course_categories` WHERE `id`='".$category->id."'");
foreach($resultado as $obj) {
$suma += $obj->coursecount;
}
$suma += contaCursos($category->id);
echo ' ('.$suma.')';
echo '</div>';
}
?>
Buscamos en ese mismo archivo /moodle/course/lib.php la siguiente línea:
print_category_info($category, $depth, $showcourses);
Y la cambiamos por:
mostrarIconos($category, $depth);
Por último abrimos /moodle/index.php y buscamos la línea:
print_whole_category_list(NULL, NULL, NULL, -1, false);
Y añadimos después:
echo '<div style="clear:both"></div>';
Código para los iconos de las subcategorías.
Abrimos /moodle/course/category.php y buscamos la siguiente línea:
foreach ($subcategories as $subcategory) {
Añadimos después
$icono = $CFG->wwwroot.'/iconos_categorias/'.strtr( strtolower($subcategory->id), ' ', '_' ).'.png';
Buscamos la línea:
$text = format_string($subcategory->name, true, array('context' => $context));
La reemplazamos por:
$text = '<img src="'.$icono.'" title="'.format_string($subcategory->name, true, array('context' => $context)).'" height="72" width="72" >'; $text .= '<br />'. format_string($subcategory->name, true, array('context' => $context));
Buscamos la línea:
$table->data[] = array(html_writer::link($baseurl, $text, $attributes));
Añadimos después:
$subcategorieswereshown = (count($table->data) > 0); if ($subcategorieswereshown) { echo '<div style="float: left; margin: 20px; padding: 5px; text-align: center; font-weight: bold; width: 130px; height: 100px;" class="generalbox">'; echo html_writer::link($baseurl, $text, $attributes); echo '</div>'; }
Buscamos:
if ($subcategorieswereshown) { echo html_writer::table($table); }
La reemplazamos por:
echo '<div style="clear:both"></div>';
Previsualización del ejemplo
Las categorías quedarían así:
Y las subcategorías quedarían así: