次の.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);?>
しかし、フォームタグが生成されないため、フォームを送信できません...何が問題ですか?
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; ?>
もっと良い説明があったらいいのですが、カスタムテーマフックを使用している場合は、フォームIDと一致しないことを確認してください。たとえば、フォームが「mymodule_my_form」の場合、テーマフックに「mymodule_my_form」という名前を付けないでください。このため、テンプレートでフォームをレンダリングする際に問題が発生しました。
あなたのテーマのtemplate.phpの前処理関数に検索ボックスを追加できます:
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; ?>
Module_invokeを使用することもできますが、テンプレートファイルにphpロジックを含めることはできません。
$block = module_invoke('search', 'block_view', 'search');
print render($block);
これが唯一の解決策です。
$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>';
$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);
これはあなたにあなたのウェブフォームを与えます。
私はこの問題を抱えており、偽のhtmlタグ(一部の設計時のhtmlの残り)にdrupal_render($form)
を印刷しているため、実際のフォームはありませんでした。
私のフォームはインクルードファイル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; ?>
表示するフォームのform_idを見つけます。 ( Get Form ID moduleを使用できます)
次に、任意の場所に任意のフォームを配置できます。例:
$form = drupal_get_form('YOUR_FORM_ID');
print drupal_render($form);
個々のフィールドを持つ完全なフォームをレンダリングする必要があるだけです。
テンプレートファイルの最後の行をこの行に変更するだけです-
<?php print drupal_render_children($element['form']);?>