Drupal 6 如何使用Drupal6中的hook\u form\u form\u ID\u alter()对自定义表单上的“type'=>“select”字段运行自定义验证
作为一名新手,使用hook_form_form_ID_alter更改站点范围的表单和字段是一项巨大的成就,但现在我开始遇到一些问题,涉及到我添加的一些自定义字段的验证。以下是我的custom_form.module文件中的代码 在这一点上,我最感兴趣的是如何在美国各州下拉字段中显示-选择-但不让用户选择它作为选择。此时,他们可以将-Select-留在必填字段中,Drupal允许表单提交。通过电子邮件发送的该特定字段的数据=0。我想强制用户实际选择一个状态 我已经尝试了以下所有方法 我已经尝试了多个代码试用这些错误的变体,但没有任何东西像广告中所说的那样有效 非常感谢您提出的澄清问题或建议。记住在你的解释中要具体和简单,请定义术语-目前对我来说,大多数php就像阅读莎士比亚。Drupal 6 如何使用Drupal6中的hook\u form\u form\u ID\u alter()对自定义表单上的“type'=>“select”字段运行自定义验证,drupal-6,validation,hook-form-alter,Drupal 6,Validation,Hook Form Alter,作为一名新手,使用hook_form_form_ID_alter更改站点范围的表单和字段是一项巨大的成就,但现在我开始遇到一些问题,涉及到我添加的一些自定义字段的验证。以下是我的custom_form.module文件中的代码 在这一点上,我最感兴趣的是如何在美国各州下拉字段中显示-选择-但不让用户选择它作为选择。此时,他们可以将-Select-留在必填字段中,Drupal允许表单提交。通过电子邮件发送的该特定字段的数据=0。我想强制用户实际选择一个状态 我已经尝试了以下所有方法 我已经尝试了多
非常感谢 我在这个问题上睡着了,然后重试了我以前尝试过的一个链接 我能够使它工作到我满意的程度:我在内部使用了它 函数请求\u目录\u表单\u本地\u联系\u页面\u更改&$form,$form\u设置$order值后的状态
// reorder the elements in the form to include the elements being inserted
$order = array('parts_catalog', 'sprayer_catalog', 'name', 'address', 'city', 'state', 'country', 'zip', 'phone', 'mail', 'copy', 'submit');
foreach($order as $key => $field) {
$form[$field]['#weight'] = $key;
}
$form['#validate'][] = 'request_catalog_local_contact_page_validate';
function request_catalog_local_contact_page_validate(&$form, &$form_state) {
if ($form_state['values']['state'] == '0') {
form_set_error('state', t('Please Select a State'));
};
if ($form_state['values']['parts_catalog'] == '0' and $form_state['values']['sprayer_catalog'] =='0') {
form_set_error('parts_catalog' and 'sprayer_catalog', t('Please Select a Catalog'));
};
}
// The custom email message sent using the data gathered in the form
function request_catalog_mail_alter(&$message) {
if ($message['id'] == 'contact_page_mail') {
$message['body'][1] = $message['params']['name'].' '.'has requested the following catalogs:';
$message['body'][2] = 'Parts Catalog: ' . $message['params']['parts_catalog']. ' ' . 'Sprayer Parts Catalog: ' .$message['params']['sprayer_catalog'];
$message['body'][4] = 'Send to: ' . $message['params']['address'].', '. $message['params']['city'].', ' . $message['params']['state'].' ' . $message['params']['zip']. ' ' . $message['params']['country'];
}
}
}
适合我现在需要的东西。还有另一种方法可以避免这种情况 只需将NULL值作为ket分配给第一个选项 例: 这就行了
// reorder the elements in the form to include the elements being inserted
$order = array('parts_catalog', 'sprayer_catalog', 'name', 'address', 'city', 'state', 'country', 'zip', 'phone', 'mail', 'copy', 'submit');
foreach($order as $key => $field) {
$form[$field]['#weight'] = $key;
}
$form['#validate'][] = 'request_catalog_local_contact_page_validate';
function request_catalog_local_contact_page_validate(&$form, &$form_state) {
if ($form_state['values']['state'] == '0') {
form_set_error('state', t('Please Select a State'));
};
if ($form_state['values']['parts_catalog'] == '0' and $form_state['values']['sprayer_catalog'] =='0') {
form_set_error('parts_catalog' and 'sprayer_catalog', t('Please Select a Catalog'));
};
}
// The custom email message sent using the data gathered in the form
function request_catalog_mail_alter(&$message) {
if ($message['id'] == 'contact_page_mail') {
$message['body'][1] = $message['params']['name'].' '.'has requested the following catalogs:';
$message['body'][2] = 'Parts Catalog: ' . $message['params']['parts_catalog']. ' ' . 'Sprayer Parts Catalog: ' .$message['params']['sprayer_catalog'];
$message['body'][4] = 'Send to: ' . $message['params']['address'].', '. $message['params']['city'].', ' . $message['params']['state'].' ' . $message['params']['zip']. ' ' . $message['params']['country'];
}
}
}
function states_list() {
return array(
'' =>'- Select -',
'AL' => 'Alabama',
//rest of states....,
);
}