hook_form_alter无法正常工作

joe*_*e_h 5 php drupal drupal-6 drupal-modules

我正在使用drupal 6.16.以下hook_form_alter代码无效.我只是想在用户登录表单的提交按钮上将"登录"更改为"登录"

<?php
//$Id$

function helloworld_form_alter($form_id,&$form) {
  switch ($form_id) {

      case 'user_login_form':

    // Change 'Log in' to 'Sign in'.
    $form['submit']['#value'] = t('Sign in');


      break;
  }
}
Run Code Online (Sandbox Code Playgroud)

有任何解决这个问题的方法吗 ?

请帮忙.谢谢.

Hen*_*pel 6

您的代码中有两个错误:

  1. 您的函数签名是错误的,正如hfidgen(+1)已经指出的那样.它必须是yourModuleName_form_alter(&$form, &$form_state, $form_id),因此在您的示例中,表单ID上的开关将永远不会触发.
  2. 您检查错误的表单ID.在这种情况下,您需要检查两个表单ID,两者都与您使用的表单不​​同:
    1. user_login_block 对于可用作块的小登录表单(通常在大多数页面上使用)
    2. user_login 用于显式登录页面(通常位于'user/login'下)

两种形式的结构大多相同,因此您通常可以在同一hook_form_alter实现中更改两者- 只需添加另一个case语句来检查第二个版本.


MrF*_*dge 5

我发现使用主题函数更改表单更容易 - 在主题的template.php中创建:

function YOURTHEMENAMEHERE_user_login_form($form) {
    $form['submit']['#value'] = t('Sign in');
    //dsm($form);
    return drupal_render($form);
}
Run Code Online (Sandbox Code Playgroud)

注释掉的行(dsm)用于Drupal devel模块 - 我也建议安装它.一旦安装了此权限并设置了管理员角色的权限以便您可以使用它,您将获得一个新选项卡,该选项卡可以准确显示页面的构造方式以及哪些数组执行哪些操作.

按照阵列中的跟踪进行操作,您可以在网站上进行任何主题.

编辑 - 哦确定:P我注意到的一件事,就是之前没有使用过这个钩子,API中的例子在函数中有3个变量,但是你有2个!不匹配意味着您可能正在输入错误的变量:

function modulename_form_alter(&$form, $form_state, $form_id) {
  switch ($form_id) {
    case 'contact_mail_page':
    $form['submit']['#value'] = t('Sign in');
    break;
  }
}
Run Code Online (Sandbox Code Playgroud)