2010-12-14 31 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_alter() and CCK fields觀看出使用hook_form改變對CCK我仍然難倒,因爲我基本上是做什麼,它們的價格時。

我終於決定嘗試另一種方法,與以下更改爲我工作:

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

改變這樣的形式在#after_build功能是一個壞主意。雖然表單元素可能出現在頁面上,但它們不會作爲表單的一部分進行處理。

你應該能夠實現你想要的直接形式改變和高模塊重量爲您的自定義模塊。

相關問題