2009-07-01 3 views
3

Ich entwickle ein Modul, das die Anzeige von Hinzufügen/Bearbeiten von Knotenformularen ändert. Ich bin ein Anfänger in der Modulentwicklung.drupal form alter

Ich habe folgenden Code geschrieben, es funktioniert nicht richtig. Bitte sag mir, was ist daran falsch?

function hook_form_alter(&$form, $form_state, $form_id) { 
    if ($form_id == 'node_form') {  
    drupal_set_message(t('some message.')); 
    } 
} 

Dies ist für Drupal 6.

Antwort

19

Darüber hinaus haben die Formulare zum Hinzufügen/Bearbeiten von Knoten Content-Type-spezifische IDs. so Geschichte Knoten wäre:

function mymodule_form_alter(&$form, $form_state, $form_id) { 
    if ($form_id == 'story_node_form') {  
    drupal_set_message(t('Editing a story node!')); 
    } 
} 

Wenn Sie schauen, jeden Knoten bearbeiten Form, unabhängig von der Art zu fangen, versuchen Sie dies:

function mymodule_form_alter(&$form, $form_state, $form_id) { 
    if (isset($form['#node']) && $form_id == $form['#node']->type .'_node_form') { 
    drupal_set_message(t('Editing a node!')); 
    } 
} 
+0

Vielen Dank, ich bin in der Lage hinzufügen Neue Felder im Formular, aber nicht in der Lage, vorhandene Felder zu ändern oder zu entfernen. – Sharique

+1

Sie sollten in der Lage sein, alle diese Dinge zu tun - Sie überprüfen, um sicherzustellen, dass Ihr Modul nach anderen Modulen ausgeführt wird, die das Story-Node-Formular ändern; Wenn Ihr Modul Änderungen vornimmt, fügt CCK (zum Beispiel) ein weiteres Feld hinzu, da können Sie nicht viel tun. Wenn Sie den allerletzten Riss in einem Formular bekommen müssen, nachdem alle anderen Module ihr Ding gemacht haben, sehen Sie im Modul http://drupal.org/project/util nach. Unter anderem können Sie die Reihenfolge ändern, in der Module ihre Hooks ausführen. – Eaton

+1

Sie können auch mymodule_form_story_node_form_alter als Funktionsname für bestimmte Typen verwenden –

3

Sie Ihre Funktion "hook_form_alter" nicht nennen sollte, sondern "yourmodule_form_alter". yourmodule sollte der Name Ihrer Moduldatei sein. Wenn Ihr Modul also "Hallo" heißt, sollte der Funktionsname "hello_form_alter" sein.

1

Sie müssen das Hakensystem verstehen, die Drupal verwendet, wenn Sie wollen Modulentwicklung machen. Wenn irgendwo in Drupal ein Hook implementiert wird, heißt das hook_etwas. Dies funktioniert so, dass jedes Mal, wenn ein Modul den Hook implementieren möchte, der "Hook" durch den "Modellnamen" ersetzt werden muss. Drupal weiß, dass es eine Instanz dieses Hakens ist und nennt es so. Drupal verwendet das gleiche System in der Theming-Schicht mit einem Twist. Da die verschiedenen Themefunktionen auf der Grundlage eines Ranglistensystems betrachtet und priorisiert werden, können Designs die Art und Weise überschreiben, wie Module Daten ausgeben.

0
function hook_form_alter(&$form, $form_state, $form_id) { 
    if ($form_id == 'node_form') {  
    drupal_set_message(t('some message.')); 
    } 
} 

Zuerst müssen Sie "Haken" Keyword Ihr Modul Stichwort .. können Sie Ihre Modulnamen annehmen, ist "contact_us" dann

function contact_us_form_alter(&$form, $form_state, $form_id) { 

Nun ist diese Funktion verfügt über drei variable

  1. $ Formular
  2. $ form_id
  3. $ form_state

Die wichtigste Variable während der Formularänderung ist $ form_id, die im Grunde notiert, welche Form auf einer Seite geladen wird.

function contact_us_form_alter(&$form, $form_state, $form_id) { 
    print_r($form_id);exit; // Used to find the form id 
} 

, nachdem Sie das form_id

function contact_us_form_alter(&$form, $form_state, $form_id) { 
    if($form_id=='contact_us_form') 
     // Do your stuff 
} 

Hinweis gefunden werden: Prüfen Sie richtig benutzerdefinierten Modul schreiben haben und es ermöglichen .. auch klar Cache