[Gelöst] hook_form_alter(): Formularbearbeitungen trennen
Eingetragen von Peter Majmesku (656)
am 30.05.2010 - 13:35 Uhr in
am 30.05.2010 - 13:35 Uhr in
Hallo,
ich möchte mit meinem Modul mehrere Formulare bearbeiten. Nach Recherche und Versuchen habe ich bisher nicht viel mehr erfahren, als dass ich hook_form_alter() dazu verwenden kann, Formulare zu bearbeiten. Habe ich aber 10 verschiedene Formulare, so ist es wenig sinnvoll, 400 Zeilen Code in nur einer Funktion zu haben. Ich habe versucht hook_id_der_form_form_alter(&$form, &$form_state) zu benutzen, doch klappt dies selten.
Bei einem Formular habe ich es geschafft, bei einem anderen nicht. Wovon hängt das ab und wie kann man ordentlich hook_form_alter() Hooks trennen?
HAND
- Anmelden oder Registrieren um Kommentare zu schreiben
Ab Version 6 hat ..
am 30.05.2010 - 15:46 Uhr
.. jedes Formular in Drupal eine eindeutige $form_id.
Sie kannst du einfach in dem Hook_form_alter auflösen und ggf. an gesonderte Funktionen verteilen, z. B.
function xx_form_alter(&$form, &$form_state, $form_id)
{
switch ($form_id):
// Direktes bearbeiten
case 'xx1':
// Direkt bearbeiten
$form['feld1']['#value'] = 'irgendwas';
break;
// Bearbeiten in eigenen Funktionen
case 'xx2':
$form = _xx2_bearbeiten($form);
break;
// Nutzen von Drupaleigenen Funktionen
case 'xx3':
$form['feld3']['#value'] = check_plain($form['feld3']['#value']);
break;
endswitch;
} // END xx_form_alter
function _xx2_bearbeiten($form)
{
//mache was
return $form;
} // END _xx2_bearbeiten
Du bist somit recht flexibel.
Gruß
UwBach
hook_form_(FORM_ID_)alter
am 30.05.2010 - 15:49 Uhr
Hallo.
Ich habe versucht hook_id_der_form_form_alter(&$form, &$form_state) zu benutzen, doch klappt dies selten.
Das "Problem" bei [api:hook_form_FORM_ID_alter] ist, dass diese Funktion immer vor [api:hook_form_alter] ausgeführt wird.
Wenn also Modul A ein Formular per [api:hook_form_alter] ändert, ist diese Änderung in der entsprechenden Implementierung von [api:hook_form_FORM_ID_alter] in Modul B nicht sichtbar.
wie kann man ordentlich hook_form_alter() Hooks trennen?
Erstelle Dir Unterfunktionen für jedes zu verändernde Formular und rufe diese dann in Deiner Implementierung von [api:hook_form_alter] auf.
Beispiel:
<?php
/**
* Implement hook_form_alter().
*/
function mymodule_form_alter(&$form, &$form_state, $form_id) {
$function = 'mymodule_alter_'. $form_id;
if (function_exists($function)) {
call_user_func_array($function, array(&$form, &$form_state));
}
}
/**
* Alter hook for form "node_type_form".
*/
function mymodule_alter_node_type_form(&$form, &$form_state) {
$form['dingens'] = FALSE;
}
?>
hth,
Stefan
Danke für Eure Antworten.
am 31.05.2010 - 08:42 Uhr
Danke für Eure Antworten. Evtl. wäre ja somit auch ein Klassenaufruf von hook_form_alter() aus denkbar.