Drupal 自定义表单记住文本字段数据

Posted

技术标签:

【中文标题】Drupal 自定义表单记住文本字段数据【英文标题】:Drupal custom form remembering textfield data 【发布时间】:2011-12-02 02:50:34 【问题描述】:

我正在为一个新模块设置一个配置页面,但我无法让我的文本字段记住我之前输入的数据。

我通过调用 variable_get 设置#default_value,但该值永远不会在文本字段中重置。然而,它被正确地存储为变量并在变量编辑器页面上可见。

下面是代码片段:

$form   =   array();

$form['username']   =   array(
    '#type'                     =>  'textfield',
    '#title'                    =>  t('Username'),
    '#default_value'            =>  variable_get('username', '' ),
    '#description'              =>  t('supply the username'),
    '#maxlength'                =>  30,
    '#required'                 =>  TRUE,
    '#weight'                   =>  -1,
);

return system_settings_form($form);

我该如何解决这个问题?

更新代码

提交函数如下:

    function mymodule_settings_submit($form, &$form_state)
    drupal_set_message('form submit responding : ' . $form_state['values']['username'] );
    variable_set( 'username', $form_state['values']['username'] );

更新代码 #2

完整代码:

    function my_module_init()


function my_module_menu()

    $items = array();
    $items['admin/settings/helper'] =   array(
        'title'                     =>  'helper',
        'page callback'             => 'drupal_get_form',
        'page arguments'            =>  array('helper_setup'),
        'access arguments'          =>  array('access administration pages'),
        'type'                      =>  MENU_NORMAL_ITEM,

    );
    return $items;



function helper_setup()

    $node_types =   node_get_types('names');

    $form   =   array();

    $form['username']   =   array(
        '#type'                     =>  'textfield',
        '#title'                    =>  t('Username'),
        '#default_value'            =>  variable_get('username', '' ),
        '#description'              =>  t('supply the username'),
        '#maxlength'                =>  30,
        '#required'                 =>  TRUE,
        '#weight'                   =>  -1,
    );

    $form['#submit'][] =    'my_module_settings_submit';

    return system_settings_form($form);


function my_module_validate($form, &$form_state)
    die('validation area responding!');


function my_module_settings_submit($form, &$form_state)
    drupal_set_message('form submit responding : ' . $form_state['values']['username'] );
    variable_set( 'username', $form_state['values']['username'] );

【问题讨论】:

【参考方案1】:

在您的表单提交功能中,您应该插入variable_set('variableName' , 'value') 变量不会自动插入..

更新:

$form['username']   =   array(
    '#type'                     =>  'textfield',
    '#title'                    =>  t('Username'),
    '#default_value'            =>  variable_get('username', '' ),
    '#description'              =>  t('supply the username'),
    '#maxlength'                =>  30,
    '#required'                 =>  TRUE,
    '#weight'                   =>  -1,
);

$form['#submit'][] = '_myform_submit_function' ; 
return system_settings_form($form);

现在让我们构建您的提交功能

function _myform_submit_function($form,&$form_state ) 
variable_set('username', $form_state['values']['username']) ; 
drupal_set_message('form submit responding : ' . $form_state['values']['username'] );

现在清除缓存并告诉我它是否工作

【讨论】:

谢谢。我试过你的方法,但没有奏效。如果第一个参数不存在,则第二个参数应该是默认值。由于提交表单时文本字段中提供的值被保存为drupal值,因此variable_set函数的第一个参数应该包含该值并在页面刷新时填充文本字段 - 但它不起作用??? 我可以看看你的表单提交功能吗? 提交功能做的很少。我只是调用 drupal_set_message 并从 $form_state 数组中输出文本字段的值。它确认用户输入的提供的值,但问题是将该值设置回文本字段 '#default_value' => variable_get('username', '' ), .... variable_get 如何调用 variable 不存在你应该调用 variable_set('username' , $form_state['values ']['用户名']);将表单的值设置为名为 username 的变量 ...然后从 variable_get 调用此值 我在上面的代码中包含了表单提交功能。我执行了你的建议,但没有奏效......除非我错过了重点并做错了什么???

以上是关于Drupal 自定义表单记住文本字段数据的主要内容,如果未能解决你的问题,请参考以下文章

Drupal,Ubercart - 将自定义字段添加到结帐表单

如何使用 drupal 6 中的自定义字段将自定义版本的节点/添加表单放在视图中?

Drupal 6 中的自定义搜索表单:视图/面板还是自定义 sql?

如何 - 构建自定义 drupal 8 模块表单

在 drupal 中以内容类型形式显示自定义表字段值

Drupal创建自定义表单,上传文件代码