函数位于模块uc_file.module中:
<?php
hook_file_action($op, $args)
?>
描述:
uc_file模块带了一个文件管理器(位于Drupal后台界面Administer » Store administration » Products » View file downloads),它提供了一些基本的功能:删除多个文件和目录,上传单个文件(那些想一次上传多个文件的话,可以直接使用FTP来上传到文件下载目录,而文件管理器能够自动识别该目录下的文件)。使用这个钩子函数,开发者可以为文件管理器添加更多的功能。
参数:
· $op -该钩子正在采用的操作,可用的操作如下所示。
· $args -这个参数,会根据op的不同而变化,可能的参数如下所示。
'info'
在uc_file模块构建可用的文件动作列表以前调用这个操作。这个操作用来定义新的动作,这些动作将被放到文件动作下拉选择框中。
$args –无
返回值: 关联数组,里面包含了可能进行的动作。其中键为动作的唯一标识。而值则显示在文件动作下拉框的列表中。
'insert'
当uc_file在文件下载目录发现一个新文件以后,调用该操作。
$args['file_object'] - 最新发现的文件的对象
返回值:无
'form'
当定义的文件动作被选中,并提交到表单时,将会调用这个函数,以显示接下来的表单。由于不管哪个模块定义的文件动作被选中时,都会调用这个函数,所以可以使用$args['action']来定义一个新的表单,或者将其追加到一个已有的表单中。
$args['action'] -正在处理的文件动作, 文件动作定义在hook_file_action($op = 'info')
$args['file_ids'] - n当前动作所处理的所选文件的ids(定义在uc_files表中)
返回值:这个操作将返回一个数组,里面包含了使用drupal表单API定义的Drupal表单元素。
'upload'
当一个文件,通过文件管理器内建的文件上传功能,被上传以后,并被移进文件下载目录,在这个文件被放到uc_files表以前,这个操作op可以对文件进行一些其它的剩余操作。
$args['file_object'] -移进文件下载目录中的文件的对象
$args['form_id'] - 函数的form_id变量
$args['form_values'] -函数的form_values变量
返回值:无
'upload_validate'
通过文件管理器内建的文件上传功能,上传文件以后,为了验证上传的文件,就会调用该操作。此时,文件已经被上传到了PHP的临时目录中。通过本步验证的文件,将被放到文件下载目录中。
$args['file_object'] - 已经上传到PHP的临时上传目录中的文件的文件对象。
$args['form_id'] -函数的form_id变量
$args['form_values'] -函数的form_values变量
返回值:无
'validate'
当验证文件动作表单时,调用这个操作
$args['form_id'] -函数的form_id变量
$args['form_values'] -函数的form_values变量
返回值:无
'submit'
为了提交文件动作表单,就会调用这个操作
$args['form_id'] -函数的form_id变量
$args['form_values'] -函数的form_values变量
返回值:无
返回值:
这个钩子的返回值,取决于当前进行的操作,可能的返回值,已经在前面给出了。
例如:
<?php
/* The following is an example of a hypothetical module that adds an
* image watermark for images sold through a store
*/
function uc_image_watermark_file_action($op, $args)
switch ($op) {
case 'info':
return array('uc_image_watermark_add_mark' => 'Add Watermark');
break;
case 'insert':
//automatically adds watermarks to any new files that are uploaded to the file download directory
_add_watermark($args['file_object']->filepath);
break;
case 'form':
if ($args['action'] == 'uc_image_watermark_add_mark') {
$form['watermark_text'] = array(
'#type' => 'textfield',
'#title' => t('Watermark Text'),
);
$form['submit_watermark'] = array(
'#type' => 'submit',
'#value' => t('Add Watermark'),
);
}
return $form;
break;
case 'upload':
_add_watermark($args['file_object']->filepath);
break;
case 'upload_validate':
//Given a file path, function checks if file is valid JPEG
if(!_check_image($args['file_object']->filepath)) {
form_set_error('upload',t('Uploaded file is not a valid JPEG'));
}
break;
case 'validate':
if ($args['form_values']['action'] == 'uc_image_watermark_add_mark') {
if (empty($args['form_values']['watermark_text'])) {
form_set_error('watermar_text',t('Must fill in text'));
}
}
break;
case 'submit':
if ($args['form_values']['action'] == 'uc_image_watermark_add_mark') {
foreach ($args['form_values']['file_ids'] as $file_id) {
$filename = db_result(db_query("SELECT filename FROM {uc_files} WHERE fid = %d",$file_id));
//Function adds watermark to image
_add_watermark($filename);
}
}
break;
}
?>
相关链接: Think in Drupal