2010-06-16 6 views
2

J'essaie de m'apprendre Drupal et j'ai trouvé quelque chose pour lequel je ne trouve aucun tutoriel.Générer des formulaires à partir de la base de données

J'essaie de générer un formulaire, avec un nombre dynamique de champs de texte, pour remplir et modifier le contenu de ma table personnalisée. En PHP régulière, je y parvenir avec:

$count = '0'; 
while ($row = mysql_fetch_array ($result) { 
    echo "<input type='text' name='title_row".$count."' value='".$row['title']."'>" 
    $count = $count +1; 
} 

Quelqu'un peut-il me montrer quelque chose qui va me montrer comment faire dans Drupal (et le traitement des données inscrits par cet auteur)?

Merci

+0

Comment voulez-vous traiter les données? Pourriez-vous simplement utiliser CCK avec plusieurs entrées autorisées sur le champ de texte? – lazysoundsystem

Répondre

4

Vérifiez la forms API reference et Form API Quickstart Guide pour cela.

Une version simple de votre exemple ressemblerait à quelque chose comme ce qui suit:

/** 
* Form builder function - creates definition of form 
*/ 
function yourModule_table_edit_form($form_state) { 
    $form = array(); 
    // TODO: Add code/query to populate $result, using the 
    // Drupal DAL functions, e.g.: 
    $result = db_query('SELECT * FROM {your_table}'); 
    while ($row = db_fetch_array($result) { 
    // Create one textfield per row 
    // NOTE: assumes content of title column can be used as an array index 
    $form[$row['title']] = array(
     '#type' => 'textfield', 
     '#title' => $row['title'], 
     '#default_value' => $row['value'], // NOTE: Just assumed the column name 
     '#size' => 60, // Adjust as needed 
     '#maxlength' => 60, // Adjust as needed 
     // NOTE: more options for input element definition available - check the API docs 
    ); 
    } 
    $form['submit'] = array(
    '#type' => 'submit', 
    '#value' => t('Save'), 
); 

    return $form; 
} 

/** 
* Form submit function 
*/ 
function yourModule_table_edit_form_submit($form, &$form_state) { 
    foreach ($form_state['values'] as $row_title => $value) { 
    // TODO: Do something with the submitted values 
    } 
} 

(NOTE: code non testé, méfiez-vous des fautes de frappe et autres erreurs) pour préparer la forme

pour la sortie, vous d appelez le drupal_get_form('yourModule_table_edit_form').

+2

Drupal possède également une API de base de données; Au lieu d'utiliser des fonctions spécifiques à une base de données, le code Drupal doit utiliser l'API d'abstraction de la base de données et utiliser 'db_query()', 'db_query_range()', 'db_fetch_array()', 'db_fetch_object()', etc. – kiamlaluno

+0

@ kiamlaluno: Bon point - j'ai ajusté l'exemple en conséquence. –

+0

Désolé pour la réponse différée. Il semble juste pour ce que j'essaie, donc je vais l'essayer une fois que j'ai installé la table/désinstaller travailler. – YsoL8

Questions connexes