CCK fields en hook_form_alter()

Wie ooit geprobeerd heeft om via hook_form_alter() CCK-velden op de 'gewone' manier aan te passen, is waarschijnlijk van een koude kermis thuis gekomen. CCK fields worden namelijk  op een andere manier gegenereerd dan gewone formuliervelden. Met name de fase waarin dit gebeurt verschilt: De #process -fase van CCK fields, de fase waarin de velden worden gegenereerd, vindt plaats na het moment waarop de $form array wordt opgebouwd.

In de form API is deze fase bekend als #after_build, een array met functies die worden aangeroepen nadat de $form array is opgebouwd. Daardoor kunnen we iets doen als:

/**
* Implementation of hook_form_alter().
*/
function example_form_alter(&$form, $form_state, $form_id) {
  if ($form_id == 'example_node_form') {
    // Add an after_build function to process when everything's complete.
    $form['#after_build'][] = 'example_after_build';
  }
}

..en vervolgens:

function example_after_build($form, &$form_state) {
  // TODO: Stuff!
  return $form;
}

Zie voor details: http://drupal.org/node/726282