繁体   English   中英

hook_form_alter无法正常工作

[英]hook_form_alter not working

我正在使用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;
  }
}

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

请帮忙。 谢谢。

您的代码中有两个错误

  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语句来检查第二个版本。

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

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

注释掉的行(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;
  }
}

对于这种微不足道的改变,你不应该写一个模块。 您在性能损失和浪费时间方面所付出的代价对于目标目标而言只是很高。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM