2010-09-08 11 views
1

J'utilise form_alter pour modifier la fonction de soumission lors de l'édition de contenu. Dans ma fonction personnalisée, je souhaite éditer un message personnalisé à l'écran avec le nom du titre. Je pensais que d'une manière que je pouvais faire quelque chose comme suitDrupal 6 obtention du titre de noeud à partir d'un formulaire soumis

function mymodule_myfunction(&$form) { 
    drupal_set_message(t('Some text ' . $form['#node']->title)); 
} 

Le titre n'est pas jointe à la « partie du texte »

J'appelle ma fonction en utilisant la ligne suivante dans mon form_alter:

$form['#submit'][] = 'mymodule_myfunction'; 
+0

vérifiez pour voir à quoi ressemble vraiment le module $ form. Si vous avez installé le module devel, vous pouvez faire quelque chose comme dsm ($ form) pour voir cette variable. – dkinzer

Répondre

0

Essayez de changer la signature de votre

function mymodule_myfunction(&$form) { 
    drupal_set_message(t('Some text ' . $form['#node']->title)); 
} 

Pour:

function mymodule_myfunction($form, &$form_state) { 
    drupal_set_message(t('Some text ' . $form['#node']->title)); 
} 

Essayez aussi installer le module devel afin que vous puissiez faire des choses comme

dsm($form); 
dsm($form_state); 

Et voir exactement ce que vous avez affaire.

En outre, si tout ce que vous voulez faire est de donner un message quand un nouveau noeud de type 'X' est créé un meilleur moyen est d'utiliser hook_nodeapi;

Cela pourrait ressembler à ceci:

function modulename_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) { 

if ($op == 'insert' && $node->type == 'my node type') { 
    drupal_set_message($node-title . ' is cool.'); 
} 
} 
+0

drupal_set_message (t ('Projet PRISK'. $ Form-> title)); n'a pas l'air de marcher. Mettra à jour la question avec comment j'appelle ma fonction. – Linda

0

DKinzer recommandé d'utiliser dsm ($ form) pour voir les variables. Le titre du nœud n'est pas rempli. Il peut être trouvé dans le tableau Post. La ligne suivante m'a permis de faire ce que je voulais.

drupal_set_message(t('Some Text '.$form['#post']['title'])); 
+0

Ceci est une utilisation incorrecte de la fonction t(). Voir la réponse de John Fiala ci-dessus pour plus de détails sur l'utilisation d'un espace réservé @title. – jhedstrom

1

Toutes les soumettre fonctions reçoivent deux paramètres qui leur sont transmises: formulaire de $, ce qui est le tableau de forme définitive après que tous les ajustements pour hook_form_alter et similaires et form_state $ qui, entre autres valeurs contient les valeurs soumises, qui ont été nettoyés et vérifiés pour les gammes. (Par exemple, si vous avez trois éléments dans une boîte de sélection, les données dans $ form_state ['values'] ont déjà fait en sorte que la valeur de cette entrée soit l'une des trois valeurs légales.)

Généralement, vous ne devrait pas utiliser $ form ['# post'] - cela ne fait pas partie de la méthode publiée pour obtenir des valeurs, et une mise à jour du noyau pour gérer un problème avec FAPI pourrait théoriquement casser votre code.

Essayez ceci:

function mymodule_myfunction($form, &$form_state) { 
    drupal_set_message(t('Some Message @title'), 
    array('@title' => $form_state['values']['title']))); 
} 

Notez l'utilisation corrigée de la fonction t() - l'intention de cette fonction est de permettre à d'autres utilisateurs de traduire le texte, et ainsi en utilisant « Some Message @title » le traducteur sait plus sur ce qui se passe. De plus, vous obtenez l'avantage que le texte alimenté par la fonction t de cette manière est également alimenté par check_plain(), ce qui empêche quelqu'un de faire quelque chose de malveillant avec l'entrée.

+0

Ce qui utilise le signe @ appelé. Je ne suis pas un développeur php natif, donc si je connais le terme correct, je peux faire plus de lecture sur le sujet. – Linda

+0

Eh bien, vérifiez le lien que j'ai fait avec la fonction t() ci-dessus - qui lie à la page d'API pour t(), qui indique que nous les appelons "espaces réservés". –