Problema con select dinamico en un bloque

Problema con select dinamico en un bloque

de Asier Ramos Martinez -
Número de respuestas: 7
Quiero añadir en un bloque personalizado un select dinamico con registros de una base de datos. El problema que me encuentro es que al meterlo en el bloque me sale fuera del select. Adjunto codigo PHP, Imagen del resultado y Codigo Html.

El codigo del bloque:
class block_prueba1 extends block_list {

function init() {
$this->title = get_string('prueba1', 'block_prueba1');
$this->version = 2004111200;
}

//Añadir contenido al bloque
function get_content() {
global $USER;
global $CFG;
global $COURSE;
//include('consulta.php');
if ($this->content !== NULL) {
return $this->content;
}

$SQL="SELECT id, name FROM {$CFG->prefix}groups";

// Voy imprimiendo el primer select compuesto por los grupos
$grupos=array();
$cont=0;
$log=get_records_sql($SQL);

$tiempoactividad=$this->CalculaTiempo($USER->id);
$this->content = new stdClass;
$this->content->items = array();
$this->content->items[]="Grupos:";
$this->content->items[]="<select name='grupos' id='grupos'>";
$this->content->items[]="<option value='0'>Elige</option>";
foreach($log as $registro)
{
$this->content->items[]="<option value='".$registro->id."'>".$registro->name."</option>";
}
$this->content->items[]="</select>";

return $this->content;
}

y me lo muestra de la siguiente manera:
09-09-200911-22-16.png

y el codigo Html que me muestra es el siguiente:
<div class="i1"><div class="i2"><div class="i3"><div class="content">
<ul class="list">
<li class="r0"><div class="column c1">Grupos:</div></li>
<li class="r1"><div class="column c1"><select name="grupos" id="grupos"></select></div></li>
<li class="r0"><div class="column c1">Elige</div></li>
<li class="r1"><div class="column c1">cehat</div></li>
<li class="r0"><div class="column c1">madrid</div></li>
<li class="r1"><div class="column c1">resto</div></li>
<li class="r0"><div class="column c1">madrid</div></li>
<li class="r1"><div class="column c1">resto</div></li>
<li class="r0"><div class="column c1">grupo2</div></li>
<li class="r1"><div class="column c1">grupo1</div></li>
<li class="r0"><div class="column c1">madrid</div></li>
<li class="r1"><div class="column c1">resto</div></li>
<li class="r0"><div class="column c1">madrid</div></li>
<li class="r1"><div class="column c1">resto</div></li>
<li class="r0"><div class="column c1">madrid</div></li>
<li class="r1"><div class="column c1">resto</div></li>
<li class="r0"><div class="column c1">madrid</div></li>
<li class="r1"><div class="column c1">resto</div></li>
<li class="r0"><div class="column c1">madrid</div></li>
<li class="r1"><div class="column c1">resto</div></li>
<li class="r0"><div class="column c1">madrid</div></li>
<li class="r1"><div class="column c1">resto</div></li>
<li class="r0"><div class="column c1">1</div></li>
<li class="r1"><div class="column c1"></div></li>
</ul> </div></div></div></div><div class="bb"><div>&nbsp;</div></div></div></div>

Promedio de valoraciones: -
En respuesta a Asier Ramos Martinez

Re: Problema con select dinamico en un bloque

de Xavier Paz -
Creo que tendrás que meter todo el código html para generar el select en una sola variable y guardar dicha variable como item, ya que tal y como lo tienes implementado, Moodle considera que cada elemento option es un elemento independiente del select y creo que es por eso que los muestra fuera.

Prueba esto :

$tiempoactividad=$this->CalculaTiempo($USER->id);
$this->content = new stdClass;
$this->content->items = array();
$this->content->items[]="Grupos:";
$salida_select = "<select name='grupos' id='grupos'>";
$salida_select .= "<option value='0'>Elige</option>";

foreach($log as $registro)
{
$salida_select .= "<option value='".$registro->id."'>".$registro->name."</option>";
}

$salida_select .= "</select>";
$this->content->items[]= $salida_select;

return $this->content;
}
En respuesta a Xavier Paz

Re: Problema con select dinamico en un bloque

de Asier Ramos Martinez -
Joe muchisimas gracias!!!!
Ahora a ver si consigo añadir con AJAX otro select que sea dependiente de este!!!Que creo que me va a costar bastante pero bueno a intentarlo!!!

Gracias muchacho!!
En respuesta a Asier Ramos Martinez

Re: Problema con select dinamico en un bloque

de Alejandro Michavila Pallarés -

¿Cómo podría obtener en la misma página php, la selección que ha hecho el usuario del menú de selección?.

Por ejemplo, de este menú: html_writer::select($options, 'selectmenu', '1'); de un archivo view.php de un módulo.

En respuesta a Alejandro Michavila Pallarés

Re: Problema con select dinamico en un bloque

de Alejandro Michavila Pallarés -

Replanteo mi pregunta:

Quiero en la vista de un módulo (view.php), incluir un menú de selección (html_writer::select) que cuando el usuario eliga su opción, se muestren unos resultados u otros más abajo, en función de la selección.

Para ello he incluido el elemento, y en los atributos le he pasado el siguiente array: array('onchange' => 'this.form.submit()'), para que cuando eliga una opción se capture, y quiero que se recarge la misma página (view.php) con la selección como nuevo argumento, algo como "view.php?id=18&selectmenu=1".

El código quedaría de la siguiente forma:

echo html_writer::start_tag('form', array('id' => 'selectform', 'method' => 'get', 'action' => ''));
echo html_writer::select($options, 'selectmenu', '0', false, array('onchange' => 'this.form.submit()'));
echo html_writer::end_tag('form');

Pero a la hora de elegir la opción, cuando recarga la página machaca el parámetro inicial dado lugar a un error de "Parameter missing", quedando la url de esta forma: "view.php?selectmenu=1" en lugar de "view.php?id=18&selectmenu=1".

No tengo experiencia en programación Web, por eso necesito que me hechen un cable y me digan qué es lo que estoy haciendo mal, o cómo puedo hacer para no perder el parámetro inicial de la url.

Muchas gracias.

En respuesta a Alejandro Michavila Pallarés

Re: Problema con select dinamico en un bloque

de Alejandro Michavila Pallarés -

Vale, creo que he resuelto el problema, simplemente usando el método "post" en lugar de "get", el código sería:

echo html_writer::start_tag('form', array('id' => 'selectform', 'method' => 'post', 'action' => ''));
echo html_writer::select($options, 'selectmenu', '0', false, array('onchange' => 'this.form.submit()'));
echo html_writer::end_tag('form');

Y funciona bien.

En respuesta a Alejandro Michavila Pallarés

Re: Problema con select dinamico en un bloque

de Alejandro Michavila Pallarés -

Hola,

Me gustaría saber si es posible añadir un elemento "select" en una celda de una tabla, por ejemplo, algo así:

$table = new html_table();
$table->head = array();
$table->head[] = 'Columna1';
$table->head[] = 'Columna2';

$select = html_writer::select($opciones, 'nombre', $seleccion, false, $atributos);

$fila[] = $select;
$table->data[] = $fila;
echo html_writer::table($table);

Muchas gracias, un saludo.