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

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

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


@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 :)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.