¿En cuantas aplicaciones lo que deseamos es seleccionar un conjunto de información y sobre ese conjunto, hacer actuaciones? Puede ser una empresa y centrar los datos sobre una dirección o sección. Puede ser un colegio y centrar la actuación en una clase. Hay miles de ejemplos donde se produce esta misma situación.
Como veremos, con PHPRunner se resuelve de forma bastante sencilla. Lo necesario es conocer algunas características del producto que no es habitual su utilización.
En este ejemplo que voy a utilizar para explicar la solución, lo que se desea es, de los datos de un colegio seleccionar una clase y sobre esta clase, que aparezca un menú contextual que nos permita gestionar los datos de dicha clase. Dará la sensación de un menú dinámico, pero no lo es tanto. Veremos lo fácil que es resolver este requisito.
Objetivo
Del conjunto de todos los datos (colegio) vamos a seleccionar un conjunto (clase) y sobre los datos de la clase seleccionada, actualizamos su información.
DEMO: https://fhumanes.com/menu
Solución técnica
Voy a explicar funcionalmente qué he hecho, de cara a que se entienda la solución.
Cuando accedemos a la consulta de los colegios o clases, vemos el conjunto de ellos que hay en el sistema. Tenemos 2 botones para fijar o limpiar, la selección de la clase con la que queremos trabajar.
(1) Botón para fijar la clase con la que deseamos trabajar. (3) se selecciona el registro con el que queremos hacer la acción.
(2) botón para limpiar la selección que previamente se haya hecho.
Cuando se ha seleccionado la clase se habilita el menú (1) indicando la clase con la que se está trabajando (contexto).
(2) toda la información que se facilita está sujeta a la selección del contexto previamente fijado.
En las pantallas que están «bajo» el control del contexto, sus desplegables se ajustan a los datos del citado contexto. Sólo aparecen las asignaturas y alumnos de la clase «fijada».
Modelo de datos
Se muestra el modelo para que se pueda apreciar que existen tablas que disponen de la totalidad de la información (profesores, alumnos, asignaturas) y que después existen las tablas que relacionan estas informaciones con las clases (college).
El botón de «Fix College» tiene este código:
$result["txt"] = "No college has been selected"; $count = 0; while ( $data = $button->getNextSelectedRecord() ) { $id = $data['id_menu_college']; $code = $data['code']; $name = $data['name']; $count += 1; } if ($count == 0 ){ $result["txt"] = "No college has been selected"; } if ($count > 1 ) { $result["txt"] = "Only one college can be selected"; } if ($count == 1 ) { $result["txt"] = "OK"; $_SESSION['id'] = $id; $_SESSION['code'] = $code; $_SESSION['name'] = $name; }
Principalmente, lo que hace, si todo va bien, es crear 3 variables de sesión con los datos del «college». Estas variables se van a utilizar para la selección de la información y adaptación del menú.
En el evento de menú «Menu item:Modify», he codificado:
$title = $menuItem->getTitle(); $prefix = substr($title,0, 3); if ($prefix == 'm1_' and !isset($_SESSION['code'])) { // Yes No College selected or displays the menu return false; } if ( $prefix == 'm1_' ) { $title = substr($title,3); // Clean prefix of title $menuItem->setTitle($title); } if ($title == 'college' ) { $menuItem->setTitle('<span style="color:Tomato;"><b>'.$_SESSION['code'].' - '.$_SESSION['name'].'</b></span>'); } return true;
Para el menú, construido como:
Todas las opciones que empiezan por «m1_» las trata para mostrarlas si previamente se ha seleccionado «college» o se «eliminan» si todavía no se ha hecho.
La selección de los datos del «college» seleccionado se hace mediante el evento «After table initialized»:
$query->addWhere("menu_college_id=".$_SESSION["id"]);
PHPRunner tiene muchísimas facilidades para adaptar el interfaz y los datos y hace que cosas como estas sean muy, muy sencillas de programar.
Para cualquier duda o lo que necesitéis, contactar conmigo a través de mi email [email protected]
Os dejo el ejemplo para que lo podáis instalar en vuestros Windows y hagáis todas las pruebas y ajustes que consideréis oportunos.