2009-07-01 6 views
3

Je suis en train de développer un module qui modifie l'affichage des formes de nœuds d'ajout/d'édition. Je suis un débutant en développement de modules.drupal form modifier

J'ai écrit le code suivant, il ne fonctionne pas correctement. S'il vous plaît dites-moi ce qui ne va pas avec ça?

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

Ceci est pour 6.

drupal

Répondre

19

En outre, les formulaires d'ajout/de modification de noeud possèdent des ID spécifiques au type de contenu. si les nœuds de l'histoire seraient:

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

Si vous cherchez à attraper toutes les formes d'édition de noeud, quel que soit le type, essayez ceci:

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

clair Merci vous, je suis en mesure d'ajouter nouveaux champs dans le formulaire, mais pas en mesure d'altérer ou de supprimer des champs existants. – Sharique

+1

Vous devriez être capable de faire toutes ces choses - vous devez vérifier que votre module fonctionne APRÈS les autres modules qui modifient la forme du nœud de l'histoire; si votre module fait ses changements, alors CCK (par exemple) ajoute un autre champ, il n'y a pas grand chose à faire. Si vous avez besoin d'obtenir la dernière fente sur un formulaire, après que tous les autres modules aient fait leur travail, consultez le module http://drupal.org/project/util. Entre autres choses, il vous permet de changer l'ordre dans lequel les modules exécutent leurs hooks. – Eaton

+1

vous pouvez également utiliser mymodule_form_story_node_form_alter comme nom de fonction, pour des types spécifiques –

3

vous ne devriez pas appeler votre fonction "hook_form_alter" mais plutôt "yourmodule_form_alter". yourmodule devrait être le nom de votre fichier de module, donc si votre module s'appelle "bonjour", le nom de la fonction devrait être "hello_form_alter".

1

Vous devez comprendre le système de crochet qui Drupal utilise si vous voulez faire du développement de module. Quand un hook est implémenté quelque part dans Drupal, il s'appelle hook_something. La façon dont cela fonctionne est que chaque fois qu'un module veut implémenter le hook, vous devez remplacer le 'hook' par le 'modelname'. Drupal saura que c'est une instance de ce hook et l'appellera comme tel. Drupal utilise également le même système dans la couche thématique, avec une torsion. Comme il va regarder les différentes fonctions thématiques et les hiérarchiser en fonction d'un système de classement, cela a permis aux thèmes de surcharger la façon dont les modules produisent des données.

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

Vous devez d'abord mot-clé "crochet" à votre mot-clé du module .. laisse supposer le nom de votre module est "contact_us", puis

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

Maintenant, cette fonction a trois variables

  1. $ formulaire
  2. $ id_formulaire
  3. $ form_state

La variable la plus importante lors de la modification de la forme est $ form_id qui notent fondamentalement quelle forme est chargée dans une page.

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

après avoir trouvé le form_id

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

Note: Vérifiez que vous avez correctement écrire module personnalisé et activer .. également cache