Jugando con Drupal: datos externos - Userlinux.net

Es posible que no siempre Drupal cumpla nuestras expectativas y queramos almacenar datos extra en una estructura distinta a la que viene de casa. Un ejemplo práctico sería un formulario de inscripciones. Supongamos que a la hora de organizar un evento (una competición, una carrera, una manifestación) necesitamos tener un…

Jugando con Drupal: datos externos

20.Mar.2007 ~ 12 Comentarios ~ 5626 Lecturas
Es posible que no siempre Drupal cumpla nuestras expectativas y queramos almacenar datos extra en una estructura distinta a la que viene de casa. Un ejemplo práctico sería un formulario de inscripciones. Supongamos que a la hora de organizar un evento (una competición, una carrera, una manifestación) necesitamos tener un listado de gente inscrita con cierta información extra (edad, grupo en el que se correrá, peso...). Imagino que, como siempre, habrá mil formas de resolver el problema, vamos por la más simple:

Lo primero será crear un formulario con los datos requeridos, pongamos como ejemplo una competición de Rallye, donde queremos saber como mínimo Nombre, Coche y Grupo del inscrito para la prueba:

<?php
// Creación de nuestro formulario
function test_form()
{

  $form['piloto'] = array(
    '#type' => 'textfield',
    '#title' => t('Piloto'),
    '#size' => 30,
    '#maxlength' => 64,
    '#description' => t('Nombre completo del participante'),
    '#required' => TRUE,
  );

  $form['coche'] = array(
    '#type' => 'textfield',
    '#title' => t('Coche'),
    '#size' => 30,
    '#maxlength' => 64,
    '#description' => t('Coche con el que participará'),
    '#required' => TRUE,
  );

  $form['grupo'] = array(
    '#type' => 'select',
    '#title' => t('Grupo'),
    '#default_value' => variable_get('timer', 259200),
    '#options' => array (
 '' => t('Seleccione grupo'), 
 'grupoa' => t('Grupo A'),
 'grupob' => t('Grupo B'),
 'grupoc' => t('Grupo C'),
),
    '#description' => t('Seleccione el grupo'),
    '#required' => TRUE,
  );

  $form['club'] = array(
    '#type' => 'textfield',
    '#title' => t('Club'),
    '#size' => 30,
    '#maxlength' => 64,
    '#description' => t('Club'),
    '#required' => TRUE,
  );

  $form['hidden'] = array('#type' => 'value', '#value' => 'is_it_here');
  $form['submit'] = array('#type' => 'submit', '#value' => t('Inscribirse'));
  return $form;
}

// Llamamos al render del formulario
function test_page() {
  return drupal_get_form('test_form');
}

$out = test_page();
echo $out;

// Guardamos en tabla 'mis_inscritos'
function test_form_submit($form_id, $form_values) {
  db_query("INSERT INTO mis_inscritos VALUES ('','$form_values[piloto]','$form_values[coche]','$form_values[grupo]','$form_values[club]')");
  drupal_set_message(t('Su inscripción se ha completado satisfactoriamente.'));
}
?>
Usamos la API de Drupal para crear los formularios y guardamos el envío en la tabla mis_inscritos que tiene un esquema sencillo (id, piloto, coche, grupo, club). La ejecución es correcta y comprobamos que los datos se guardan satisfactoriamente.

Una vez hemos acabado el nodo del formulario, crearemos otro nodo para el listado de inscritos. Será una página con contenido PHP y una conexión normal -siguiendo la API de Drupal- a base de datos, exponiendo los registros en una tabla:
<?php
 $result=db_query("SELECT * FROM mis_inscritos");
 echo "<table><tr>
 <td>Piloto</td>
 <td>Coche</td>
 <td>Grupo</td>
 <td>Club</td></tr>";
 while ($data = db_fetch_array($result)) 
 {
   echo "<tr>
   <td>$data[piloto]</td>
   <td>$data[coche]</td>
   <td>$data[grupo]</td>
   <td>$data[club]</td></tr>";
 }
 echo "</table>";
?>
Seguro que ni es la mejor forma de maquetarlos ni la más óptima, pero solo pretende ser un ejemplo de almacenamiento y listado de datos externos en Drupal. Como siempre, mejoras son bienvenidas.

Comentarios


gravatar
jesus
01.Apr.2007
Hola! no se si será eso lo que quieres hacer, pero para tipos de datos complejos en lugar de esto podrías usar CCK y si lo que quieres es meter datos extras en el perfil del usuario usa PROFILE. Ambos módulos son muy sencillos de usar.

He encontrado esta web buscando otra movida, pero me ha gustado mucho y la añado a mis bookmarks...

gravatar
Jessica Cofre
12.Jun.2007
Y funciona perfectamente !!

Muchas Gracias

gravatar
Rocio
31.Aug.2007
Necesitaba un formulario muy similar, y funcionó a la primera
muchas gracias

gravatar
19.Oct.2007
Busqué bastante y tu tema fue uno de los más sencillos, sin embargo yo soy muy nuevo como " web'master' " y bueno, cree las 'pages' en la primera no hay problema, pero la segunda me tira el sgte error:
user warning: Table 'jcom_drpl1.mis_inscritos' doesn't exist query: SELECT * FROM mis_inscritos in /home/jcom/public_html/web/includes/database.mysql.inc on line 172.
y dp cuando pongo los datos en la primera y pongo "inscribirse":

user warning: Table 'jcom_drpl1.mis_inscritos' doesn't exist query: INSERT INTO mis_inscritos VALUES ('','juanca','nakar','grupoa','dds') in /home/jcom/public_html/web/includes/database.mysql.inc on line 172.

quizás me puedes ayudar con eso, ya que me sería util, uso drupal 51 gracias de antemano.

gravatar
Juan
24.Oct.2007
Muy bueno el tuto, lo hice sin ningun problema, excepto la linea que dice :

db_query("INSERT INTO mis_inscritos VALUES ('','$form_values[piloto]','$form_values[coche]','$form_values[grupo]','$form_values[club]')");

Debe ser:

db_query("INSERT INTO mis_inscritos VALUES (null,'$form_values[piloto]','$form_values[coche]','$form_values[grupo]','$form_values[club]')");

Y todo salio perfecto me registra en la tabla y luego hago un listado me sale ok.

Pero como podria hacer para poder eliminar y modificar un registro, seleccionando cualquiera de la tabla listada.

Saludos

gravatar
Dalilo
30.Oct.2007
Bueno todo lo que esta en esta pagina, lo probe y me fue de maravilla, pero ahora despues de hacer esto como puedo recuperar los datos de la tabla mis_inscritos y colocarlo en sus respectivos objetos, es decir, el nombre del piloto, coche, grupo y club de tal manera poder modificarlos y luego Actualizarlos en sus respectivos campos.

Saludos

Gracias

gravatar
Eleazan
14.May.2008
Muy bueno. Llevo un rato mirando API's y ejemplos, y creo que este es el único que me ha funcionado bien con Drupal 6.2. Thnx!

Saludos ^^

gravatar
gamazo
20.Jan.2009
Buenas.

Estoy intentando seguir el tutorial y mi gran duda es:

donde tengo que poner estos archivos, me explico, yo creo dos archivos php con el contenido que pones arriba, pero
donde tengo que dejar fisicamente estos archivos para poder ejecutarlos con drupal.

Soy nuevo y estoy perdido en el tema.

Gracias.

gravatar
Polainas
17.Apr.2009
Excelente, muchas gracias, me sirvio de mucho.

gravatar
Yadi
16.Jul.2009
Me sirvió de mucho tu tutorial, tengo que hacer algo parecido, pero cuando pongo los datos y presiono el botón inscribirse me da el error:

user warning: Table 'intr.mis_inscritos' doesn't exist query: INSERT INTO mis_inscritos VALUES ('','juanca','nakar','grupoa','dds') in /home/intr/public_html/web/includes/database.mysql.inc on line 172.

agradecería mucho la ayuda, vi un comentario del alguien que le pasó algo semejante pero no hay respuesta...

gravatar
Ronald
05.Oct.2009
me ha funcionado a la perfeccion pero cuando intento guardar en la base de datos no me guarda nada solo el id, por favor si me pueden ayudar
ahh no me sale ninugun error a mi parecer el $form_values[piloto] no tiene valor utilizo el drupal 6.13

gravatar
Ronald
15.Oct.2009
problema solucionado en este enlace: http://drupal.org.es/node/5890

Comentarios


Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 15 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.

Buscar

Cargando...

Últimos comentarios

  • Juan
  • Marina
  • Francisco
  • fon
  • minWi
  • isra
  • reidrac
  • r0sk
  • Rodrigo Rega
  • minWi
  • r0sk
  • reidrac
  • r0sk
  • deady
  • errece

Moneting

Valor de mi cuenta de Facebook según Moneting
Valor de mi cuenta de Twitter según Moneting

Tagcloud

ssh frases champions userlinux iphone lugo rsidenotes felicidades films nintendo opinion sysadmin 2008 blogsfera vacaciones juegos cake ds debian sidenotes apple web blogs mac mysql cakephp deportes 2007 mundial openbsd barça ubuntu twitter blog humor meme canción alemania_2006 games bsd lucux linux twitt programación cumpleaños software django league bash macosx ps3 rfilms conciertos freebsd seguridad personal hack php bake futbol

Archivo

Social

Enlaces de interés