我需要核心配置文件模块无法提供的自定义字段(从SQL查询中填充的选择列表)。我能够成功添加具有适当选项的字段;但是,我不确定如何在提交后处理这个新领域。
根据我的理解,我需要编写一个处理我的SQL插入的函数,然后从hook_form_alter提交按钮调用该函数。
截至目前,它只传递字段名称,而不是值。并且字段名称被序列化并存储在用户表的“数据”字段中。我正试图将它传递给自己的专栏。
这是我的代码......
//takes value and inserts it to account field
function accountselect_submitaccount() {
db_query( "INSERT INTO {user} (account)
VALUES {account_name}" );
}
则...
//call the above function using custom submit (I suspect this is the troubled area)
function accountselect_form_alter(&$form, $form_state, $form_id) {
if($form_id == 'user-register')
$form['#submit'][] = 'accountselect_submitaccount';
}
答案 0 :(得分:2)
如果我说得对,你试图改变用户的注册表格,这样除了插入“regualar”字段(用户名,密码等等)之外,还会要求用户填写其他字段。如果我做对了,这就是我要继续下去的方式(就像你说你是Drupal的新手一样,我试着尽我所能)。
[bread] => t('bread')
的行中定义,以便在其他语言中使用表单时,将显示选项“pain”或“bröd”或“pane”,但返回的值(可能存储在数据库中的值将始终为“bread”。hook_form_FORM_ID_alter()
,其中FORM_ID将是用户将用于注册的表单的ID。如果有多个可能的表单用于注册,请改为实现hook_form_alter()
,并在其中创建一个开关/案例结构。#element_validate
字段以指定验证回调。您必须将追加(而不是 assign )提交回调函数的名称添加到用于提交整个表单的按钮的字段#submit
$form
和$form_state
。后者包含用户选择的表单值。您的提交回调将包含drupal_write_record()
指令,以便在您的自定义表格中保存相关数据。我发现(感谢另一个响应者对这个同样的问题), Drupal确实提供了一种改变用户表格的机制。我仍然不喜欢这背后的设计原则:
然而,要阅读的信息性线索是here。最后值得一提的是,这个功能背后的潜在机制是在D6到D7之间发生变化。
HTH!
答案 1 :(得分:0)
据我所知,如果没有与字段名称匹配的列,则新字段仅添加到data
列。您应该只需在用户表中创建一个account
列,就可以填充该数据。
对于您发布的代码,您的提交功能存在许多问题:
submit_function($form, &$form_state)
可让您访问$form_state['values']
数组。INSERT
永远不会有效。您需要UPDATE
查询。{account_name}
。您需要实际使用$form_state['values']
。