0

我有一个简单的表格:

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);
}

在我的 node-contenttype.tpl.php 文件中,我打印了 drupal_get_form('mymodule_test_form', $node->nid)。顺便说一句,在模板中打印 drupal_get_form 是否正确?我尝试将 drupal_get_form 添加到 hook_nodeapi 视图状态,但没有输出,所以我只是在模板中打印它。

另一件事是默认值,我不知道如何使用它。variable_get 始终为 0。我是否需要创建自己的自定义查询并将其设置为默认值?我认为default_value是由drupal或其他东西自动检索的......

希望我能得到一些帮助。谢谢。

编辑:发现节点 ID 位于:$form['#parameters'][2]

4

1 回答 1

1

您可以使用 variable_get 访问先前使用 variable_set 设置的值。因此,variable_get 没有返回任何内容,因为没有先前设置的名为 mymodule_status 的变量。请参阅 http://api.drupal.org/api/function/variable_get/6

我不确定,但您似乎希望默认值是用户先前设置的状态,如果该用户已经设置了它。您需要对这种情况进行查询。



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;
}

同样在您的提交函数中,您需要引用 $form_state['values']['mymodule_status'] 而不是 $status。

于 2010-01-21T05:22:14.140 回答