web-dev-qa-db-ja.com

drupal_render($ form)がフォームをレンダリングしない

私が見ている問題の解決策を誰かが見つけたのだろうか。 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フォームのように見えるものでいっぱいです。

(それは私のフォーム要素で満たされた巨大な配列です。一部では、要素のいくつかを正しくレンダリングしてページングすることもできます)。

私が逃したもののアイデアを持っている人はいますか?

1
Alex C

試してください:

<?php print render(drupal_get_form('simple_nameform')); ?>
6
Jukebox

編集-私の元の答えは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番目の引数により、ドキュメントの上部に表示されるのではなく、インラインで戻ります。)

3
tmsimont