作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
提供一个完整的ajax控件,用来上传文件并将其保存到{file_managed}表中。它包含一组表单元素,有两个'#submit',一个用来上传,一个用于删除;一个'#file' 元素;多个'#hidden'、'#markup'元素,用于处理进度条和显示已上传的文件。
注意:新上传的文件,如果默认状态为0,那么它们会当作临时文件,每隔6个小时被清空一次。如果你的模块用到这个元素了,那么你需要自己负责修改$file对象的状态,将其改为FILE_STATUS_PERMANENT,并保存到数据库中。下面是参考代码:
//通过file.fid加载文件。
$file = file_load($form_state['values']['my_file_field']);
//将状态修改为持久化。
$file->status = FILE_STATUS_PERMANENT;
//保存。
file_save($file);
如果点击了删除按钮,将会把该字段的值设置为0,你的模块还需要使用file_delete()将文件从files表和文件系统中实际的删除。
它包含多个非标准的表单元素属性:#progress_indicator,可选值有'none'、'bar'、'throbber',默认为'throbber';#progress_message,文件正被上传时的进度信息,默认为NULL;#upload_validators,一组回调函数,用来验证上传的文件;#upload_location ,上传文件应被存储的位置,例如'public://files/my_files'。
示例代码,来自(image.field.inc):
$form['default_image'] = array(
'#title' => t('Default image'),
'#type' => 'managed_file',
'#description' => t('If no image is uploaded, this image will be shown on display.'),
'#default_value' => $field['settings']['default_image'],
'#upload_location' => 'public://default_images/',
);
常用属性: #access、 #after_build、 #array_parents、 #attached、 #attributes、 #description、 #disabled、 #element_validate、 #parents、 #post_render、 #prefix、 #pre_render、 #process、 #states、 #suffix、 #theme、 #theme_wrappers、 #title、 #tree、 #weight。