Community Documentation

Code snippet: How to force uppercase in CCK fields

Last updated May 3, 2009. Created by lelizondo on May 3, 2009.
Log in to edit this page.

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();}");

Page status

No known problems

Log in to edit this page

About this page

Drupal version
Drupal 6.x
Audience
Developers and coders

Structure Guide

Drupal’s online documentation is © 2000-2012 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.