Namen von Submitbutton ändern, form_alter (Drupal 5)
Mitunter möchte man die Bezeichnung eines Submitbuttons ändern. Z. Bsp. heißt ein Button "Speichern" obwohl er "Suchen" heißen sollte.
Ich erkläre die Möglichkeit der Änderung der Buttonbezeichnung an einem konkreten Beispiel, einer Suche in der Hilfe einer Website.
Ein View mit einem exposed Filter, um in einem bestimmten Bereich (die Hilfeseiten) Inhalte zu suchen. Der im Views-Formular gebildete Button hat zunächst die Bezeichnung "Speichern". Die soll in "Suchen" geändert werden.
Codeschnipsel aus dem HTML-Code des Formulares des fertigen Views, also der Suchseite:
<form action="http://www.hundelobby-dresden-ev.de/help/search" accept-charset="UTF-8" method="get" id="views-filters">
Bei diesem Code interessiert uns
id="views-filters"
. Ich komme weiter unten darauf zurück.
Minimodul erstellen
Ein Minimodul wird erstellt. Dafür wird folgendes angelegt:
- Ordner mit Name "help_search"
- im Ordner eine Datei: Name: "help_search.info"
- im Ordner eine Datei: Name: "help_search.module"
Inhalt der Datei "help_search.info":
; $Id: legal_button.info,v 1.0 2008/03/27 21:03:18 quiptime Exp $
name = "Help Search Button"
description = "Defines the submit button for the help search."
version = "5.x"
package = "Mini modules"
dependencies = views search
; Information added by quiptime.com
version = "5.x-1.0"
Mit
package = "Mini modules"
erzeugt man in der Moduladministration einen extra Bereich für seine Minimodule.Die dependencies erklären sich selbst: Das Minimodul macht ohne die dabei genannten Module keinen Sinn
Inhalt der Datei "help_search.module":
<?php
/* $Id: help_search.module,v 1.0 2008/04/01 13:38:22 quiptime Exp $ */
function help_search_form_alter($form_id, &$form) {
if($form_id == 'views_filters') {
$form['submit']['#value'] = t('Search');
}
}
?>
Kleine Fallstricke
Es gibt kleine Fallen, die bei Nichtbeachtung dazu führen das die Buttonänderung nicht funktioniert:
- Im HTML Quellcode hat die Form ID die Bezeichnung "views-filters". Also mit Bindestrich.
<form action="http://www.hundelobby-dresden-ev.de/help/search" accept-charset="UTF-8" method="get" id="views-filters">
Aber Minimodul wird als Form ID "views_filters" eingetragen. Also mit Unterstrich.
function help_search_form_alter($form_id, &$form)
-
Der Name des Minimodules und der Name der Funktion in der Minimodul-Datei müssen konform gehen.
D. bedeutet., wenn das Minimodul den Namen "help_search" hat dann muss die Funktion im Modulcode "function help_search_form_alter" heißen.
Minimodul aktivieren
Hat man das Minimodul erstell wird der Ordner "help_search" in den Bereich der Module von Drupal hochgeladen. Das neue Minimodul wird in der Administration /admin/build/modules aktiviert. Der Button hat nun die Bezeichnung "Suchen".
Besonderheit bei Views Buttons
Die Form ID's von Views haben alle die Form ID "views-filters"/"views_filters". Um nun mit einem einzelnen Minimodul nicht die Buttons aller Views zu ändern kann die Funktion im Minimodul derart erweitert werden das man das Minimodul nur auf einzelne Views anwendet.
<?php
/* $Id: help_search.module,v 1.0 2008/04/01 13:38:22 quiptime Exp $ */
function help_search_form_alter($form_id, &$form) {
if($form_id == 'views_filters' && $form['#view_name'] == 'Name_des_View' ) {
$form['submit']['#value'] = t('Search');
}
}
?>
Der "Name_des_View" ist exakt der Name wie er im View in der Basiskonfiguration eingetragen ist.
- Anmelden oder Registrieren um Kommentare zu schreiben
Klasse Sache
am 11.04.2008 - 10:21 Uhr
Werde es bei Gelegenheit ausprobieren - das finde ich sehr praktisch.
Zu erwähnen ist, daß man Buttonbezeichnungen natürlich auch in der Lokalisierung ändern kann, dann heissen allerdings plötzlich alle z.B. "Absenden" statt speichern, was selten erwünscht ist.
Drupal - the Linux of the Web
ID des Submit
am 16.07.2008 - 10:18 Uhr
Hab das soweit übernommen, das Modul heißt nur "buttons_senden" wie man an der Funktion sehen kann:
function buttons_senden_form_alter($form_id, &$form) {
if($form_id == 'webform_client_form_14') {
$form['submit']['#value'] = t('Absenden');
}
}
Dabei wird aber nicht die Value des Submit verändert sondern nur der Text vor den Button geschrieben:
Absenden<input type="submit" name="op" id="edit-submitbutton" value="Speichern" class="form-submit" />
Das Problem in diesem Fall: die ID des Submits lautet "submitbutton", also muss der korrekte Code lauten:
$form['submitbutton']['#value'] = t('Absenden');
also im Zweifelsfall hilft ein print_r($form) innerhalb der Funktion durchaus mal weiter.
eigentor schrieb Werde es
am 22.09.2008 - 09:45 Uhr
Werde es bei Gelegenheit ausprobieren - das finde ich sehr praktisch.
Zu erwähnen ist, daß man Buttonbezeichnungen natürlich auch in der Lokalisierung ändern kann, dann heissen allerdings plötzlich alle z.B. "Absenden" statt speichern, was selten erwünscht ist.
Drupal - the Linux of the Web
Die Lokalisierung ändert aber den Text für alle Buttons des Typs Submit. Der Code hier ist wohl dafür gedacht auch einzelne Buttons zu ändern, also z.B. kann in Nodes "speichern" bleiben, aber bei Kontaktformularen "senden" oder eben bei nem Views Filter "suchen".
http://www.twitter.com/aschiwi
Drupal-Initiative e.V.
Was tut es?
am 12.11.2008 - 03:22 Uhr
Hallo,
ich habe leider nicht sehr viel Ahnung von Drupal und PHP.
Habe eben dieses Minimodul erstellt, aber es scheint nicht zu funktionieren. Was macht es denn?
Habe ein Formular erstellt (mit angegebener id) und das Modul ein- und ausgeschaltet. Aber es gibt keine Veränderungen...
Hoffe mir kann das jemand erklären. Danke! :-)
Hast du es mit Drupal 5
am 12.11.2008 - 09:53 Uhr
Hast du es mit Drupal 5 probiert? Im Text steht, dass der Text des "submit"-Button eines Views Exposed Filters geändert wird. Statt "speichern" wird da nun "suchen" stehen. Damit du die Änderung deines Moduls siehst, brauchst du also schon mal einen View mit Exposed Filter. Außerdem muss das Modul "Search" aktiviert werden, sonst macht das Minimodul keinen Sinn :-)
Wenn du dich genau an die Anleitung hältst, wird es sicher klappen. Wenn nicht, beschreibe genau deine Schritte und poste den von dir verwendeten Code, dann kriegen wir den Fehler schon raus ;-)
Und vielleicht noch als Lesetipp: http://dug-hannover.org/content/treffen-vom-11-november-2008-modulsystem..., Das ist die Präsentation, die derhasi gestern beim DUG Hannover Treffen gehalten hat.
-------------------------------------------------
I don't know the question but the answer is Views
http://www.twitter.com/aschiwi
Drupal-Initiative e.V.
Minimodul, form_alter, Formulare pimpen
am 28.11.2008 - 02:41 Uhr
Ergänzende und weiterführende Tipps um Formulare zu gestalten und/oder zu ändern
finden sich hier: Da beisst die Maus keinen Faden ab.
Auf jeden Fall sollte man immer die Form API (FAPI) von Drupal zu rate ziehen wenn man mit Formularen arbeitet.
FAPI Drupal 5
FAPI Drupal 6
FAPI Drupal 7
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.