6

好的,这是我的钩子表单更改功能。它导致网站上的所有注册表单都被覆盖,这是我不想要的,因为我只想在这个页面上。

 
function special_registration_form_alter(&$form, $form_state, $form_id) {
  if ($form_id == 'user_register') {
    drupal_set_title(t('Custom registration'));
    $form['firstname'] = array('#type' => 'textfield', 
                               '#title' => t('First Name: *'), 
                               '#required' => TRUE, 
                               '#size' => 45, 
                               '#weight' => - 100,);
    $form['lastname'] = array('#type' => 'textfield', 
                              '#title' => t('Last Name: *'), 
                              '#required' => TRUE, 
                              '#size' => 45, 
                              '#weight' => - 99,);
  }
我只在此页面上捕获并存储在不同表中的名字和姓氏。

在其他页面上,我只想要好的老式形式。我还需要改变体重吗?我知道我缺少一些基本的东西。

4

5 回答 5

2

您只需要使用arg或 $_GET['q'] 检查当前页面。

例如:

function special_registration_form_alter(&$form, $form_state, $form_id) {
if ($_GET['q'] !== 'whatever/path' ) { return false; }
..rest of code..
}
于 2010-06-14T09:47:23.270 回答
2

如果您想将表单更改限制在特定页面,您可以简单地将页面检查添加到表单 ID 检查中,例如:

function special_registration_form_alter(&$form, $form_state, $form_id) {
  // Alter the registration form, but only on 'user/register' pages
  if ($form_id == 'user_register' && 'user' == arg(0) && 'register' == arg(1)) {
    // snipped alteration code
  }
}
于 2010-06-14T09:52:39.980 回答
0

如果您真的不需要创建用户帐户,例如简单的事件注册。相反,如果您只收集名称,则可以改用 webform 模块。

于 2010-07-15T19:09:27.600 回答
0

您也可以在核心模块列表中使用 Profile 模块。无需任何编程即可解决此问题,仅供参考。

于 2010-06-14T01:31:50.070 回答
0

实施hook_user();该功能允许在用户在网站上注册时更改呈现给用户的表单。 hook_user()由 user.module 使用,它独立于配置文件模块。

将钩子定义为hook_user($op, &$edit, &$account, $category = NULL),该参数$op将包含'register'向用户呈现注册表单时的值。在这种情况下,模块会返回要添加到注册表单的表单字段。

于 2010-06-15T19:27:20.603 回答