モジュールページの複数のフォーム


7

モジュールを作成しました。フォームを作成してページに実装しました:

function tudakozo_menu() {

  $items['tudakozo'] = array(
    'title' => t('Tudakozo'),
    'page callback' => 'drupal_get_form',
    'page arguments' => array('tudakozo_nevszerint_form'),
    'access callback' => TRUE,
  );

  return $items;
}

これについて別のフォームが欲しい

回答:


17

drupal_get_formをページコールバックとして使用する代わりに、カスタムコールバックを指定して、そこでフォームを作成できます。Drupal 6での実装は次のようになります。

function tudakozo_menu() {

  $items['tudakozo'] = array(
    'title' => t('Tudakozo'),
    'page callback' => 'tudakozo_page_callback',
    'access callback' => TRUE,
  );

  return $items;
}

function tudakozo_page_callback() {
  $output = '';

  // Render your two forms here.
  $output .= drupal_get_form('tudakozo_nevszerint_form');
  $output .= drupal_get_form('tudakozo_second_form');

  return $output;
}

Drupal 7の唯一の違いは、以下のコードのようなカスタムページコールバックの文字列とは対照的に、レンダー配列を使用することです。

function tudakozo_page_callback() {
  $build = array();

  // Render your two forms here.
  $build['form_one'] = drupal_get_form('tudakozo_nevszerint_form');
  $build['form_two'] = drupal_get_form('tudakozo_second_form');

  return $build;
}

クリス、素早い回答ありがとうございます。「arrayarray」フィードバックがあります。それで何ができますか?
クリスポー

あなたの答えはD7で作業していると想定しているので、上記の答えにD7の例を追加しました。説明は、D7のほとんどのコンテンツがレンダー配列として表されるため、文字列ではなく配列で作業することになるためです。配列が型キャストされているため、「配列」が表示されます。コールバックを少し変更すると、問題が修正されます。
Chris Pliakas、2011

@Chris、これら2つのフォームをtplファイルでテーマ設定するにはどうすればよいですか?stackoverflow.com/questions/23242295/...
kalidasan


@ kalidasan:しかし、それを私のtplファイルに追加する方法は記載されていませんか?これに対する答えを見つけましたか?私はここに同様の質問があります- drupal.stackexchange.com/questions/125632/...
Hitesh

0

ここをチェック

4. Next step is to create a hook_theme() function to theame these forms.
function custom_salesforce_theme() {
  return array(
 // this template is containing theme style for update form
    'custom_salesforce_update_form' => array(
      'template' => 'theme/custom_salesforce_update_form',
      'render element' => 'form',
    ),
 // this template is containing theme style for login form
    'custom_salesforce_login_form' => array(
      'template' => 'theme/custom_salesforce_login_form',
      'render element' => 'form',
    ),
 // this template is containing theme style for both forms
    'custom_salesforce_login_and_update' => array(
      'template' => 'theme/custom_salesforce_login_and_update',
      'arguments' => array('combine_form' => NULL),
    ),
  );
}

Note- Don't forget to create three template files inside theme folder inside your module.
5. Next step to write template preprocessor functions to display individual fields in separate template files.
/**
 * Implements Template Preprocessor For User Login().
 */
function template_preprocess_custom_salesforce_login_form(&$variables) {
  $variables['rtc_registered_email'] = drupal_render($variables['form']['rtc_registered_email']);
  $variables['rtc_password'] = drupal_render($variables['form']['rtc_password']);
  $variables['rtc_submit_form'] = drupal_render_children($variables['form']);
}

上記のコードは、2つのフォームを追加する方法を説明しています。

以下は、ここで これはTPLファイルに追加する方法です

<?php
$form = drupal_get_form('user_register_form');
print drupal_render($form);
?>

それが役に立てば幸い :)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.