我正在尝试在多个cck文本字段中添加“显示”复选框。下面的代码确实添加了字段,但是当我提交表单时,我在验证表单时看不到$ form_state数组中的值。
我可能做错了什么?
<?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 :(得分:0)
即使在阅读了hook_form_alter() and CCK fields关于在CCK上使用hook_form alter的注意事项时,我仍然感到难过,因为我基本上正在做他们提供的。
我最终决定尝试另一种方法,以下更改对我有用:
<?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;
}
答案 1 :(得分:0)
改变#after_build函数中的形式是一个坏主意。虽然表单元素可能出现在页面上,但它们不会作为表单的一部分进行处理。
对于自定义模块,您应该可以通过直接形式更改和高模块重量来实现所需。