5

我使用的是 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;
  }
}

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

请帮忙。谢谢你。

4

4 回答 4

6

您的代码中有两个错误:

  1. 正如 hfidgen (+1) 已经指出的那样,您的函数签名是错误的。它必须是yourModuleName_form_alter(&$form, &$form_state, $form_id),因此在您的示例中,表单 id 上的开关将永远不会触发。
  2. 您检查了错误的表单 id。在这种情况下,您需要检查两个表单 ID,它们都与您使用的不同:
    1. user_login_block用于以块形式提供的小型登录表单(在大多数页面上常用)
    2. user_login用于显式登录页面(通常在“用户/登录”下找到)

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

于 2010-05-10T17:16:33.480 回答
5

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

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

注释掉的行 (dsm) 用于Drupal 开发模块——我也建议安装它。一旦你安装了这个并设置了你的管理员角色的权限以便你可以使用它,你会得到一个新的选项卡,它显示了页面是如何构建的以及哪些数组做什么。

跟随数组中的线索,您几乎可以在您的网站上设置任何主题。

编辑 - 哦,好的: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;
  }
}
于 2010-05-10T16:27:27.117 回答
3

对于这种微不足道的更改,您不应该编写模块。您在性能损失和浪费时间方面付出的代价对于目标目标来说简直太高了。

您可以执行将影响由 t() 函数处理的字符串的字符串替换。这就是网站的settings.php配置文件。

以下是如何将“登录”替换为“登录”...

$conf['locale_custom_strings_en'] = array(
  'Log In'      => 'Sign In',
);

这只会影响英文字符串。随意将结尾的 _en 替换为特定语言代码(_fr、_ja、_es),以对其他语言执行相同操作。

于 2011-07-15T17:40:17.150 回答
0

最好在开始任何表单更改之前执行此操作:查看表单的源代码并检查隐藏字段 form_id 的值 - 这将为您提供您需要使用的确切 form_id。

于 2010-05-12T09:58:46.653 回答