echo form_dropdown('shirts', $options, 'large');
$options = array(
'small' => 'Small Shirt',
'med' => 'Medium Shirt',
'large' => 'Large Shirt',
'xlarge' => 'Extra Large Shirt',
);
$shirts_on_sale = array('small', 'large');
echo form_dropdown('shirts', $options, 'large');
// Would produce:
<select name="shirts">
<option value="small">Small Shirt</option>
<option value="med">Medium Shirt</option>
<option value="large" selected="selected">Large Shirt</option>
<option value="xlarge">Extra Large Shirt</option>
</select>
echo form_dropdown('shirts', $options, $shirts_on_sale);
// Would produce:
<select name="shirts" multiple="multiple">
<option value="small" selected="selected">Small Shirt</option>
<option value="med">Medium Shirt</option>
<option value="large" selected="selected">Large Shirt</option>
<option value="xlarge">Extra Large Shirt</option>
</select>--
---
Para anular la suscripción a este grupo, envía un mensaje a
codeigniter-spa...@googlegroups.com
Para obtener más opciones, visita este grupo en
http://groups.google.com/group/codeigniter-spanish?hl=es.
$query->result_array()
Cierto,
$aDatos = array();
foreach( $query->result_array() as $row )
$aDatos[$row['id_o_la_columna_cuyo_valor_debe_retornar']] =
$row['campo_descriptivo_o_lo_que_quieres_que_muestre'];
y usas $aDatos en el form_select
--
Yo no se si esto que haces es lo m�s correcto. �Te interesa NO mostrar
el <select name="estados_select" /> si el modelo no te ha devuelto datos?
Yo soy de la opini�n de que lo correcto no es devolver false. FALSE se
devuelve cuando una cosa NO ha funcionado. �Qu� significa eso? Que si tu
consulta a la base de datos NO ha fallado no debe devolver FALSE, debe
devolver un valor vac�o.
Yo har�a (y si lo haces con PHP5 recortas mucho):
public function all_states()
{
$return = array();
$query = $this->db->select("id,name")->order_by("name")->get("states");
foreach($query->result() as $row)
$return[$row->id] = $row->name;
return $return;
}
En el view (y usando la sintaxis alternativa ya que ODIO en un view
poner echo "<select ..."):
<select name="estados_select">
<?php foreach($estados as $id => $value): ?>
<option value="<?php echo $id; ?>">
<?php echo $value; ?>
</option>
<?php endforeach; ?>
</select>
De este modo no tienes que comprobar que existan estados. Tengas o no
estados, la consulta es correcta y si no tienes estados en la base de
datos no significa que la consulta haya fallado.
Para aquellos que quieran profundizar un poco m�s, comento varios
cambios que he hecho en el c�digo.
Modelo
------
Primero de todo, como seguramente estaremos usando PHP5, aunque el
framework sea para PHP4/5 podemos usar el "method chaining":
http://codeigniter.com/user_guide/database/active_record.html#chaining
De modo que:
$this->db->select('id,name');
$this->db->from('states');
$this->db->order_by('name','asc');
$q2 = $this->db->get();
Es lo mismo que:
$q2 = $this->db->select("id, name")->from("states")->order_by("name",
"asc")->get();
Aunque lo podemos reducir bastante m�s ya que si en get() pasamos un
parametro, este ser� el de la tabla, es decir:
$this->db->from("states")->get();
Es lo mismo que:
$this->db->get("states");
Por otra parte, el segundo parametro de order_by por defecto es ASC.
Podemos dejarlo para saber como queremos ordenar, pero sabiendo para que es:
$this->db->order_by('name','asc')->get("states");
Es lo mismo que:
$this->db->order_by("name")->get("states");
Finalmente tenemos:
$q2 = $this->db->select("id, name")->order_by("name")->get("states");
Y, aunque he quitado muchos caracteres, para mi el $q2 no entiendo que
es. Yo lo escribir�a como $query para saber de qu� se trata:
$query = $this->db->select("id, name")->order_by("name")->get("states");
View
----
En el view lo primero que he hecho ha sido usar la sintaxis alternativa
de PHP para los views, igual que comentan en el user guide de
CodeIgniter (ojo, SOLO las Control Structures; terminantemente prohibido
usar los short tags de PHP):
http://codeigniter.com/user_guide/general/alternative_php.html
Aqu� ten�is la documentaci�n de PHP (no os olvid�is nunca de esto,
estamos programando en PHP, no en CodeIgniter):
http://php.net/manual/en/control-structures.alternative-syntax.php
El porqu� es sencillo. El view es el output final, donde solemos tener
el HTML. La sintaxis alternativa nos permite ver MUCHO m�s claro el
c�digo HTML (y si usamos alg�n IDE lo va a resaltar como tal).
El view de edherrera era:
<?php
if ($estados != false) {
echo '<select name="estados_select">'."\n";
foreach($estados as $i => $edo)
{
echo '<option value="'.$edo[id'].'">';
echo $edo['name'];
echo '</option>'."\n";
}
echo '</select>'."\n";
}
?>
Esto, podr�a ser reescrito:
<?php if($estados != false): ?>
<select name="estados_select">
<?php foreach($estados as $i => $edo): ?>
<option value="<?php echo $edo['id']; ?>">
<?php echo $edo["name"]; ?>
</option>
<?php endforeach; ?>
</select>
<?php endif; ?>
Bien, sobre esta parte tengo bastante a comentar. Si hab�is le�do la
primera parte, si hacemos un buen uso de los returns de los modelos el
IF no ser� necesario ya que $estados siempre estar� definido. Siempre
ser� un array, vac�o o no, siempre ser� un array. De este modo,
directamente nos cargamos el if:
<select name="estados_select">
<?php foreach($estados as $i => $edo): ?>
<option value="<?php echo $edo['id']; ?>">
<?php echo $edo["name"]; ?>
</option>
<?php endforeach; ?>
</select>
(Por cierto, si os fij�is yo ya ni he puesto los "\n". Como estamos
escribiendo l�neas de HTML, se interpretar�n como saltos autom�ticamente
tambi�n)
Usando el foreach con un array vac�o no fallar�, no nos tenemos que
preocupar por eso. El foreach recorre un array. Lo �nico importante es
que recorra un array: si est� vac�o no escribir� absolutamente nada,
pero ser� correcto y no mostrar� ning�n error.
Despu�s, el foreach esta mal hecho... o digamos que podr�amos hacerlo
mejor. Si cuando definimos el array, el indice del array es el ID y el
valor es el NAME (como he hecho en mi modelo), no hace falta trabajar
con arrays en los valores.
De hecho, esto:
foreach($estados as $i => $edo)
Ser�a lo mismo que:
foreach($estados as $edo)
Ya que el valor $i no lo usamos en ning�n sitio, no nos hace falta para
nada.
Entonces, si nosotros definimos estados con $id = $name (v�ase MI
modelo), podemos hacer lo siguiente:
foreach($estados as $id => $name)
Y usar directamente los valores $id y $name:
<select name="estados_select">
<?php foreach($estados as $id => $name): ?>
<option value="<?php echo $id; ?>">
<?php echo $name; ?>
</option>
<?php endforeach; ?>
</select>
Bien, espero que os haya servido de ayuda y que os sirva para mejorar
vuestros modelos, vistas y modos de ver las aplicaciones.
Un saludo,
Isern
El 23/05/2011 18:35, edherrera escribi�:
> As� es como lo hago, espero te sirva.