Posted by r_e_m on April 19, 2012 at 9:36am
Hola chicos!
Tengo que hacer una vista pero tengo que filtrarla por un argumento que es el numero de los proyectos a los que pertenece el usuario.
Os copio el código:
global $user;
$uid=$user->uid;
$result=db_query("select field_id_proyecto_value from content_type_proyecto where field_responsable_uid='$uid';");
$num_proyecto=db_result($result,0,0);
return $num_proyecto;
Este código me funciona en parte, porque me devuelve sólo uno de los proyectos a los que pertenece el usuario, no a todos.
¿Cómo puedo modificarlo para que me devuelva todos los valores?
Comments
yo le quitaría parámetros a db_result()
te hablo de memoria, pero juraría que unos de los ceros del db_result($result,0,0) que estás usando es el límite, por eso te da siempre un único resultado.
prueba con db_result($result) simplemente, a ver qué pasa :-)
Hola La función db_result
Hola
La función db_result sólo devuelve un resultado. Puedes consultar la documentación en http://api.drupal.org/api/search/6/db_result
Si quieres obtener más resultados debes recorrer la variable $result en un bucle.
Un saludo
--
Pablo López, Drupal developer
https://twitter.com/plopesc
db_query ?
Tiene razón plopesc en lo de db_result() que solo devuelve un resultado.
Pero si sólo quieres saber el número de elementos retornados, como db_query() te devuelve un objeto, o bien lo recorres con un bucle como dice plopesc o lo conviertes a array con get_object_vars() y luego haces un count() o sizeof(), no?
db affeted rows
En drupal 6 se hace con db_affected_rows()
y en d7, depende del caso. db_select() y db_delete() devuelven el número de columnas afectadas. Para el caso de los selects, se consigue con ->rowCount().
He modificado el código por
He modificado el código por este:
global $user;
$uid=$user->uid;
$nums_proyecto=array();
$result=db_query("select field_id_proyecto_value from content_type_proyecto where field_responsable_uid='$uid';");
while ($my_row = db_fetch_array($result))
{
$nums_proyecto[] = $my_row['field_id_proyecto_value'];
}
return $nums_proyecto;
como me habeis indicado ya itero en un bucle, pero el problema es que aun asi, la última sentencia de return sólo me devuelve el primer valor.
¿Sabéis si un argumento de views sólo permite recibir un valor de vuelta?
Es que si no, no se me ocurre otra forma de conseguir lo que quiero sin tener q programar un módulo
Creo que lo que quieres hacer
Creo que lo que quieres hacer es un filtro contextual que obtenga lso parámetros por código PHP, en ese caso debes hacer lo siguiente:
· Cambia la última línea de tu script por return implode('+', $nums_proyecto);
· En el fieldset Más de la configuración del filtro contextual, selecciona el checkbox: "Permitir múltiples valores"
Creo que con eso, te sería suficiente.
Un saludo
--
Pablo López, Drupal developer
https://twitter.com/plopesc
Plopesc ante todo mil
Plopesc ante todo mil gracias!
Preguntas: ¿el código lo pongo en filtros o en argumentos que era donde lo tenía?.
No encuentro donde configurar el checkbox para poder seleccionar "permitir multiples valores"
Si estás trabajando en D6, en
Si estás trabajando en D6, en argumentos. Te hablaba de Filtros contextuales porque es el nombre que tienen los argumentos en D7.
La opción de múltiples valores está en el formulario de configuración del argumento, pero no sé exactamente donde en D6.
--
Pablo López, Drupal developer
https://twitter.com/plopesc
Trabajo con D6, si me pasas
Trabajo con D6, si me pasas tu correo te mando una captura de pantalla
La opción de permitir valores
La opción de permitir valores múltiples sólo está disponible para valores numéricos, si tu campo de identificadores no lo es, no te aparecerá.
--
Pablo López, Drupal developer
https://twitter.com/plopesc
Sí son valores numéricos
Sí son valores numéricos