2010-12-14 2 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 изменить на ССК я все еще в тупик, потому что я в основном делаю именно то, что они предлагают.

я, наконец, решил попробовать другой подход, и следующие изменения работали для меня:

<?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 это плохая идея. Хотя элементы формы могут отображаться на странице, они не будут обрабатываться как часть формы.

Вы должны иметь возможность добиться того, чего хотите, с прямым изменением формы и высоким весом модуля для своего настраиваемого модуля.

Смежные вопросы