Añadir lista desplegable, no funciona moodle_select_menu, ni moodle_select:make()

Añadir lista desplegable, no funciona moodle_select_menu, ni moodle_select:make()

de Alejandro Michavila Pallarés -
Número de respuestas: 9
Hola,

Estoy intentado hubicar una lista desplegable (como la selección de yesno o del día) con dos opciones en la vista (view.php) de mi módulo para 2.0.

Para ello, he visto dos formas de hacerlo:

1. La primera:

$menu = new moodle_select_menu;
$menu->options = $gradebook_history_options;
$menu->name = 'restore_gradebook_history';
$menu->selectedoption = $restore_gradebook_history;
echo $OUTPUT->select_menu($menu);

En: http://docs.moodle.org/en/Development:What_to_do_about_weblib_methods_with_lots_of_arguments

2. La segunda:

$select = moodle_select::make($options, $name, $selected); // Required
$select->nothinglabel = $nothing;
$select->nothingvalue = $nothingvalue;
$select->disabled = $disabled;
$select->tabindex = $tabindex;
$select->id = $id;
$select->listbox = $listbox;
$select->multiple = $multiple;
$select->add_classes($class);

echo $OUTPUT->select($select);

En: http://docs.moodle.org/en/Development:Deprecated_functions_in_2.0

Pues resulta que ninguna de las dos opciones me funciona, la primera me muestra el siguiente mensaje de error:

Fatal error: Class 'moodle_select_menu' not found in /var/www/moodle/mod/newmodule/view.php on line 188

Y la segunda, no me muestra nada, página en blanco.



Promedio de valoraciones: -
En respuesta a Alejandro Michavila Pallarés

Re: Añadir lista desplegable, no funciona moodle_select_menu, ni moodle_select:make()

de Xavier Paz -
¿Has incluido la librería lib/outputlib.php al inicio del script?
En respuesta a Xavier Paz

Re: Añadir lista desplegable, no funciona moodle_select_menu, ni moodle_select:make()

de Alejandro Michavila Pallarés -
Hola Xavier, gracias por tu respuesta.

No la he añadido, pero no es necesaria, ya que tengo elementos html simples como una tabla, que la muestra perfectamente:

echo $OUTPUT->header();
echo $OUTPUT->heading();
$table = new html_table();
$table->head = array();
$timetable->data = array();
...
echo html_writer::table($table);
echo $OUTPUT->footer();

Debe ser otra cosa, un saludo.
En respuesta a Alejandro Michavila Pallarés

Re: Añadir lista desplegable, no funciona moodle_select_menu, ni moodle_select:make()

de Iñaki Arenaza -
Imagen de Desarrolladores Imagen de Desarrolladores de plugins Imagen de Documentadores Imagen de Moderadores Imagen de Moodlers de gran ayuda

Me parece que es de nuevo un caso de documentación obsoleta. Desgraciadamente outputlib (y toda la generación de salida en Moodle) ha sufrido varios cambios a lo largo de los últimos meses y seguramente no se ha actualizado la documentación en todos los casos.

En el caso concreto que nos ocupa, hay que usar html_writer::select() (que me sonaba que era así, pero echando una ojeada a la implementación de choose_from_menu() en lib/deprecatedlib.php lo he confirmado definitivamente).

Si no quieres atributos especiales en el HTML de la lista desplegable, algo como esto debería funcionar:

$opciones = array(); $opciones['valor1'] = 'Texto a mostrar 1'; $opciones['valor2'] = 'Texto a mostrar 2'; $opciones['valor3'] = 'Texto a mostrar 3'; $opciones['valor4'] = 'Texto a mostrar 4'; echo html_writer::select($opciones, 'milistadesplegable', 'valor4');

donde 'milistadesplegable' es el nombre del elemento HTML para la lista y 'valor4' es el valor seleccionado por defecto (puede ser la cadena vacía si se desea).

La función permite bastante más flexibilidad, que está documentada en los comentarios de PHPDoc de la propia función.

Saludos. Iñaki.

En respuesta a Iñaki Arenaza

Re: Añadir lista desplegable, no funciona moodle_select_menu, ni moodle_select:make()

de Alejandro Michavila Pallarés -
Hola Iñaki, eres un Moodler de muchísima ayuda, porque la verdad es que solucionas todos los problemas que me van surgiendo, y te lo agradezco muchísimo, me ahorras mucho tiempo, y espero que estos mensajes también ayuden a más gente.

Lo he probado y efectivamente tu solución funciona perfectamente, gracias de nuevo.

¿Cómo puedo capturar ahora la elección del usuario?, ¿sabes si hay algún ejemplo en algún otro módulo?, ¿puede ser algo así?:

if (milistadesplegable->valor4) {
....
} else {
....
}

Un saludo.


En respuesta a Alejandro Michavila Pallarés

Re: Añadir lista desplegable, no funciona moodle_select_menu, ni moodle_select:make()

de Iñaki Arenaza -
Imagen de Desarrolladores Imagen de Desarrolladores de plugins Imagen de Documentadores Imagen de Moderadores Imagen de Moodlers de gran ayuda
Hola Alejando,

¿estás usando MoodleForms para gestionar todo eso? (es la forma más recomendable).

Saludos.
Iñaki.
En respuesta a Iñaki Arenaza

Re: Añadir lista desplegable, no funciona moodle_select_menu, ni moodle_select:make()

de Alejandro Michavila Pallarés -
Hola Iñaki,

Uso MoodleForms en el formulario de creación/edición de instancia, esto es en mod_form.php, con varios elementos checkbox, label, etc...

Pero en mi view.php no uso MoodleForms, uso una tabla con new html_table() y html_writer::table(), y una lista de opciones con html_writer::select(), como me indicaste tu. También uso algún link en las celdas de la tabla, y uso html: '<a href="'.$CFG->wwwroot.'/mod/newmodule/view.php?id='.$id.

Ahora estoy investigando la forma de capturar la selección del usuario de la lista de opciones, pero no estoy viendo nada en el CVS.

Si consigo algo te comento, un saludo.


En respuesta a Alejandro Michavila Pallarés

Re: Añadir lista desplegable, no funciona moodle_select_menu, ni moodle_select:make()

de Alejandro Michavila Pallarés -
Creo que una forma de hacerlo puede ser tener la lista de opciones y un botón de aceptar, cuando el usuario eliga una opción y pulse el botón puedo cargar una url (puede ser la misma), más un parámetro opcional que puedo capturar al principio de la página, con la opción seleccionada y en función de ese valor, mostrar unas opciones u otras.

Para poder hacer esto, necesito saber cómo tratar la selección de la lista.

Cuando tenga la solución la postearé aquí.
En respuesta a Alejandro Michavila Pallarés

Re: Añadir lista desplegable, no funciona moodle_select_menu, ni moodle_select:make()

de Alejandro Michavila Pallarés -
Hola Iñaki,

Cuando intento cargar la misma página con distintos parámetros usando un botón ( echo $OUTPUT->single_button ), me da el siguiente error:

Coding error detected, it must be fixed by a programmer: The theme has already been set up for this page ready for output. Therefore, you can no longer change the theme, or anything that might affect what the current theme is, for example, the course.

¿Cómo puedo hacer para que cuando carge la misma página, no me salte este error?.

Gracias, un saludo.
En respuesta a Alejandro Michavila Pallarés

Re: Añadir lista desplegable, no funciona moodle_select_menu, ni moodle_select:make()

de Alejandro Michavila Pallarés -
Ya está resuelto, porque llamo a un método del $OUTPUT (single_button), y antes hay que llamar al método header de $OUTPUT, y antes del $OUTPUT hay que preparar la página con $PAGE.