it-swarm.com.de

Kontaktformular beim Absenden umleiten

Verwenden Sie Drupal 8 und versuchen Sie, das Kontaktformular nach dem Senden auf dieselbe Seite umzuleiten. Standardmäßig scheint es auf die Startseite umzuleiten.

Ich habe meine Datei themename.theme bearbeitet

function themename_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {

  //contact page form
  if ($form_id == 'contact_message_feedback_form') {
    $url = Url::fromRoute('contact.site_page');
    $form_state->setRedirectUrl($url);
  }
}

Dies wirft eine Reihe von MySQL-Fehlern auf. Wie so:

Uncaught exception thrown in session handler.

Drupal\Core\Database\DatabaseExceptionWrapper: SQLSTATE[08S01]: Communication link failure: 1153 Got a packet bigger than 'max_allowed_packet' bytes: UPDATE {sessions} SET uid=:db_update_placeholder_0, hostname=:db_update_placeholder_1, session=:db_update_placeholder_2, timestamp=:db_update_placeholder_3 WHERE ( (sid = :db_condition_placeholder_0) ); Array ( [:db_update_placeholder_0] => 1 [:db_update_placeholder_1] => ::1 [:db_update_placeholder_2] => _sf2_attributes|a:1:{s:3:"uid";s:1:"1";}_sf2_flashes|a:0:{}_sf2_meta|a:4:{s:1:"u";i:1454074283;s:1:"c";i:1452243053;s:1:"l";s:7:"2000000";s:1:"s";s:43:"dVseXv540u6wL5GZm_gs6fzuP9qtck-j5A5lexqnaQE";}authorize_page_title|O:48:"Drupal\Core\StringTranslation\TranslatableMarkup":3:{s:9:"*string";s:14:"Update manager";s:12:"*arguments";a:0:{}s:10:"*options";a:0:{}}messages|a:1:{s:6:"status";a:2:{i:0;O:25:"Drupal\Core\Render\Markup":1:{s:9:"*string";s:1020035:"<script class="-kint-js">(function(){if("undefined"===typeof kintInitialized){kintInitialized=1;var e=[],f=-1,g=function(b){var a=window in Drupal\Core\Session\SessionHandler->write() (line 89 of /Users/timmcdonald/Code/waypoint/v3/core/lib/Drupal/Core/Session/SessionHandler.php).

und andere Fehler. Fehlt mir etwas?

5
Tim McDonald

Folgendes habe ich in einem benutzerdefinierten Modul getan, wenn jemand anderes dies tun muss

 Drupal\Core\Url verwenden; 
 
 Funktion custom_module_form_alter (& $ form,\Drupal\Core\Form\FormStateInterface $ form_state, $ form_id) {
 
 // Kontaktseitenformular 
 if ($ form_id == 'contact_message_feedback_form') {
 $ form ['action'] ['submit'] ['# submit'] [] = 'custom_module_contact_submit'; 
 dpm ($ form ['action'] ['submit']); 
} 
 
} 
 
 Funktion custom_module_contact_submit (& $ form,\Drupal\Core\Form\FormStateInterface $ form_state, $ form_id) {
 drupal_set_message ('wir haben ein Formular woohoo gesendet'); 
 $ url = Url :: fromRoute ('contact.site_page'); 
 $ form_state-> setRedirectUrl ($ url); 
} 
5
Tim McDonald

Und um es noch besser zu machen

/**
 * hook_form_FORM_ID_alter
 * @param $form
 * @param \Drupal\Core\Form\FormStateInterface $form_state
 * @param $form_id
 */
function minimal_form_contact_message_contact_me_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
  $form['actions']['submit']['#submit'][] = 'minimal_contact_submit';
}

/**
 * Contact form submit handler
 * @param $form
 * @param \Drupal\Core\Form\FormStateInterface $form_state
 */
function minimal_contact_submit(&$form, \Drupal\Core\Form\FormStateInterface $form_state) {
  drupal_set_message('we sent a form woohoo');
  // From URL to URL object
  $url = \Drupal\Core\Url::fromUserInput('/node/16');
  $form_state->setRedirect('contact.site_page');
}

Ich fand es nützlich, also könnten andere Leute es vielleicht auch nützlich finden

4
Cifren

Tims Lösung funktioniert auch anhand eines Themas.

In diesem Fall heißt das Thema 'minimal' und der folgende Code befindet sich in der Datei minimal.theme. Ich rufe hook_form_FORM_ID_alter in einem Formular mit der ID: contact_message_contact_me auf

Beachten Sie auch die Signatur im Submit-Handler sowie den direkten Aufruf zur Umleitung mit der standardmäßigen standortweiten Route für das Kontaktformular (mein Formular oben ist auf den Standardwert eingestellt). Sie müssen die URL nicht zuerst erstellen.

/**
 * hook_form_FORM_ID_alter
 * @param $form
 * @param \Drupal\Core\Form\FormStateInterface $form_state
 * @param $form_id
 */
function minimal_form_contact_message_contact_me_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
  $form['actions']['submit']['#submit'][] = 'minimal_contact_submit';
}

/**
 * Contact form submit handler
 * @param $form
 * @param \Drupal\Core\Form\FormStateInterface $form_state
 */
function minimal_contact_submit(&$form, \Drupal\Core\Form\FormStateInterface $form_state) {
  $form_state->setRedirect('contact.site_page');
}
1
Blue Waters

Um auf dieselbe Seite umzuleiten, unabhängig davon, um was es sich handelt (wenn Sie beispielsweise das Kontaktblockmodul verwenden), können Sie dies in Ihrem Rückruf zum Senden verwenden:

$form_state->setRedirectUrl(\Drupal\Core\Url::fromRouteMatch(\Drupal::routeMatch()));
1
GaëlG

Ich habe ein benutzerdefiniertes Modul für mein Formular erstellt. In der Übermittlungsfunktion habe ich keine Umleitungs-URL festgelegt, in der die Übermittlungsfunktion nicht auf eine Seite umleitet, und daher die Formularseite erneut angezeigt. Dies liegt daran, dass das Formular an dieselbe Seite gesendet wird, auf der sich das Formular befindet.

Bearbeiten: Nachdem ich diese Antwort gepostet habe, habe ich festgestellt, dass Sie nach dem Kontaktformular Drupal] gefragt haben. Daher ist diese Antwort natürlich falsch. Lesen Sie den Brief immer zweimal und dann noch zweimal.

<?php
/**
 * File: ContactForm.php
 */

namespace Drupal\module_name\Form;

use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Component\Utility\UrlHelper;

class ContactForm extends FormBase
{
    /**
     * {@inheritDoc}
     */
    public function getFormId() {
        return 'module_name_contact_form';
    }

    /**
     * {@inheritDoc}
     */
    public function buildForm(array $form, FormStateInterface $form_state) {
        // Form 
        return $form;
    }

    /**
     * {@inheritDoc}
     */
    public function validateForm(array &$form, FormStateInterface $form_state) {
        // Form validation
    }

    /**
     * {@inheritDoc}
     */
    public function submitForm(array &$form, FormStateInterface $form_state) {
        drupal_set_message('Form submitted');
    }
}
0
pusle