Drupal Quick Tip #1 - Setting CCK Option Selects to Blank as Default and Required

Posted by brenda

This took me a little bit of poking around to figure out, so here's a quick tip in case others are attempting to do the same thing.

For some CCK select options, you want it to both be required and to also not default on the first answer because a user might click through without changing the default without meaning to. There is the Default value options you can play with, but the easiest way I've found is in your Allowed values list you can simply enter this as your first choice:

|-Please Choose-

This will give you the -Please Choose- as a default, but if the user doesn't switch it, an error will come up. The reason for this is it's expecting you to have your answer in a format such as 1|Option 1, with the "machine" or "key" name first, followed by a pipe, and then the name of the option a user will see. If you don't give it a machine name it simply isn't valid.

Here's an example of an Allowed values list you might have.

|- Choose City-
la|Los Angeles
sd|San Diego
sf|San Francisco
sb|Santa Barbara

Please note that for normal options you don't have to have the key value at all. This isn't the best way to do this, as it now gives you a value without a key which can be troublesome later.

Alternatively, you could use hook_nodeapi. For example, let's say you add in your CCK field

choose|-Choose-

Now, in a custom module, in this case called "siteconfig", you could add:

<?php
function siteconfig_nodeapi(&$node, $op, $teaser = NULL, $page = NULL) {
  if (
$node->type == 'custom_content_type') {
    switch (
$op) {
      case
'validate':
        if (
$node->field_city[0]['value'] == 'choose') {
         
form_set_error('field_city', 'Invalid choice, please choose a city.');
        }
      break;
    }
  }
}
?>

Tags:

Comments

Helpful as ever, Brenda. Looks like a sane enough solution to me. Great stuff, thanks!

Nik

NikLP | Feb 13th, 2008 at 7:21 am

Does this tip apply also to the date type cck ??

wuf31 | Feb 12th, 2008 at 8:38 pm

Ooh, that is a handy one, and something I was just pondering an easy way to do yesterday. Thanks!

stephthegeek | Feb 12th, 2008 at 6:49 pm

Nice! Thanks for the tip.

Jody | Feb 12th, 2008 at 8:44 am

I stumbled on this myself after the client requested "choose one" versus the default blank.

Thanks for documenting it.

John H | Feb 29th, 2008 at 2:23 pm