Wie kann ich mich in das System des Kontaktformulars "Nachricht gesendet" einbinden und das generierte HTML ändern?


7

Ich habe eine Drupal-Site, auf der ich das standortweite System Contact verwende, damit Besucher Nachrichten an den Site-Eigentümer senden können. Sobald ein Besucher das Formular abschickt, wird der Benutzer zur Startseite weitergeleitet und oben wird ein Sticky angezeigt:

Ihre Nachricht wurde gesendet.

Meine Frage ist dann, ist es möglich, diese Nachricht zu ändern und der Ausgabe etwas HTML hinzuzufügen? Im Idealfall würde ich Javascript hinzufügen, um eine virtuelle Seitenansicht für das Google Analytics-Konto zu erstellen, damit ich sie als Zielkonvertierung verfolgen kann.

Ich stelle mir vor, dass dies eine hook_-Funktion in meiner Vorlagendatei wäre, aber ich bin relativ neu in diesem Prozess.

Antworten:


5

Verwenden Sie einfach hook_form_alter () und fügen Sie $ form ['# submit '] einen Rückruf hinzu. Der einfachste Weg, die ID Ihres Formulars zu finden, besteht darin, es mit Firebug zu überprüfen. Dieser Artikel enthält viel detailliertere Informationen: http://www.lullabot.com/articles/modifying-forms-drupal-5-and-6 .

Zusamenfassend:

  • Suchen Sie die ID für das Kontaktformular, "contact_mail_page" oder etwas anderes (beachten Sie, wie sich Hifens in Unterstriche verwandeln).
  • Implementieren Sie in einem neuen benutzerdefinierten Modul entweder: yourmodule_form_alter($form_id, &$form, 'contact_mail_page')oderyourmodule_form_contact_mail_page_alter($form_id, &$form)
  • Ändern Sie das Kontaktformular wie gewünscht mithilfe der Variablen $ form, die als Referenz übergeben wird

Vielen Dank für Ihre Antwort. Ich habe diesen Artikel gelesen und bin dieser Lösung nicht näher gekommen. Hast du ein beispiel Dieser Artikel zeigt, wie man einen Hook für ein Modul schreibt, aber das Kontaktformular ist ein Systemmodul. Wenn ich also die Änderung vornehme, würde ein Kernupdate diese Änderung wegblasen. Vielleicht fehlt mir noch etwas.
Shanabus

Ich habe den ersten Beitrag bearbeitet, um weitere Details aufzunehmen
Alex Weber

Danke für das Update. Ich bin mir immer noch nicht sicher, wie ich Ihre Lösung implementieren soll. Also erstelle ich ein neues Modul und lege den Code wo ab? Wie oben erwähnt, bin ich neu genug bei Drupal, dass ich nie ein Modul schreiben musste. Vielleicht sollte ich einfach dieses Webform-Modul verwenden. Nochmals vielen Dank für jede Hilfe.
Shanabus

1

Das Webform- Modul ist möglicherweise besser für Ihre Anforderungen geeignet, wenn es sich nur um eine allgemeine Website-weite Form handelt.


Ich wollte hinzufügen ... Mit dem Webformularmodul können Sie eine Umleitungs-URL angeben, die verwendet wird, wenn das Formular erfolgreich gesendet wurde. Dies bedeutet auch, dass Sie die Erfolgsseite einfach als regulären Inhaltstyp verwalten können. Hoffe das hilft. James

0

@shanabus, Sie verstehen, dass "Schreiben Sie einen Hook für ein Modul" falsch ist. Das Hauptziel beim Erstellen eines benutzerdefinierten Hooks für jedes vorhandene Modul, einschließlich eines Systemmoduls, besteht darin, das Verhalten zu überschreiben. Auf diese Weise können Sie Drupal an die Anforderungen einer bestimmten Site anpassen. Sie bearbeiten den vorhandenen Code nicht, sondern fügen neuen Code hinzu, der das "Hook" -System verwendet, um neue Funktionen / Ersatzfunktionen hinzuzufügen.

In der Regel befindet sich eine benutzerdefinierte Hook-Funktion in einem benutzerdefinierten Modul, das vom Autor der Site speziell für die Site erstellt wurde. Betrachten Sie es als einen Ort, an dem Sie Ihre Site-spezifischen Anpassungen speichern können, die Sie nicht für die größere Drupal-Community freigeben. Eine klassische Verwendung wäre ein hook_form_alter, wie Alex oben vorschlägt.

Weitere Informationen finden Sie in der Dokumentation zur Hook-API: http://api.drupal.org/api/drupal/includes--module.inc/group/hooks . Dies ist oft ein Konzept, mit dem neue Drupal-Entwickler zu kämpfen haben. Lassen Sie sich also nicht entmutigen, wenn Sie zusätzliche Anstrengungen unternehmen, um das Konzept herauszufinden. Wir waren alle hier :)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.