如何允许用户在注册时选择他们的语言? -- 7 领域 和 i18n-l10n 领域 drupal 相关 的问题

How can I allow the user to choose their language upon registration?


1
vote

问题

中文

有一个解决方案用于在此处在Drupal 6中显示用户/寄存器表单上的站点语言选择字段: https://stackoverflow.com/问题/ 5556895 / how-to-and-language-switcher-in-mess-register-form-in-drupal-6

但是,我个人无法将此转换为Drupal 7.是否有另一种方法来执行此操作?

编辑:通过区域设置启用多种语言时,具有用户语言列表的"语言设置" 显示为/ admin / people / create。这就是我想要的 - 除了我希望这可以显示在/用户/寄存器上,在那里它不是(至少通过启用语言环境)所示。

英文原文

There is a solution for showing the site language selection field on the user/register form in Drupal 6 here: https://stackoverflow.com/questions/5556895/how-to-add-language-switcher-in-user-register-form-in-drupal-6

However, I'm personally not able to convert this to Drupal 7. Is there another way to do this?

EDIT: When multiple languages are enabled via locale, the "Language Settings" with the list of user languages is shown on /admin/people/create. This is what I want-- except I want this to be shown on /user/register, where it is not (at least by enabling locale alone) shown by itself.

     
 
 

回答列表

2
 
vote
vote
最佳答案
 

作为drupal 7没有显示创建自己帐户的用户的语言选择器,您需要实现 hook_form_user_register_form_alter() (请参阅 hook_form_form_id_alter())使用以下代码。

  function mymodule_form_user_register_form_alter(&$form, &$form_state) {   // Only alter user forms if there is more than one language.   if (!isset($form['locale']) && drupal_multilingual()) {     locale_language_selector_form($form, $form_state, $form['#user']);   }    if (isset($form['locale']) {      $form['locale']['#access'] = TRUE;   } }   

代码是通用的,即使在模块删除了语言选择器字段的情况下,也适用(尽管模块永远不应该做的东西)。

"user_register_form" 是用于"用户/寄存器" 路径的表单构建器。如果启用了语言环境模块,则代码有效。如果已启用多种语言,则代码将显示语言选择器;不同, drupal_multilingual() 将返回 FALSE

    $items['user/register'] = array(     'title' => 'Create new account',      'page callback' => 'drupal_get_form',      'page arguments' => array('user_register_form'),      'access callback' => 'user_register_access',      'type' => MENU_LOCAL_TASK,   );   

从区域设置模块使用的代码是下面的代码。

  function locale_form_alter(&$form, &$form_state, $form_id) {   // Only alter user forms if there is more than one language.   if (drupal_multilingual()) {     // Display language selector when either creating a user on the admin     // interface or editing a user account.     if ($form_id == 'user_register_form' || ($form_id == 'user_profile_form' && $form['#user_category'] == 'account')) {       locale_language_selector_form($form, $form_state, $form['#user']);     }   } }   

Â

一般来说,Drupal 7中的 hook_user('register') 的等价物是 hook_form_user_register_form_alter() ;相当于 hook_user('form') hook_form_user_profile_form_alter()

 

As Drupal 7 doesn't show the language selector for the users who create their own account, you need to implement hook_form_user_register_form_alter() (see the documentation for hook_form_FORM_ID_alter()) using the following code.

function mymodule_form_user_register_form_alter(&$form, &$form_state) {   // Only alter user forms if there is more than one language.   if (!isset($form['locale']) && drupal_multilingual()) {     locale_language_selector_form($form, $form_state, $form['#user']);   }    if (isset($form['locale']) {      $form['locale']['#access'] = TRUE;   } } 

The code is generic, and works even in the case a module removed the language selector field (which is something a module should never do, though).

"user_register_form" is the form builder used for the "user/register" path. The code works if the Locale module is enabled. The code will show the language selector if there are more than one language enabled; differently, drupal_multilingual() would return FALSE.

  $items['user/register'] = array(     'title' => 'Create new account',      'page callback' => 'drupal_get_form',      'page arguments' => array('user_register_form'),      'access callback' => 'user_register_access',      'type' => MENU_LOCAL_TASK,   ); 

The code used from the Locale module is the following one.

function locale_form_alter(&$form, &$form_state, $form_id) {   // Only alter user forms if there is more than one language.   if (drupal_multilingual()) {     // Display language selector when either creating a user on the admin     // interface or editing a user account.     if ($form_id == 'user_register_form' || ($form_id == 'user_profile_form' && $form['#user_category'] == 'account')) {       locale_language_selector_form($form, $form_state, $form['#user']);     }   } } 

xc2xa0

In general, the equivalent for hook_user('register') in Drupal 7 is hook_form_user_register_form_alter(); the equivalent of hook_user('form') is hook_form_user_profile_form_alter().

 
 
   
   
0
 
vote

是的,您可以使用 profile2 。

以用户注册表单中的任何类型的字段添加任何类型的字段。

首先下载所需的模块并启用配置文件2模块。然后转到"admin / struct" ,您将找到一个选项,如"配置文件类型" .click,然后您将获得类似内容类型管理字段的表单你可以创建selectbox选项。

如果您需要此选择框应在用户注册页面上遵循以下步骤

  1. 转到"管理/结构/配置文件/管理/主要"
  2. 在那里你会得到一个复选框,检查它以在注册表中可见字段
 

Yes you can add any kind of field in user registration form using Profile2.

First download the required module and enable the profile 2 module.Then go to "admin/structure" There you will find a option like "Profile types".Click on that, then you will get a form like content type manage field.There you can create selectbox option.

If you need this selectbox should come on the user registration page follow the below steps

  1. Go to "admin/structure/profiles/manage/main"
  2. There you will get a Checkbox, check it to visible the field in registration form
 
 
 
 

相关问题

0  将模板应用于特定页面  ( Apply template to a specific page ) 
我需要将模板应用于特定页面,而不是遵循相同的URL模式的页面。 例如,我有一个带有路径/亚洲的页面。我还有路径/亚洲/印度,/亚洲/中国等的页面。我想创建一个仅适用于/亚洲的模板,而不是其他路径。我创建了模板文件页面 - Asia.tpl.php,但它也适用于/亚洲/印度和/亚洲/中国。有没有办法将模板专门映射到此...

5  如何防止用户点总计低于给定用户的阈值?  ( How to prevent user point totals from going below a threshold for a given user ) 
我想为个人用户点设置一个绝对的地板(使用用户点模块)。具体而言,为了使得不可能在1以下的用户点数。 在Drupal 6中,userpoints_contrib中有 userpoints_no_negative 模块,但是删除了规则集成7.x( https://drupal.org/project/userpoints...

1  将“免费标记”术语与正常分类术语分开?  ( Separate free tagging terms from normal taxonomy terms ) 
如何将"免费标记" 术语分开普通分类术语?默认情况下,尽管在一个列表中,仍可输出所有词汇的所有条款,这根本都不擅长。在输出上,我们想要获得这样的东西: vocabulary:tag 。 ...

0  拥有150多个用户字段太重了吗?  ( Is having 150 user fields too heavy ) 
我们的用户实体为公共配置文件有大约5个字段,以及5个字段,设置设置的设置为我们的实现需要60个其他字段(我想到了制作60个"计算字段" )。最后一个可以覆盖用户,所以我们需要另外60秒来存储用户输入的值(不遗留默认值)和30个字段以充当指示使用默认或自定义版本(30个标志是否足够的标志因为60个字段成对,它们是30对...

0  有一条路径有两种类型的视图  ( Having two types of view for one path ) 
我需要一个分类术语的视图,它将任何子项术语显示为链接和标记为术语的产品节点表,但我只能解决如何应用一个或另一个。 任何帮助感谢! 编辑以获取清晰度:对于路径分类/术语/术语/%,我需要向子项术语或儿童术语显示与该术语相关联的所有产品(节点)的子项。我已经假设将这两个两者相结合到一个视图中,以某种方式将这两个人组合在一...

5  允许CSS在节点中定样过滤了HTML视图?  ( Allow css styling in node filtered html view ) 
我正在通过我的第一个主要的Drupal 7实施。我的用户需要创建嵌套的HTML有序列表,其中包含罗马,数字和alpha格式的各种样式,如 http://www.w3.org/tr/html401/struct/lists.html#type-values 。当前项目正在进行内容类型"书籍页面" 的节点上。 本安装正在...

1  自定义主题未显示在块部分中  ( Custom theme doesnt show up in blocks section ) 
我看过关于这个问题的不同线程,没有看到任何答案。我有一个新的Drupal 7安装,没有启用额外的模块。我已经开始构建自定义主题,但它也没有在块部分中列出自己,即使它已启用。它显示了原始的Bartik主题和管理员七个主题。奇怪的部分是我在我的.info页面中列出的标题下添加了一个新块,它在我的主题上显示,但我无法编辑块...

0  使用模板为使用hook_menu制作的自定义管理页面  ( Using a template for a custom admin page made with hook menu ) 
我在Drupal 7中开发了一个模块。 现在,我想在Drupal的管理面板中添加自定义主题页。 我已使用 admin_menu() : function newsletter_menu() { $info = array(); $info['admin/reports/newsletter'] ...

0  WebServices创建(注册)新用户  ( Webservices to create register a new user ) 
我计划编写连接到Drupal 7的客户端应用程序。我喜欢通过应用程序创建新用户,遇到一些文献,但我不确定该方法是否安全,也是它是否认为所有可能的使用 - 案例。 我遇到的第一个链接是这样的: https://www.drupal.org/node/1514312 我能够配置端点并成功发布+创建用户。但是,上述方...

8  如何将CSS类添加到渲染阵列?  ( How to add a css class to an render array ) 
在模板文件中,之前 print render($content['field_image']); 我想向 998887661 渲染阵列中的图像添加CSS类。我怎样才能做到这一点? 这是渲染阵列: Array ( [#theme] => field [#weight] => 2 [#title] => Image ...

1  如何以定制金额(100或200或其他)以编程方式将产品类型捐赠添加到购物车中?  ( How to add product type donation into cart programmatically with custom amount1 ) 
我正在使用Commerce_Donate模块,我想在以某些其他页面上选择的用户,以编程方式向购物车添加产品(类型=捐赠)。在一些自定义表单上提交,我想将此捐赠类型产品添加到购物车中以处理通常的商务订单/结账。 如何实现这一目标? 谢谢。 ...

8  使用自定义视图进行分类术语页面  ( Using a custom view for a taxonomy term page ) 
使用Drupal 7和视图7.x-3.0-beta3,有一个分类页面使用自定义视图的最佳方法是什么? 例如,在路径自动中,我有规则,指向URL别名国家/英格兰朝向分类/术语/ 44。 当用户访问国家/英格兰时,我想显示使用视图创建的页面,而不是默认分类页面。 我正在使用分类菜单填充菜单,在Drupal 7中尚未支持自...

2  模块如何检查Drupal是否显示其中一个更新页面?  ( How can a module check if drupal is showing one of the update pages ) 
模块应该如何验证Drupal是否正在更新数据库表,以避免在显示更新页面之一时输出消息(或避免在更新期间执行任何多余的任务)? 我正在参考的模块是一个自定义调试模块,在每个请求的页面上进行一些测试,并使用 drupal_set_message() 输出结果。 ...

1  在代理后面的自动完成403s  ( Autocomplete 403s when behind a proxy ) 
我有一个VirtualBox VM设置作为Drupal之间的代理服务器,以尝试复制CDN导致客户端的机器错误。 我的当前端口如下: http://site-name.dd:9999 当我转到支持代理的网站时,尝试使用给定的实体引用,我得到403错误: An AJAX HTTP error occurred. ...

2  我可以使用具有公开表单的视图字段处理程序,或具有pre_query的过滤器处理程序?  ( Can i have a views field handler with an exposed form or a filter handler with ) 
它基本上是标题,但这是问题: 我正在尝试创建一种方法来允许用户查看视图来控制哪个列可见。如果我可以在正确的地方呼叫,这不是很难。具体来说,我需要在三个地方调用: 在某种配置窗格中 暴露形式 在pre_render函数中 本地处理程序和筛选器处理程序将获得配置窗格。但只有过滤器处理程序会影响曝光的表单,只有现场...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.