it-swarm.com.de

Wie sende ich programmgesteuert ein Webformular in drupal form_submit?

Drupal 7, Webform 3

Ich möchte programmgesteuert ein Webformular über drupal_form_submit senden. Ich habe jedoch Schwierigkeiten, eine funktionierende $ form_state-Struktur zu finden. Ich habe mein Webformular über die Benutzeroberfläche gesendet und die Variable $ form_state in meiner Rückruffunktion validiert, aber ich kann es immer noch nicht zum Laufen bringen.

Mein Webformular hat ein Textfeld mit dem Namen "Vorname". Unten finden Sie einen Codeausschnitt, den ich zum Testen verwendet habe. Immer wenn ich es ausführe, ist $ form_errors null. Ohne Fehler würde ich erwarten, dass der Code funktioniert hat. Wenn ich jedoch die Ergebnisse des Webformulars überprüfe, wird angezeigt, dass keine Übermittlungen vorliegen.

<?php
$form_id = 'webform_client_form_55805';
$form_state = array(
  'values' => array(
    'submitted' => array(
      'first_name' => 'David',
    ),
  ),
);
$node = node_load(55805);
$submission = (object) array();

drupal_form_submit($form_id, $form_state, $node, $submission);
$form_errors = form_get_errors();
?>

Mache ich es falsch Gibt es einen besseren Weg? Sollte ich stattdessen webform_client_form_submit verwenden?

Ich habe mir diese Fragen und Antworten angesehen, aber sie funktionieren bei mir nicht und scheinen etwas kompliziert zu sein: Wie kann ich ein Webformular programmgesteuert mit Ajax einreichen?

6
David

Ich habe PhpStorm und xdebug verwendet, um den form.inc-Code zu durchlaufen, und schließlich die richtige Struktur für meinen $ form_state gefunden. Die Struktur, die ich gepostet habe, war eng, nur um die 'op' => t('Submit') hinzuzufügen. Siehe meinen endgültigen Arbeitscode unten.

Um meine Fragen zu beantworten:

  1. Ja, drupal_form_submit sollte ich verwenden.
  2. Siehe Code unten für die magische $ form_state-Struktur.
<?php
$form_id = 'webform_client_form_55805';
$form_state = array(
  'values' => array(
    'submitted' => array(
      'first_name' => 'David',
    ),
    'op' => t('Submit'),
  ),
);
$node = node_load(55805);
$submission = (object) array();

drupal_form_submit($form_id, $form_state, $node, $submission);
$form_errors = form_get_errors();
?>
5
David

Ich musste eine leichte Änderung an Davids Antwort oben vornehmen (ich kann nichts dazu sagen, da ich nicht genug Punkte habe). Die Daten wurden nicht gesendet, da die Operation nicht mit dem Text auf der Schaltfläche "Senden" übereinstimmte. Ich habe es richtig eingelesen, indem ich es aus den an den Knoten angehängten Webformularinformationen eingelesen habe.

<?php
$node = node_load(55805);
$form_id = 'webform_client_form_55805';
$form_state = array(
  'values' => array(
'submitted' => array(
  'first_name' => 'David',
    ),
    'op' => empty($node->webform['submit_text']) ? t('Submit') : t($node->webform['submit_text']),
  ),
);

$submission = (object) array();

drupal_form_submit($form_id, $form_state, $node, $submission);
$form_errors = form_get_errors();
?>
0
tripper54