【问题标题】:How to save a custom form image to a custom user field如何将自定义表单图像保存到自定义用户字段
【发布时间】:2012-10-05 23:56:28
【问题描述】:

我有一个自定义表单,它创建一个新用户并为该用户填写多个自定义字段。其中一个字段是自定义图像(不是系统头像图像)。

我可以通过表单将图像上传到服务器,但无法将其放入相应的字段。到目前为止,这是我的(自定义模块)代码。

function newacc_freebusiness_form($form, &$form_state) { 

$form['bussimage'] = array(
  '#title' => t('Upload an image that shows off your business.'),
  '#type' => 'managed_file',
  '#description' => t('Max size of 3Mb and filetype of jpg jpeg or png'),
  '#upload_location' => 'public://bussimages/',
  '#upload_validators' => array(
    'file_validate_extensions' => array('png jpg jpeg'),
    'file_validate_size' => array(3*1024*1024),
      ),
  '#required' => TRUE,
);
 $form['submit'] = array(
    '#type' => 'submit',
    '#value' => 'Submit',
 );

 $form['#validate'][] = 'newacc_freebusiness_validate';

 return $form;
 }
 function newacc_freebusiness_validate($form, &$form_state) {
  $bussimage = $form_state['values']['bussimage'];
  $file = file_load($bussimage);
  $bussimage = image_load($file -> uri);
  image_save($bussimage);
  $bussimage = image_load($file -> uri);
  $edit = array(
    'name' => 'name',
    'mail' => 'mail@mail.com',
    'status' => 0,
    'language' => 'en',
    'init' => 'mail@mail.com',
    'roles' => array(8 => 'Promoter'),
    'field_business_image' => array(        
    'und' => array(
        0 => array(
            'value' => $bussimage,
            ),
          ),
        ),
        );
        user_save(NULL, $edit);
 }

这是抛出错误信息:

Notice: Undefined index: fid in file_field_presave() (line 219 of /var/www/drupal_site/modules/file/file.field.inc).

我现在已经尝试了很多技巧并且在谷歌上搜索了很长时间,以至于我什至无法解释我拥有什么并且没有尝试过!

请帮忙。

【问题讨论】:

  • managed_file 在提交后被保存到数据库 - 不是吗?所以你不能期望文件对象的值在验证函数中。
  • 否,托管文件在单独上传验证中的表单验证之前保存并存储在数据库中。 Image_load() 正在返回一个包含 fid 的有效图像对象。我只是无法让 user_save() 将其存储到我的字段中。
  • 这是我关于 SO 的第一个问题,有人认为有必要标记它吗?我认为这很清楚,经过研究并且很有帮助。无论如何 - 生活和学习。

标签: image forms drupal drupal-7 drupal-forms


【解决方案1】:

好的 - 解决了这个问题。线索在错误消息中,解决方案非常简单!代码如下:

function newacc_freebusiness_form($form, &$form_state) { 

    $form['bussimage'] = array(
    '#title' => t('Upload an image that shows off your business.'),
    '#type' => 'managed_file',
    '#description' => t('Max size of 3Mb and filetype of jpg jpeg or png'),
    '#upload_location' => 'public://bussimages/',
    '#upload_validators' => array(
    'file_validate_extensions' => array('png jpg jpeg'),
    'file_validate_size' => array(3*1024*1024),
    ),
    '#required' => TRUE,
    );
$form['submit'] = array(
    '#type' => 'submit',
    '#value' => 'Submit',
);

$form['#validate'][] = 'newacc_freebusiness_validate';

return $form;
}
function newacc_freebusiness_validate($form, &$form_state) {
    $bussimage = $form_state['values']['bussimage'];
    $file = file_load($bussimage);
    $edit = array(
    'name' => 'name',
    'mail' => 'mail@mail.com',
    'status' => 0,
    'language' => 'en',
    'init' => 'mail@mail.com',
    'roles' => array(8 => 'Promoter'),
    'field_business_image' => array(        
        'und' => array(
            0 => array(
            'fid' => $file -> fid,
        ),
      ),
    ),
    );
user_save(NULL, $edit);
}

Drupal 所寻找的只是数组中的文件 fid。不知道为什么我最初认为它必须比这更复杂。

【讨论】:

    猜你喜欢
    • 2023-03-22
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 2014-02-15
    • 2013-06-27
    • 1970-01-01
    相关资源
    最近更新 更多