Jugando con Drupal: datos externos

20.mar 2007 Envía un trackback

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.
com drupal cms database external

Comentarios
Gravatar jesus@01.04.2007, 'Re: Jugando con Drupal: datos externos'

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.06.2007, 'Re: Jugando con Drupal: datos externos'

Y funciona perfectamente !!

Muchas Gracias

Gravatar Rocio@31.08.2007, 'datos externos'

Necesitaba un formulario muy similar, y funcionó a la primera
muchas gracias

Gravatar juanca@19.10.2007, 'Re: Jugando con Drupal: datos externos'

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.10.2007, 'Re: Jugando con Drupal: datos externos'

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.10.2007, 'Re: Jugando con Drupal: datos externos'

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.05.2008, 'Re: Jugando con Drupal: datos externos'

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 ^^


Escribe tu comentario
 
 
Guardar datos
Escribe tu comentario:
captcha


Intenta que tu comentario sea interesante y con información relevante al tema de la entrada. BBCodes disponibles: [url=http://direccion]texto[/url], negrita: [b]texto[/b], itálica: [i]texto[/i], subrayada: [u]texto[/u]. Para mencionar o citar a alguien (quote): [cita]texto[/cita]