it-swarm.com.de

Holen Sie sich die Knoten-ID in einem Formular senden

Ich habe Probleme damit, die Knoten-ID in meinem user_register_form_submit abzurufen. Ich muss die Knoten-ID des Knotens abrufen, auf dem sich mein Formular befindet. Lassen Sie mich Folgendes erklären:

Ich habe ein tpl für mein Benutzerregisterformular erstellt, um es in Knoten eines bestimmten Inhaltstyps zu drucken. Diese Knoten füllen mein Formular vorab aus und helfen beim Erstellen von Benutzern. Ich benötige diese Knoten-ID, um den Knoten nach dem Absenden des Formulars zu löschen, was Löschen bedeutet der Knoten, nachdem ein Benutzer erstellt wurde.

hier ist mein Haken:

    function hook_form_alter(&$form, &$form_state, $form_id) {
        if($form_id == 'user_register_form'){
            $form['#submit'][] = 'user_register_form_submit';
        }
    }

    function user_register_form_submit($form, &$form_state) {
    // print the node id
    }

Als letztes arbeite ich mit Drupal 7. Danke!

Fügen Sie eine weitere Zeile unter Ihrem Benutzerregisterformular ein.

$form = drupal_get_form('user_register_form'); 
print drupal_render($form);

echo "<script>
  jQuery(document).ready(function() {
    jQuery('#user-register-form').append('<input type=\"hidden\" name=\"nid\" value=".arg(1).">');
  });
</script>";

Dann erhalten Sie die nid des Knotens in der Sendefunktion des Benutzerregisters wie folgt:

function user_register_form_submit($form, &$form_state) {
  // print the node id
  echo $form_state['input']['nid'];
}

Sie können dies auch mit hook_form_alter Tun. Fügen Sie ein verstecktes Feld hinzu und weisen Sie nid als Wert zu.

function hook_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'user_register_form') {
    $form['#submit'][] = 'user_register_form_submit';
    $form['nid'] = array(
      '#value' => arg(1),
      '#type' => 'hidden',
    );
  }
}
1
ARUN

Für Drupal 8 Fügen Sie Ihren benutzerdefinierten Submit-Handler in der folgenden Form hinzu:

$form['actions']['submit']['#submit'][] = '_custom_node_form_submit';

Und fügen Sie einen benutzerdefinierten Submit-Handler hinzu:

function _custom_node_form_submit($form, \Drupal\Core\Form\FormStateInterface $form_state) {
  echo $form_state->getValue('nid');
}

Zum Erweitern Niks Antwort.

function custom_module_form_validate(&$form, &$form_state) {
  // This will print the node id.
  var_dump(arg(1)); 
}

Ich wusste das nicht wirklich, bis ich es gerade versuchte. Der Kredit sollte an Niks gehen.

Hinweis; Aus dem Drupal docs arg (): "Gibt eine Komponente des aktuellen Drupal Pfads" zurück. In diesem Fall den zweiten. Das bedeutet, dass dies funktioniert nicht auf allen Formularen, da nicht alle Formulare den Knotenpfad verwenden.

Bearbeiten: Einbeziehen von Informationen aus dem MPD-Kommentar unten Vermeiden Sie die Verwendung dieser Funktion, wenn möglich, da der resultierende Code schwer zu lesen ist. Versuchen Sie in Menü-Rückruffunktionen, benannte Argumente zu verwenden. In der Erklärung in menu.inc erfahren Sie, wie Sie Rückrufe erstellen, die Argumente enthalten. Bei dem Versuch, diese Funktion zum Laden eines Elements aus dem aktuellen Pfad zu verwenden, z. Laden Sie stattdessen menu_get_object (), um den Knoten auf eine Knotenseite zu laden.

0
Christian