Support for Drupal 7 is ending on 5 January 2025—it’s time to migrate to Drupal 10! Learn about the many benefits of Drupal 10 and find migration tools in our resource center.
Following How to set the disabled attribute of a CCK field I came up with this code to force the use of uppercase with CCK fields.
The code it's almost the same as from How to set the disabled attribute of a CCK field, I'm just changing the attribute to load some javascript. Also, change 'myalter' to your module name.
I'm altering two text fields, 'field_firstname' and 'field_lastname', you can add more fields if you like. Don't forget that if you're using fields inside a group (fieldset) you have to define the fieldset first. See the code.
<?php
/**
* @file
* Form Alter to Transform fields values to Uppercase
*/
function myalter_form_alter(&$form, $form_state, $form_id) {
if (isset($form['type']) && isset($form['#node'])) {
// Use this check to match node edit form for a particular content type.
if ('miembro_node_form' == $form_id) {
$form['#after_build'][] = '_myalter_after_build';
}
// Use this check to match node edit form for any content type.
// if ($form['type']['#value'] .'_node_form' == $form_id) {
// $form['#after_build'][] = '_mysnippet_after_build';
// }
}
}
/**
* Custom after_build callback handler.
*/
function _myalter_after_build($form, &$form_state) {
// Use this one if the field is placed on top of the form.
_myalter_fix_disabled($form['field_firstname']);
_myalter_fix_disabled($form['field_lastname']);
// Use this one if the field is placed inside a fieldgroup.
// _mysnippet_fix_disabled($form['group_mygroup']['field_myfield']);
return $form;
}
/**
* Recursively set the disabled attribute of a CCK field
* and all its dependent FAPI elements.
*/
function _myalter_fix_disabled(&$elements) {
foreach (element_children($elements) as $key) {
if (isset($elements[$key]) && $elements[$key]) {
// Recurse through all children elements.
_myalter_fix_disabled($elements[$key]);
}
}
if (!isset($elements['#attributes'])) {
$elements['#attributes'] = array('onblur' => "{this.value = this.value.toUpperCase();}");
}
$elements['#attributes'] = array('onblur' => "{this.value = this.value.toUpperCase();}");
}
?>
Thanks to markus_petrux for the code.
Comments
to keep the array good and to
to keep the array good and to capitalize only the first letter use this:
$elements['#attributes']['onblur'] = "{this.value = this.value.charAt(0).toUpperCase() + this.value.slice(1);}";
instead of:
if (!isset($elements['#attributes'])) {
$elements['#attributes'] = array('onblur' => "{this.value = this.value.toUpperCase();}");
}
$elements['#attributes'] = array('onblur' => "{this.value = this.value.toUpperCase();}");