如何在一个页面上覆盖表单?

时间:2010-06-14 01:22:48

标签: php drupal drupal-6 drupal-fapi

好的,这是我的钩形式alter function。它导致现场的所有注册表格被覆盖,我不想要,因为我只想在这个页面上。

 
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,);
  }
我只在这个页面上捕获并存储在另一个表中的名字和姓氏。

在其他页面上,我只想要一个好的老式表格。我还需要改变体重吗?我知道我错过了一些基本的东西。

5 个答案:

答案 0 :(得分:2)

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

例如:

function special_registration_form_alter(&$form, $form_state, $form_id) {
if ($_GET['q'] !== 'whatever/path' ) { return false; }
..rest of code..
}

答案 1 :(得分: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
  }
}

答案 2 :(得分:0)

您也可以在Core列表模块中使用Profile模块。它将在没有任何编程的情况下解决这个问题,fyi。

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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