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

Zwei submit-Buttons - submit-Handler mit Parametern

Eingetragen von axelf (110)
am 21.02.2010 - 13:40 Uhr in
  • Modul-Entwicklung
  • Drupal 6.x

Hi,

in einem Formular ibt es 2 Submitbuttons. Wenn der Button 'Dokument erstellen' geklickt wird, dann wird die angegeben Funktion ausgeführt. Wie kann ich dieser Funktion ein Array mit Daten als Parameter übergeben?
In der Doku steht '#submit' => array('funktion' => array('arg1'...)), aber da bekomme ich immer eine Fehlermeldung, das als erstes Argument ein String erwartet wird und ein Array angegeben wurde.

<?php
$form
['submit'] = array(
       
'#type' => 'submit',
       
'#value' => 'Daten ändern',
);

$form['create_pdf'] = array(
       
'#type' => 'submit',
       
'#value' => 'Dokument erstellen',
       
'#submit' => array('_create_PDF')
);
?>

‹ [gelöst] Wysiwyg Editor für Textarea Node ID nach Create Content ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Hi wenn ich dich richtig

Eingetragen von Kars-T (1473)
am 27.02.2010 - 15:41 Uhr

Hi

wenn ich dich richtig verstehe, dann willst du etwas im Submit des Formulars machen.

Schau bitte nochmal hier nach:
http://api.drupal.org/api/drupal/developer--topics--forms_api.html/6

Validating Forms und Submitting Forms

Mit dem Ansatz denke ich kannst du erreichen, was du willst

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hi, also ich habe gelesen,

Eingetragen von axelf (110)
am 27.02.2010 - 16:42 Uhr

Hi,

also ich habe gelesen, der einzige Weg um zu unterscheiden, welcher Button gedrückt wurde ist einen eigenen Submit-Handler zu benutzen ('#submit' => ....), da im form_state keine Unterscheidung möglich ist. In meiner angegeben Funktion wird auf eine andere Seite weitergeleitet und vorher wollte ich noch die Daten in eine Sessionvariable schreiben.
Habe es jetzt so gemacht, das ich mir die Daten in der _form-Funktion in die Sessionvariable schreibe und dann weiterverwende.

Zumindest kann ich in der _submit-Funktion nicht unterscheiden welcher Button gedrückt wurde.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hmm okay, muss ich mal

Eingetragen von Kars-T (1473)
am 27.02.2010 - 17:49 Uhr

Hmm okay, muss ich mal testen, soweit niemand anderes das grad weiß. Aber über die Session klingt schon ziemlich krank ;)

  • Anmelden oder Registrieren um Kommentare zu schreiben

Schau mal hier

Eingetragen von Kars-T (1473)
am 27.02.2010 - 17:56 Uhr

Schau mal hier rein:

http://api.drupal.org/api/function/system_settings_form/6
http://api.drupal.org/api/function/system_settings_form_submit/6

Da wird auch nur

<?php
if ($op == t('Reset to defaults')) {
?>

Geprüft und dann das entsprechende ausgeführt.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Kars-T schrieb Schau mal hier

Eingetragen von axelf (110)
am 27.02.2010 - 19:02 Uhr
Kars-T schrieb

Schau mal hier rein:

http://api.drupal.org/api/function/system_settings_form/6
http://api.drupal.org/api/function/system_settings_form_submit/6

Da wird auch nur

<?php
if ($op == t('Reset to defaults')) {
?>

Geprüft und dann das entsprechende ausgeführt.

Das hatte ich auch gefunden, aber ist nich die empfohlene Methode, sondern über den eigenen Submit-Handler. Ich find nur grad nicht wo ich das gelesen hatte. Die Lösung mit der Sessionvariable habe ich gewählt, weil ich ja nach der Weiterleitung die Daten zur Verfügung stehen haben muss. Gibts denn ne andere und nicht so "kranke" Lösung? :-)

  • Anmelden oder Registrieren um Kommentare zu schreiben

Was zum Teufel sind fuer Dich Submit Handler mit Parametern?

Eingetragen von quiptime (4972)
am 27.02.2010 - 21:32 Uhr

Ich kapier nicht warum Du nicht einen extra Submit Callback verwendest.

Allerdings ist in diesem Zusammenhang dies hier falsch:

<?php
'#submit' => array('_create_PDF')
?>

Ein Submit Callback ist eine Funktion. Also:

<?php
'#submit' => '_create_PDF';
?>

Du kannst aber auch am normalen $form Submit einen zusaetzlichen Submit anhaengen. Allerdings solltest Du dann Deinem Button einen Namen geben und in Deinem Submit Callback den geklickten Button pruefen.

<?php
$form
['create_pdf'] = array(
 
'#type' => 'submit',
 
'#name' => 'create_document',
 
'#value' => t('Create document'),
);

// Allgemeinen Submit erweitern.
$form['#submit'][] = 'create_document_pdf';

// Der Submit Callback.
function create_document_pdf($form, &$form_state) {
  if (
$form_state['clicked_button']['#name'] == 'create_document') {
   
// Hier das was der Callback verarbeiten soll.
 
}
}
?>

Ob Du die eine oder andere Variante verwendest haengt unter Umstaenden davon ab ob Du eine Reihenfolge benoetigst in der die Submit Callbacks abgearbeitet werden.

Submit Callbacks am Button werden vor den allgemeinen Submit Callbacks abgearbeitet.

Was zum Teufel sind fuer Dich Submit Handler mit Parametern?

Reichen die gesendeten Daten nicht aus die Du im Callback entgegennimmst?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Danke für die ausführliche

Eingetragen von axelf (110)
am 28.02.2010 - 12:51 Uhr

Danke für die ausführliche Antwort. Das hat meine Frage beantwortet und das Verständnis für das Formularhandling in Drupal wieder verbessert :-)
Ich meinte genau sowas, was du im letzten Codebeispiel geschrieben hast.

PS: Bis vor 4 Jahren wären wir ja fast Nachbarn gewesen :-)

  • Anmelden oder Registrieren um Kommentare zu schreiben

Zwei Submits

Eingetragen von md (3717)
am 08.03.2010 - 15:58 Uhr

Die zuerst genannt Variante mit einem Callback als Array funktioniert doch.
Folgendes Beispiel habe ich gerade ausprobiert:

<?php
      
//Normaler Submit Button
      
$form['submit'] = array(
       
'#type' => 'submit',
       
'#value' => t('Form submit'),
    );
   
      
//Zweiter Submit Button
   
$form['senden'] = array(
       
'#type' => 'submit',
       
'#value' => t('Noch ein Form submit'),
       
'#submit' => array('example_form'),
    );
?>

Und hier die beiden Funktionen:

<?php
function example_form($form, &$form_state) {
   
$name = $form_state['values']['name'];
   
drupal_set_message(t('Herzlichen Dank, %name', array('%name' => $name)));
}

function
form_example_form_submit($form, &$form_state) {
       
drupal_set_message('Vielen Dank');
   
}
?>

Funktioniert einwandfrei und ist auch bequemer in der Verwendung, da man nicht umständlich einen String vergleichen muss.

Nachzulesen im Pro Dvelopment Buch auf Seite 265 der englischen Version:

For example, if #submit is set to array('my_special_form_submit'), the function my_special_form_submit() will be used instead of the form's definded submit handler(s).

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hi, ja ich hatte es zu Anfang

Eingetragen von axelf (110)
am 08.03.2010 - 19:32 Uhr

Hi,

ja ich hatte es zu Anfang auch so gelöst, nur konnte ich in der Funktion (in dem oben genannten Bsp: example_form) irgendwie nicht auf &$form_state zugreifen. Ich habe es jetzt erstmal alles zum laufen gebracht und werde mir das aber nochmal ansehen für zukünftige Sachen.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • 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?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 2 Wochen 16 Stunden
  • Hey danke
    vor 2 Wochen 1 Tag
  • Update: jetzt gibt's ein
    vor 2 Wochen 2 Tagen
  • Hallo, im Prinzip habe ich
    vor 2 Wochen 6 Tagen
  • Da scheint die Terminologie
    vor 2 Wochen 6 Tagen
  • Kannst doch auch alles direkt
    vor 3 Wochen 4 Tagen
  • In der entsprechenden View
    vor 3 Wochen 4 Tagen
  • Dazu müsstest Du vermutlich
    vor 3 Wochen 4 Tagen
  • gelöst
    vor 6 Wochen 13 Stunden
  • Ja natürlich. Dass ist etwas,
    vor 6 Wochen 1 Tag

Statistik

Beiträge im Forum: 250233
Registrierte User: 20452

Neue User:

  • ByteScrapers
  • Mroppoofpaync
  • 4aficiona2

» 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 1 Benutzer und 29 Gäste online.

Benutzer online

  • wla

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