Drupal Ubercart 开发文档 hook_file_action

函数位于模块uc_file.module中:

<?php
  hook_file_action($op, $args)
?>

 

描述:

uc_file模块带了一个文件管理器(位于Drupal后台界面Administer » Store administration » Products » View file downloads),它提供了一些基本的功能:删除多个文件和目录,上传单个文件(那些想一次上传多个文件的话,可以直接使用FTP来上传到文件下载目录,而文件管理器能够自动识别该目录下的文件)。使用这个钩子函数,开发者可以为文件管理器添加更多的功能。

参数:

·                                 $op -该钩子正在采用的操作,可用的操作如下所示。

·                                 $args -这个参数,会根据op的不同而变化,可能的参数如下所示。

$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

 

 

论坛:

Drupal版本: