私が見ている問題の解決策を誰かが見つけたのだろうか。 drupalで非常にシンプルな「初心者向けフォーム」を作成しました。
function simple_nameform() {
$form = array(
'#method' => 'post',
'#prefix' => '<div class="staf">',
'#suffix' => '</div>',
'your_name' => array(
'#title' => t('Your Name'),
'#type' => 'textfield',
'#description' => t('Please enter your name')
),
'submit' => array(
'#type' => 'submit',
'#value' => t('submit')
)
);
return $form;
}
このフォームをモジュールに配置しました。情報を使用して、管理でブロックを有効にしました。メインページのレンダリングにいるときにコマンドを実行します
<div class="simple_overlay" id="simple">
<h1>Send to a Friend</h1>
<?php
$output = drupal_get_form('simple_nameform');
drupal_render($output);
?>
</div>
<pre>
<?php // debug purposes only
print_r($output);
?>
</pre>
フォームは "drupal_render"行からレンダリングされていないように見えますが、$ output変数は、drupalフォームのように見えるものでいっぱいです。
(それは私のフォーム要素で満たされた巨大な配列です。一部では、要素のいくつかを正しくレンダリングしてページングすることもできます)。
私が逃したもののアイデアを持っている人はいますか?
試してください:
<?php print render(drupal_get_form('simple_nameform')); ?>
編集-私の元の答えはDrupal 6。
d7のフォームビルダー関数には$form
と$form_state
の2つの引数が必要なようです
<?php
function simple_nameform($form, &$form_state) {
/...
?>
_valdiate関数と_submit関数も、D7の例にあるように、必要ないのではないかと思います。 http://api.drupal.org/api/drupal/includes--form.inc/group/form_api/7
それがうまくいかない場合は、 hook_forms() を使用してフォームをモジュールに登録してください
D6の元のソリューション
<?php
$output = drupal_get_form('simple_nameform');
print $output;
?>
drupal_get_form
は、レンダリングされたフォームを返します。ここの最後の行に注意してください: drupal_get_form()
また、無関係ですが、おそらく送信ボタンに行を追加する必要があります。
<?php
'submit' => array(
'#type' => 'submit',
'#value' => t('submit'),
'#executes_submit_callback' => true
)
?>
デバッグを簡単にするために、これを試してください:
<?php // debug purposes only
drupal_set_message("<pre>".print_r($output,true)."</pre>");
?>
(print_rの2番目の引数により、ドキュメントの上部に表示されるのではなく、インラインで戻ります。)