Drupal表格 - 没有输出

时间:2012-05-16 17:10:20

标签: php drupal

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

<?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();

?>

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

3 个答案:

答案 0 :(得分:2)

欢迎使用SO和Drupal Form API(很高兴称之为FAPI,但你知道互联网模因)。 首先,让我们知道您需要使用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()来显示表单。

答案 1 :(得分:1)

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

更新

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

echo drupal_get_form('test_myform');

基本上,drupal_get_form正在返回表单内容,并且由您决定以某种方式输出它。

答案 2 :(得分:0)

希望这会有所帮助:

change the function line as below:
function test_myform() { //no need to add any arguments if you are not using


secondly either directly print the form using the line below
print drupal_get_form('test_myform');

or use the function to return the form html and print it
print test_page();