Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Module › Modul-Entwicklung ›

[Gelöst] hook_form_alter(): Formularbearbeitungen trennen

Eingetragen von Peter Majmesku (656)
am 30.05.2010 - 13:35 Uhr in
  • Modul-Entwicklung
  • Drupal 6.x

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

‹ Tab nur auf Benutzerprofil des eingeloggten Users anzeigen Cache einer Node löschen ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Ab Version 6 hat ..

Eingetragen von UwBach (310)
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

  • Anmelden oder Registrieren um Kommentare zu schreiben

hook_form_(FORM_ID_)alter

Eingetragen von stBorchert (6003)
am 30.05.2010 - 15:49 Uhr

Hallo.

jepster schrieb

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.

jepster schrieb

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

  • Anmelden oder Registrieren um Kommentare zu schreiben

Danke für Eure Antworten.

Eingetragen von Peter Majmesku (656)
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.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • wmtbpo361x
  • Rolle erstellen nicht zu finden
  • Medien und andere Daten mit Feeds von Drupal 7 auf Drupal 10 migrieren
  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
Weiter

Neue Kommentare

  • Rollen
    vor 4 Tagen 18 Stunden
  • Inzwischen sind wir bei
    vor 2 Wochen 1 Tag
  • Migrieren von D7 auf D8/ D10/ D11
    vor 2 Wochen 2 Tagen
  • melde mich mal wieder, da ich
    vor 9 Wochen 6 Tagen
  • Hey danke
    vor 10 Wochen 2 Stunden
  • Update: jetzt gibt's ein
    vor 10 Wochen 20 Stunden
  • Hallo, im Prinzip habe ich
    vor 10 Wochen 5 Tagen
  • Da scheint die Terminologie
    vor 10 Wochen 5 Tagen
  • Kannst doch auch alles direkt
    vor 11 Wochen 2 Tagen
  • In der entsprechenden View
    vor 11 Wochen 2 Tagen

Statistik

Beiträge im Forum: 250238
Registrierte User: 20467

Neue User:

  • LorisBen
  • StevenEness
  • ocvk2810

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 38 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association