0

我在正文部分的页面上有以下代码。

<?php
function test_myform($form, &$form_state) {

  $form['description'] = array(
    '#type' => 'item', 
    '#title' => t('A form with nothing but a textfield'),
  );
  // This is the first form element. It's a textfield with a label, "Name"
  $form['name'] = array(
    '#type' => 'textfield', 
    '#title' => t('Name'),
  );
  return $form;
}
function test_page() {
  return drupal_get_form('test_myform');
}

test_page();

?>

这不会返回任何东西。没发生什么事。页面是空白的。我错过了什么?谁能帮我一把?

4

3 回答 3

2

欢迎使用 SO 和 Drupal Form API(很高兴将其称为 FAPI,但您知道 Internet 模因)。首先,让我们知道您需要使此表单工作的 Drupal 版本,以及您需要在哪里显示此表单。

有关不错的启动教程,请参见http://drupal.org/node/751826。不要忘记它是针对 Drupal 6 的。

如果您想在特定页面中显示表单(例如 /myform),您必须使用 hook_menu() 来注册您的路径。然后,只要您有 drupal_get_form 作为回调函数,您就不必打印/回显表单。

建立表单的最简单方法是将 PHP 代码放在一个块中(没有人说它更容易 - 只是我的想法。)您不需要参数来构建表单。

function test_myform(){
$form['description'] = array(
    '#type' => 'item', 
    '#title' => t('A form with nothing but a textfield'),
  );
  // This is the first form element. It's a textfield with a label, "Name"
  $form['name'] = array(
    '#type' => 'textfield', 
    '#title' => t('Name'),
  );
  return $form;
}

现在你有了一个可以从 test_myform() 调用的表单数组。酷吧?

使用它来显示表单。

return drupal_get_form('my_form');

然后您会看到这与您已经尝试过的代码相同。这就是版本有用的地方。这在 D6 中有效,但在 D7 中不再有效。现在试试这个:

return drupal_render(drupal_get_form('my_form')); 

看 ?

请注意,此代码将在 php 块中使用。不建议启用 php 过滤器模块,但您必须这样做才能获取表单。

最好的方法是定义自己的块或菜单回调来获取表单。请参阅http://api.drupal.org/api/drupal/modules!system!system.api.php/function/hook_menu/7了解如何注册路径。现在,请注意,您需要使test_myform()函数接受参数作为代码。页面回调应该是 drupal_get_form 并且不需要drupal_render()获取显示的表单。

于 2012-05-16T21:25:49.893 回答
1

你实际上并没有输出任何东西。您在函数中创建$form数组或对象并返回它,但您不会在任何其他代码中回显或输出任何内容。

更新

快速查看此函数的文档似乎表明该函数返回了表单标记。因此,如果您省略了测试页面功能,请尝试以下操作:

echo drupal_get_form('test_myform');

基本上,drupal_get_form是返回表单内容,并由您以某种方式输出它。

于 2012-05-16T17:12:47.933 回答
0

希望这可以帮助:

更改功能行如下:
function test_myform() { //如果不使用,则无需添加任何参数


其次,要么使用下面的行直接打印表格
打印 drupal_get_form('test_myform');

或者使用函数返回表单html并打印
打印 test_page();
于 2012-05-16T17:25:25.033 回答