2011-05-13 8 views
3

Je souhaite ajouter une liste "todo" à mon site afin qu'un utilisateur connecté puisse maintenir une liste simple de tâches à faire. Conceptuellement, je souhaite afficher un tableau de zones de saisie, permettant à l'utilisateur d'éditer l'une des tâches existantes, d'ajouter une nouvelle tâche ou de supprimer une tâche existante. Chaque boîte de saisie sera son propre formulaire afin que les modifications puissent être soumises une à une. Je suis complètement nouveau à Drupal et ne peux pas trouver de ressource en ligne qui puisse montrer comment y parvenir.Plusieurs formulaires dans Drupal 7

Répondre

7

Vous devez écrire un rappel de page qui appelle drupal_get_form plusieurs fois. Si le même constructeur de formulaires gère les formulaires, vous devez implémenter hook_forms.

function foo_menu() { 
    $items['foo'] = array(
    'page callback' => 'foo_page', 
    'access arguments' => array('access foo'), 
); 
    return $items; 
} 
function foo_page() { 
    for ($i = 0; $i < 10; $i++) { 
    $build[] = drupal_get_form('foo_form_' . $i, $i); 
    } 
    return $build; 
} 
function foo_forms($form_id, $args) { 
    if (!empty($args) && $form_id == 'foo_form_' . $args[0]) { 
    $forms[$form_id]['callback'] = 'foo_form'; 
    } 
    return $forms; 
} 
function foo_form($form, $form_state, $i) { 
    return $form; 
} 

Bien sûr, si les formes sont différentes omettez alors foo_forms et il suffit d'écrire foo_form_0, foo_form_1 etc etc

+0

Ce n'est pas tout à fait correct: si vous ne renvoyez pas $ forms à partir de hook_forms, cela ne fonctionne pas, du moins pas dans Drupal 7. J'ai soumis un edit, il est en cours de révision. – DrCord

+1

Note: cette réponse manque de la partie #ajax où chaque partie est soumise par ses propres moyens. – chx