Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Module › Modul-Entwicklung ›

Mehrer AJAX Buttons auf einer Formularseite

Eingetragen von conscienc3 (1)
am 11.07.2011 - 21:14 Uhr in
  • Modul-Entwicklung
  • Drupal 7.x

Hi,

ich stehe vor einem AJAX Problem.

Ich habe zwei Fieldsets in meinem Formular. Jedes Fieldset hat einen Hinzufuegen- und Entfernenbutton ... damit moechte ich via AJAX dynamisch in das 1. Fieldset Textfelder und ins zweite ebenfalls Textfelder einfuegen, jedoch unterschiedlicher Art ... leider functioniert folgendes Codesnippet nicht:

<?php
function telquel_protocol_form($form, &$form_state) {
 
// Because we have many fields with the same values, we have to set
  // #tree to be able to access them.
 
$form['#tree'] = TRUE;
 
$form['names_fieldset'] = array(
   
'#type' => 'fieldset',
   
'#title' => t('Plenumsteilnehmer'),
   
// Set up the wrapper so that AJAX will be able to replace the fieldset.
   
'#prefix' => '<div id="names-fieldset-wrapper">',
   
'#suffix' => '</div>',
  );

 
// Build the fieldset with the proper number of names. We'll use
  // $form_state['num_names'] to determine the number of textfields to build.
 
if (empty($form_state['num_names'])) {
   
$form_state['num_names'] = 3;
  }
 
  for (
$i = 0; $i < $form_state['num_names']; $i++) {
    if (
$i < 3) {
     
$form['names_fieldset']['name'][$i] = array(
       
'#title' => t('@num. Teilnehmer', array('@num' => ($i + 1))),
       
'#type' => 'textfield',
       
'#required' => TRUE,
      );
    }
    else {
     
$form['names_fieldset']['name'][$i] = array(
       
'#title' => t('@num. Teilnehmer', array('@num' => ($i + 1))),
       
'#type' => 'textfield',
      );
    }
  }

 
$form['names_fieldset']['add_name'] = array(
   
'#type' => 'submit',
   
'#value' => t('Hinzufuegen'),
   
'#submit' => array('protocol_add_one_name'),
   
// See the examples in ajax_example.module for more details on the
    // properties of #ajax.
   
'#ajax' => array(
     
'callback' => 'protocol_names_ajax_callback',
     
'wrapper' => 'names-fieldset-wrapper',
     
'name' => 'name',
    ),
  );
 
  if (
$form_state['num_names'] > 1) {
   
$form['names_fieldset']['remove_name'] = array(
     
'#type' => 'submit',
     
'#value' => t('Entfernen'),
     
'#submit' => array('protocol_remove_one_name'),
     
'#ajax' => array(
       
'callback' => 'protocol_names_ajax_callback',
       
'wrapper' => 'names-fieldset-wrapper',
         
'name' => 'name',
      ),
    );
  }
 
 
// Topic-Fieldset definition
 
$form['topic_fieldset'] = array(
   
'#title' => t('Themen'),
   
'#type' => 'fieldset',
   
'#description' => t('Eine Liste der Themen des Plenums'),
   
'#prefix' => '<div id="topics-fieldset-wrapper">',
   
'#suffix' => '</div>',
  );
 
  if (empty(
$form_state['num_topics'])) {
   
$form_state['num_topics'] = 1;
  }
 
  for (
$n = 0; $n < $form_state['num_topics']; $n++) {
   
$form['topic_fieldset']['topic'][$n] = array(
     
'#title' => t('@num. Thema', array('@num' => ($n + 1))),
     
'#type' => 'textfield',
    );
  }

 
$form['topic_fieldset']['add_topic'] = array(
   
'#type' => 'submit',
   
'#value' => t('Hinzufuegen'),
   
'#submit' => array('protocol_add_topic'),
   
'#ajax' => array(
     
'callback' => 'protocol_topics_ajax_callback',
     
'wrapper' => 'topics-fieldset-wrapper',
     
'name' => 'topic',
    ),
  );
 
  if (
$form_state['num_topics'] > 1) {
   
$form['topic_fieldset']['remove_topic'] = array(
     
'#type' => 'submit',
     
'#value' => t('Entfernen'),
     
'#submit' => array('protocol_remove_topic'),
     
'#ajax' => array(
       
'callback' => 'protocol_topics_ajax_callback',
       
'wrapper' => 'topics-fieldset-wrapper',
       
'name' => 'topic',
      ),
    );
  }

 
$form['submit'] = array(
   
'#type' => 'submit',
   
'#value' => t('Abschicken'),
  );
  return
$form;
}

function
protocol_topics_ajax_callback($form, $form_state) {
  return
$form['topics_fieldset'];
}

function
protocol_remove_topic($form, &$form_state) {
  if (
$form_state['num_topics'] > 1) {
   
$form_state['num_topics']--;
  }
 
$form_state['rebuild'] = TRUE;
}

function
protocol_add_topic($form, &$form_state) {
 
firep('add topic');
 
$form_state['num_topics']++;
 
$form_state['rebuild'] = TRUE;
}

function
protocol_names_ajax_callback($form, $form_state) {
  return
$form['names_fieldset'];
}
function
protocol_add_one_name($form, &$form_state) {
 
firep('add name');
 
$form_state['num_names']++;
 
$form_state['rebuild'] = TRUE;
}

function
protocol_remove_one_name($form, &$form_state) {
 
firep('remove name');
  if (
$form_state['num_names'] > 1) {
   
$form_state['num_names']--;
  }
 
$form_state['rebuild'] = TRUE;
}
?>

Mach ich das ganze mit nur einem Fieldset und einem Buttonpaar funktioniert alles. Was laeuft da schief ? Ich komm mit meiner suche im Internet irgendwie nicht weiter.

Ich danke euch fuer eure Hilfe.

‹ Form -> submit -> webroot anstatt Drupal [gelöst] $form_values leer ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Medien und andere Daten mit Feeds von Drupal 7 auf Drupal 10 migrieren
  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
Weiter

Neue Kommentare

  • Inzwischen sind wir bei
    vor 1 Tag 42 Minuten
  • Migrieren von D7 auf D8/ D10/ D11
    vor 1 Tag 16 Stunden
  • melde mich mal wieder, da ich
    vor 7 Wochen 5 Tagen
  • Hey danke
    vor 7 Wochen 6 Tagen
  • Update: jetzt gibt's ein
    vor 8 Wochen 9 Stunden
  • Hallo, im Prinzip habe ich
    vor 8 Wochen 4 Tagen
  • Da scheint die Terminologie
    vor 8 Wochen 4 Tagen
  • Kannst doch auch alles direkt
    vor 9 Wochen 2 Tagen
  • In der entsprechenden View
    vor 9 Wochen 2 Tagen
  • Dazu müsstest Du vermutlich
    vor 9 Wochen 2 Tagen

Statistik

Beiträge im Forum: 250235
Registrierte User: 20462

Neue User:

  • marouane.blel
  • capilclinic
  • Quabzibboter

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 15 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association