Well, I figured out the answer to my
question by looking in the code for the _form_validate() function in
form.inc. For those interested in the resolution, I hadn't unset the
$form['nice_menus_number']['#options'] setting in the form, so it was
still using the items in the select list as validation parameters.
Once I added this line
unset($form[$form['nice_menus_number']['#options'])
to my form alter function, it worked just as I wanted.
Steve
-------- Original Message --------
I'm using the Nice Menus module, and
I would like to be able to have more than the 10 menus allowed by the
module. This limit is set by a hardcoded select list on the admin
settings page for the module. I want to modify the form by changing
the select list to a text field so that an arbitrary number of menus
can be selected. To do this, I'm using hook_form_alter() to modify the
nice_menus_number field in the nice_menus_admin_settings form. First
here is the form code in the module
/**
* Settings form as implemented by hook_menu
*/
function nice_menus_admin_settings() {
$form['nice_menus_number'] = array(
'#type' => 'select',
'#title' => t('Number of Nice Menus'),
'#description' => t('The total number of independent nice menus
(blocks) you want.'),
'#default_value' => variable_get('nice_menus_number', '2'),
'#options' => drupal_map_assoc(array(0, 1, 2, 3, 4, 5, 6, 7, 8,
9, 10)),
);
return system_settings_form($form);
}
and here is my form alter function:
function cwl_form_alter($form_id, &$form) {
switch ($form_id) {
case 'nice_menus_admin_settings':
$form['nice_menus_number']['#type'] = 'textfield';
$form['nice_menus_number']['#size'] = 2;
break;
}
}
This works in that it changes the
field type to a text field, and the value attribute is the value in the
nice_menus_number variable. This works fine as long as I select a
value of 10 or less. However, if I select a value higher than 10, I
get an error that says "
An illegal choice has been detected. Please contact
the site administrator."
But, if I change my function to also use a select list, like this:
function cwl_form_alter($form_id, &$form) {
switch ($form_id) {
case 'nice_menus_admin_settings':
$form['nice_menus_number']['#options'] =
drupal_map_assoc(array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
14, 15));
break;
}
}
it works fine, and I can select a value higher than
10. Since it's using the default system_settings_form() function,
there isn't a maximum value set somewhere. Plus, the default value is
being set correctly when the form is initially displayed. Can anybody
explain why a select list works, but a text field doesn't?
Thanks.
Steve