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 と呼ぶのはいいことですが、インターネットのミームはご存知でしょう)。まず、このフォームを機能させるために必要な 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() { //使用していない場合は、引数を追加する必要はありません


次に、以下の行を使用してフォームを直接印刷します
print drupal_get_form('test_myform');

または関数を使用してフォーム html を返し、それを印刷します。
print test_page();
于 2012-05-16T17:25:25.033 に答える