Ejemplo Moodle: iconos en categorías

Logo de Moodle

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.

 

 

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í:

Imagen Categorías Moodle

 

 

Y las subcategorías quedarían así:

Imagen subcategorías moodle

 

 

 

Valoración General

[Valoraciones:  1    Promedio:  4 de 5]