我在正文部分的页面上有以下代码。
<?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();
?>
这不会返回任何内容。什么都没发生。该页面是空白的。我错过了什么?谁能帮我一把?
答案 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();