2010-12-14 12 views
0

複数のcckテキストフィールドに '表示'チェックボックスを追加しようとしています。以下のコードはフィールドを追加しますが、フォームを送信すると、フォームの検証時に$ form_state配列の値が表示されません。プログラムでCCKテキストフィールドを変更する

私は間違っていますか?私は基本的に彼らが提供しています正確に何やっているので

<?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'); 
} 

?> 

答えて

0

はでも使用しているときhook_formがCCKに変えるためにアウトを見て落とし穴にhook_form_alter() and CCK fieldsを読んだ後、私は、まだ困惑しました。

私は最終的に異なるアプローチをとることに決めた、と次の変更が私の仕事:#after_build機能でそのようなフォームを変更

<?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

は悪い考えです。フォーム要素はページに表示されることがありますが、フォームの一部として処理されることはありません。

あなたは、あなたのカスタムモジュールのためにストレートフォームを変更し、モジュールの重量を増やすことで、あなたが望むものを達成できるはずです。