【问题标题】:Drupal form_submit and default_valueDrupal form_submit 和 default_value
【发布时间】:2010-01-20 18:40:03
【问题描述】:

我有一个简单的表格:

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]

【问题讨论】:

  • 您要添加带有表单的页面还是尝试修改内容类型的添加/编辑表单?
  • 在节点视图页面添加表单。所以当你实际编辑节点时你不会看到它。
  • 韦德,你说的是解决方案(一种形式),但我不知道你在解决哪个问题。你能解释一下你想要达到的目标吗?这是某种评分系统吗? (既然如此,何不使用drupal.org/project/fivestar?
  • 类似于五星级,但更简单。用户将有一个选择菜单,他们可以从中选择一个选项并提交表单。到目前为止,我已经完成了这项工作,但现在我需要获取默认值。到目前为止,我还通过创建自定义查询并使用该查询的结果设置默认值来实现这一点。但是,我不确定这是否是正确的方法。我认为 default_value 会自动存储在我不知道的地方。所以我看到用户使用 variable_get,但没有任何回报。

标签: drupal form-submit default-value


【解决方案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。

【讨论】:

  • 哦,好吧,我现在了解变量是什么。谢谢,正是我想知道的。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-20
  • 1970-01-01
  • 2016-02-09
  • 2011-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多