Como redirecionar a un usuario en Drupal para que haga algo.

Lo primero darle las gracias a Daniel Primo por la sugerencia de en vez de atacar la query de la base de datos contase los resultados que me da la consulta con db_num_rows($var).

A veces necesitamos crear un tipo de módulo cárcel para que el usuario tenga que hacer algo antes de continuar, existen varias formas de hacerlo.

En este caso lo que necesitamos es que el usuario rellene el formulario del tipo de contenido bio antes de poder hacer nada.

Y si intenta irse a algún otro sitio que le devuelva constantemente al formulario.

<?php
global $user;
$sql = "select nid from node where type='bio' and uid ='%d'";
$result = db_query ($sql, $user->uid);
if (
db_num_rows($result) == 0) {
header('Location: http://tudireccióndondellevar.com');
}
?>

Que tiene de malo esta forma de trabajar, lo primero es que se añade una consulta más a las querys de Drupal, que ya de por sí lleva unas cuentas.

Con tiempo se podría pensar en añadir una tabla o un campo a la tabla de usuarios para indicar si se realizado la acción de rellenar el elemento, pero esto supondría ver si se carga en globar $user este valor, y cotejarlo para ver si es cierto o falso el que este rellenado el campo.

Como se puede ver, es sencillo hacer cosas tan interesantes como estas, y que consumen pocos recursos, el llevar a cabo un módulo, con todo lo que supone puede optimizar mucho el rendimiento de la aplicación, pero puede suponer también otros inconvenientes.

Por cierto, este código lo tenemos que añadir al page.tpl.php, al principio de todo.

Un saludo

Oskar

Trackback URL for this post:

http://www.documentados.com/trackback/222

Viendo en el API,

Viendo en el API, db_num_rows está disponible solo hasta drupal5 (http://api.drupal.org/api/function/db_num_rows/5). ¿Cuál sería la alternativa a utilizar en >drupal-5?

Saludos...

Aquí está explicado cómo

Aquí está explicado cómo debe hacerce en 6.x: http://drupal.org/node/114774#db-num-rows

Parece que una buena opción

Parece que una buena opción es usar http://api.drupal.org/api/function/db_result/6 que devuelve FALSE si el número de resultados es 0

Junto a un equipo de

Junto a un equipo de desarrollo hemos estado investigando esta herramienta. Con este post nos has respondido la última duda que se nos ha planteado. Queremos agradecerles el tiempo que han dedicado a crear este recurso, que nos ha sido de mucha ayuda.

Enviar un comentario nuevo

El contenido de este campo se mantiene como privado y no se muestra públicamente.
  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Allowed HTML tags: <a> <em> <strong> <cite> <strike> <code> <ul> <ol> <li> <dl> <dt> <dd><img><p><div><blockquote>
  • Saltos automáticos de líneas y de párrafos.
  • You may post code using <code>...</code> (generic) or <?php ... ?> (highlighted PHP) tags.

Más información sobre opciones de formato

CAPTCHA
Esto es para evitar spam, y ver que eres humano :)
Image CAPTCHA
Enter the characters shown in the image.