2010-12-14 73 views
0

J'essaie d'ajouter une case à cocher 'Affichage' à plusieurs champs textuels cck. Le code ci-dessous ajoute le champ, mais lorsque je soumets le formulaire, je ne vois pas les valeurs dans le tableau $ form_state lorsque je valide le formulaire.Modification par programmation du champ de texte CCK

Que pourrais-je faire de mal?

<?php 

/** 
* Implementation of hook_form_FORM_ID_alter(). 
*/ 
function leghist_form_paleghist_node_form_alter(&$form, &$form_state) { 

    //Add function to manipulate cck node form 
    $form['#after_build'][] = 'leghist_cck_after_build'; 
} 


/** 
* Implementation of hook after_build(); 
*/ 
function leghist_cck_after_build ($form, &$form_state) { 

    //Add display option to titles 
    foreach (element_children($form['field_lg_pop_names']) as $key) { 

    $form['field_lg_pop_names'][$key]['display'] = array(
     '#type' => 'checkbox', 
     '#title' => t('Display'), 
     '#process' => array('leghist_display_process') 
    ); 

    } 

    return $form; 
} 

/** 
* Implementation of hook element_process 
*/ 
function leghist_display_process($element) { 
    dsm('yuk'); 
} 

?> 

Répondre

0

Même après avoir lu hook_form_alter() and CCK fields sur les pièges à regarder-out lors de l'utilisation hook_form alter sur CCK j'étais encore perplexe, parce que je fais essentiellement exactement ce qu'ils offrent.

J'ai finalement décidé d'essayer une autre approche, et les changements suivants ont fonctionné pour moi:

<?php 

//Changed from hook_form_FORM_ID_alter to hook_form_alter 
/** 
* Implementation of hook_form_FORM_ID_alter(). 
*/ 
function leghist_form_alter(&$form, &$form_state, $form_id) { 

    if ($form_id == 'paleghist_node_form') { 
    //Add function to manipulate cck node form 
    leghist_cck_alter($form); 

    } 

} 


/** 
* Adds Element to $form 
*/ 
function leghist_cck_alter (&$form) { 

    //Add display option to titles 
    foreach (element_children($form['field_lg_pop_names']) as $key) { 

    $form['field_lg_pop_names'][$key]['display'] = array(
     '#type' => 'checkbox', 
     '#title' => t('Display'), 
     '#process' => array('leghist_display_process') 
    ); 

    } 

} 

/** 
* Implementation of hook element_process 
*/ 
function leghist_display_process ($element) { 

    return $element; 
} 
0

la forme comme Modifier que dans une fonction #after_build est une mauvaise idée. Alors que les éléments de formulaire peuvent apparaître sur la page, ils ne seront pas traités dans le formulaire.

Vous devriez pouvoir réaliser ce que vous voulez avec un changement de forme droit et un poids de module élevé pour votre module personnalisé.