以编程方式更改CCK文本字段

时间:2010-12-14 22:20:19

标签: drupal drupal-6 cck

我正在尝试在多个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');
}

?>

2 个答案:

答案 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函数中的形式是一个坏主意。虽然表单元素可能出现在页面上,但它们不会作为表单的一部分进行处理。

对于自定义模块,您应该可以通过直接形式更改和高模块重量来实现所需。