0

フォームのテーマファイルで、whatever-form.tpl.phpを省略すると、

<?php drupal_render($form); ?> 

レンダリングされるフォームの唯一の部分は、指定したものです。したがって、これらの行をすべて省略することもできます。

<?php $form['title']['#access'] = FALSE; ?>
<?php $form['body']['#access'] = FALSE; ?>
<?php $form['menu']['#access'] = FALSE; ?>
<?php $form['revision_information']['#access'] = FALSE; ?>
<?php /* ... etc ... */ ?>

これを実行したかったのは、モジュール(Booksなど)をインストールするときに、すべてのカスタムフォームに戻って、対応する「このセクションを非表示にする」を追加することを心配する必要がないようにするためです。ライン:

<?php $form['book']['#access'] = FALSE; ?>

drupal_render($ form)を省略しても大丈夫ですか?提出、検証などは大丈夫ですか?

4

3 に答える 3

2

あなたが求める行は、まだレンダリングされていないすべてのフォーム項目をレンダリングします。これには、フォームの一意の ID であるフォーム トークンが常に含まれる可能性が高くなります。これがないと、フォームは検証できません。これを外すと大変なことになりかねません。

フォームを変更したい場合は、 を使用する必要がありますhook_form_alter()。フォーム ID に基づいて、フォーム項目を削除/追加/変更できます。これは、必要に応じて他のモジュールもフォームを変更できるため、Drupal の方法です。

于 2009-12-23T04:51:56.697 に答える
1

簡単な答えは間違いなくノーです。drupal_render($ form)にはフォームの正しい処理に不可欠な情報が含まれているため、省略できません。

于 2009-12-23T03:22:25.343 に答える
1

上にリストしたコードのすべての行がテーマレイヤーに含まれるべきではないため、使用しているテーマは少し厄介なようです。

しかし、あなたの質問に答えるために、削除するdrupal_render($form)とおそらくフォーム全体が表示されなくなります。したがって、送信や検証などは機能せず、ブラウザでレンダリングしたときにフォームがページに表示されない可能性があります。

于 2009-12-22T18:51:59.353 に答える