Mehrfachformular auf der Modulseite

7

Ich habe ein Modul erstellt. Ich habe ein Formular erstellt und es auf der Seite implementiert:

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;
}

Ich hätte gerne ein anderes Formular dazu

chrispooh
quelle

Antworten:

17

Anstatt drupal_get_form als Seitenrückruf zu verwenden, können Sie einen benutzerdefinierten Rückruf angeben und die Formulare dort erstellen. Eine Implementierung in Drupal 6 würde folgendermaßen aussehen:

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;
}

Der einzige Unterschied in Drupal 7 besteht darin, mit einem Render-Array zu arbeiten, im Gegensatz zu einer Zeichenfolge im benutzerdefinierten Seitenrückruf, ähnlich dem folgenden Code:

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;
}
Chris Pliakas
quelle
Danke Chris für die schnelle Antwort. Ich habe ein "Arrayarray" -Feedback. Was kann ich damit machen?
Chrispooh
Ich gehe von Ihrer Antwort aus, dass Sie mit D7 arbeiten, daher habe ich der obigen Antwort ein D7-Beispiel hinzugefügt. Die Erklärung ist, dass der größte Teil des Inhalts in D7 als Render-Arrays dargestellt wird, sodass Sie im Gegensatz zu Zeichenfolgen mit Arrays arbeiten. Ihre Arrays werden typisiert, weshalb Sie "Array" sehen. Durch geringfügiges Ändern des Rückrufs sollte das Problem behoben werden.
Chris Pliakas
@ Chris, wie thematisiere ich diese beiden Formulare in einer tpl-Datei? stackoverflow.com/questions/23242295/…
Kalidasan
1
Fand einen Artikel drupalknowledge.blogspot.in/2013/02/…
kalidasan
@kalidasan: aber es sagt nicht, wie man es zu meiner tpl-Datei hinzufügt? Hast du eine Antwort darauf gefunden? Ich habe ähnliche Fragen hier - drupal.stackexchange.com/questions/125632/…
Hitesh
0

Überprüfen Sie hier

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']);
}

Der obige Code beschreibt, wie Sie zwei Formulare hinzufügen können.

Unten hier So fügen Sie es der tpl-Datei hinzu

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

Ich hoffe es hilft :)

Hitesh
quelle