2010-01-20 2 views
0

J'ai une forme simple:Drupal form_submit et default_value

function mymodule_test_form(&$form_state, $nid) { 
    form['submit'] = array(
    '#type' => 'submit', 
    '#value' => 'Click me!', 
); 
    $form['mymodule_status'] = array(
    '#type' => 'select', 
    '#attributes' => array('class' => 'myclass'), 
    '#default_value' => variable_get('mymodule_status', 0), 
    '#options' => array('one', 'two', 'three', 'four', 'five'), 
); 
    return $form; 
} 

function mymodule_test_form_submit($form, &$form_state) { 
    global $user; 
    db_query("INSERT INTO {mymodule} (nid, uid, number, created) VALUES (%d, %d, %d, " . time() . ")", $nid, $user->uid, $status); 
} 

Et dans mon nœud contenttype.tpl.php fichier j'imprimer drupal_get_form ('mymodule_test_form', $ node-> JNV). BTW, est-ce la bonne façon d'imprimer le drupal_get_form dans le modèle? J'ai essayé d'ajouter drupal_get_form à l'état d'affichage hook_nodeapi, mais rien ne sort, donc j'ai fini par l'imprimer dans le template.

Une autre chose est la valeur par défaut, je ne sais pas comment l'utiliser. Le variable_get est toujours 0. Dois-je créer une requête personnalisée et la définir comme valeur par défaut? Je pensais que la valeur default_value est automatiquement récupérée par Drupal ou quelque chose ...

J'espère que je peux obtenir de l'aide. Merci.

Edit: Trouvé sur l'ID du nœud est sous: forme $ [ '# paramètres'] [2]

+0

Souhaitez-vous ajouter une page avec un formulaire ou essayez-vous de modifier le formulaire d'ajout/de modification d'un type de contenu? – abhaga

+0

Le formulaire est ajouté sur la page de vue de noeud. Donc, vous ne le verrez pas lorsque vous éditez le noeud. – Wade

+0

Wade, vous parlez de solutions (un formulaire) mais je ne sais pas quel problème vous résolvez. Pouvez-vous expliquer ce que vous essayez d'accomplir? Est-ce une sorte de système de notation? (Dans ce cas, pourquoi ne pas utiliser http://drupal.org/project/fivestar?) – marcvangend

Répondre

1

Vous utilisez variable_get pour accéder à une valeur définie précédemment avec variable_set. Donc, variable_get ne renvoie rien parce qu'il n'y a pas de variable précédemment définie avec le nom mymodule_status. Voir http://api.drupal.org/api/function/variable_get/6.

Je ne suis pas sûr, mais il semble que vous vouliez que la valeur par défaut soit l'état précédemment défini par l'utilisateur si cet utilisateur l'a déjà défini. Vous aurez besoin de faire une requête pour ce cas.



function mymodule_test_form(&$form_state, $nid) { 
    global $user; 
    form['submit'] = array(
    '#type' => 'submit', 
    '#value' => 'Click me!', 
); 

    $query = "SELECT number FROM {mymodule} WHERE nid = %d AND uid = %d"; 
    $result = db_query($query, $nid, $user->uid); 

    if ($result) $status = db_result($result); 
    if ($status) $default_value = $status; 
    else $default_value = 0; 

    $form['mymodule_status'] = array(
    '#type' => 'select', 
    '#attributes' => array('class' => 'myclass'), 
    '#default_value' => $default_value, 
    '#options' => array('one', 'two', 'three', 'four', 'five'), 
); 
    return $form; 
} 

également dans votre fonction d'envoi, vous devez faire référence form_state $ [ 'valeurs'] [ 'mymodule_status'] au lieu de l'état de $.

+0

Oh d'accord, je comprends ce qu'est la variable pour l'instant. Merci, exactement ce que je voulais savoir. :) – Wade