web-dev-qa-db-ja.com

テンプレートでフォームをレンダリングする

次の.tpl.phpテンプレートを作成しました。

<?php print drupal_render($element["term"]); ?>
<?php print drupal_render($element["search"]);?>
<?php print drupal_render($element["advanced_search"]);?>
<?php print drupal_render_children($element);?>

しかし、フォームタグが生成されないため、フォームを送信できません...何が問題ですか?

3
Cris

Template.phpの前処理関数に検索ボックスを追加できます。

<?php
/*
 *  Preprocess page.tpl.php to inject the $search_box variable back into D7.
 */
function MYTHEME_preprocess_page(&$variables){
  $search_box = drupal_render(drupal_get_form('search_form'));
  $variables['search_box'] = $search_box;
}

次に、変数をpage.tpl.phpに出力するだけです。

<?php print $search_box; ?>
6
mohit_rocks

もっと良い説明があったらいいのですが、カスタムテーマフックを使用している場合は、フォームIDと一致しないことを確認してください。たとえば、フォームが「mymodule_my_form」の場合、テーマフックに「mymodule_my_form」という名前を付けないでください。このため、テンプレートでフォームをレンダリングする際に問題が発生しました。

2
reallyxloco
  1. あなたのテーマのtemplate.phpの前処理関数に検索ボックスを追加できます:

    function MYTHEME_preprocess_page(&$variables){
          $search_box = drupal_render(drupal_get_form('search_form'));
          $variables['search_box'] = $search_box;
        }
    
  2. 次に、変数をpage.tpl.phpに出力するだけです。

    <?php print $search_box; ?>
    

Module_invokeを使用することもできますが、テンプレートファイルにphpロジックを含めることはできません。

  $block = module_invoke('search', 'block_view', 'search');
  print render($block);
2
Astha chauhan

これが唯一の解決策です。

$form = drupal_get_form('custom_example_form', $adverts);
  print '<form id="'.$form['#id'].'" accept-charset="UTF-8" method="'.$form['#method'].'" action="'.$form['#action'].'">'; 
  print render($form['name']);
  print render($form['descriere']);
  print render($form['submit']);
  print render($form['form_id']);
  print render($form['form_build_id']);
  print '</form>';

これを見てください https://drupal.stackexchange.com/a/111833/2359

0
Bruce Huang
$wnid = 5; //form id
$wnode = node_load($wnid); load the node id
$form = drupal_get_form('webform_client_form_' . $wnid, $wnode, array());
print render($form);

これはあなたにあなたのウェブフォームを与えます。

0
Pankaj

私はこの問題を抱えており、偽のhtmlタグ(一部の設計時のhtmlの残り)にdrupal_render($form)を印刷しているため、実際のフォームはありませんでした。

0

私のフォームはインクルードファイルmymodule/includes/mymodule.example_form.incにありました。

function mymodule_preprocess_main_page(&$variables) {
    module_load_include('inc', 'mymodule', 'includes/mymodule.example_form');
    $example_form = drupal_render(drupal_get_form('mymodule_example_form'));
    $variables['example_form'] = $example_form;
}

次に、テンプレートファイルで<?php print $example_form; ?>

0
No Sssweat

表示するフォームのform_idを見つけます。 ( Get Form ID moduleを使用できます)

次に、任意の場所に任意のフォームを配置できます。例:

$form = drupal_get_form('YOUR_FORM_ID');
print drupal_render($form);
0
laniol

個々のフィールドを持つ完全なフォームをレンダリングする必要があるだけです。

テンプレートファイルの最後の行をこの行に変更するだけです-

<?php print drupal_render_children($element['form']);?>
0
user18942