2010-03-09 7 views
2

J'essaie d'ajouter une chaîne au champ de corps d'un noeud CCK après qu'il a été soumis ou modifié. Cependant, j'ai du mal à travailler avec le corps dans le formulaire. Ma première tentative a été de modifier le champ body dans le gestionnaire de soumission en utilisant l'opérateur . pour ajouter une chaîne au champ body.Ajout de texte au champ de corps dans Drupal

//Calling this submit function to add string to body. 
function appendToBody_submit_function($form, &$form_state) { 
$form_state['values']['body'] = array('0' => array('value' => $form['#body'])) . $stringToAppend; 
} 

Cependant, je n'arrive pas à faire fonctionner cela, et je ne suis pas sûr que ce soit la bonne façon. Je suis nouveau à Drupal, Quelqu'un peut-il me diriger dans la bonne direction? Dois-je utiliser node_api pour cela?

Répondre

0

Je vous recommande d'installer le Devel module afin que vous puissiez facilement imprimer le contenu de $form_state en plaçant dans le corps de votre méthode. Je commence habituellement avec cela pour m'assurer que les valeurs sont où/ce que j'attends.

// Replace "hook" in the function name with the name of your module. 
function hook_submit($form, &$form_state) { 
    // dpm($form_state); // Debug code to view the contents of $form_state. 
    $body = $form_state['values']['body'] . ' new string to append'; 
    // Place code to save this data to your database here. 
} 
+0

@jwhat - Par " Placez le code pour enregistrer ces données dans votre base de données ici. " - Voulez-vous dire un insert/mise à jour? J'ai toujours juste manipulé les variables $ form_state. Si c'est une mise à jour, je vois comment cela peut fonctionner, mais je ne sais pas comment cela fonctionnerait si c'était un nouveau nœud? – newGuy

+0

Il ne devrait pas être nécessaire d'enregistrer les données explicitement si la manipulation se produit avant que le gestionnaire de soumission standard ne soit appelé, voir ma réponse séparée pour cela. –

+0

Oui, vous ne devriez pas avoir besoin d'enregistrer les données explicitement dans ce cas. Vous pouvez juste devoir changer votre affectation à (comme Henrik a déclaré): $ form_state ['values'] ['body'] = $ form_state ['values'] ['body']. $ stringToAppend; – jwhat

1

Je suppose que vous ajoutez votre envoi personnalisée rappel aux formes #submit tableau via hook_form_alter().

Si vous ajoutez avant toute autre entrée de ce tableau (par opposition à l'ajouter), votre rappel doit être appelé avant la fonction d'envoi standard. De cette façon, tout ce que vous devez faire est de régler le contenu $form_state['values']['body'] « en place », et il sera pris (et par la suite enregistrée) sur un traitement ultérieur par la norme soumettre rappel implicite:

/** 
* Implementation of hook_form_alter() 
*/ 
function yourModule_form_alter(&$form, $form_state, $form_id) { 
    // Is this a node edit form? 
    if (isset($form['type']) && isset($form['#node']) && $form['type']['#value'] .'_node_form' == $form_id) { 
    // Yes, add custom submit handler *before* already existing ones 
    array_unshift($form['#submit'], 'appendToBody_submit_function'); 
    } 
} 

// Custom submit function to add string to body. 
function appendToBody_submit_function($form, &$form_state) { 
    $form_state['values']['body'] = $form_state['values']['body'] . $stringToAppend; 
} 
+0

Utilisé, merveilles travaillées! J'ai également accroché dans le hook_form_alter et modifié les champs 'visualisés' en mode édition (pour les champs précédemment enregistrés avec du contenu 'nouvelle chaîne' inconditionnel). (* Bravo * Henrik) –

Questions connexes