【问题标题】:Calling script on image upload in Drupal在 Drupal 中调用图像上传脚本
【发布时间】:2010-08-25 12:56:18
【问题描述】:

当用户将图像上传到我的 Drupal 内容类型时,我想调用 Ruby 脚本。我有一个 CCK 图像字段作为主图像,ImageCache 负责为我调整大小和创建缩略图。

我有一个 Ruby 脚本,可以对图像进行一些转换,但是我不知道如何调用它(真的没有使用 Ruby 的经验)。基本上,该脚本会应用一些图像变换,然后生成一个新图像。

我的问题是如何从 Drupal 调用这个脚本...关于 CCK 图像上传是否存在某种我会劫持的钩子?

【问题讨论】:

  • @rogerdpack: 好点......这可能是我调用 ruby​​ 脚本本身所需要做的一切......但我真的不确定在我的 drupal 实现中把这个调用放在哪里:)
  • 我已编辑您的标题以澄清您的问题。这个问题更多的是关于如何从 Drupal 调用脚本(任何类型),而不是关于 Ruby 的问题。
  • @Brian Campbell:谢谢...这是一个很好的观点

标签: ruby drupal-6 imagemagick


【解决方案1】:

ImageField 使用与 FileField 相同的 API。因此,您可以为您的上传字段添加一个自定义验证器,该验证器将对图像进行一些检查(例如调用 ruby​​ 脚本)。

我前段时间在 Drupal.org 上描述过,请参阅:http://drupal.org/node/546146

但是,为了您的方便,这里是代码。

首先,为上传表单定义一个验证器:

function example_form_alter(&$form, $form_state, $form_id) {
  if ($form_id != 'ID_OF_YOUR_FORM')
    return;

  $form['FIELDNAME'][0]['#upload_validators']['example_FUNCTIONNAME'] = array();

  return $form;
}

二、实现验证器功能:

function example_FUNCTIONNAME($field) {
  // variable for error messages
  $errors = array();

  // do some processing on the field
  $filepath = $field->filepath;

  ...

  // in case of error, add error message
  $errors[] = t('Validation failed, because...');

  return $errors;
}

将此代码放在自定义模块中,但请确保在 FileField 和 ImageField 之后调用您的模块(调整系统表中的权重)。

更新:还有另一种方法可以挂钩。您可以使用 hook_nodeapi 对操作“presave”做出反应。这也允许您在上传字段的内容上调用脚本。

【讨论】:

  • @Sebi:你能扩展一下这个presave吗?
  • 检查 hook_nodeapi api.drupal.org/api/function/hook_nodeapi/6 我假设包含 cck 图像字段的节点已保存(基本上是创建新节点或更新现有节点)。在这里, hook_nodeapi 被调用,您可以对上传的图像做任何您想做的事情,例如将其转发到外部脚本。图像已存储在上传文件夹中,并且还添加到系统表中。在节点保存期间会多次调用 hook_nodeapi,但您可能对“presave”最感兴趣,因为这是在表单验证之后但在节点最终保存之前。
  • @Sebi:好的,我喜欢这种方法的声音。很抱歉很痛苦......但我将如何实施 hook_nodeapi 进行上传?我是否在主题的 template.php 文件中添加对 hook_nodeapi 的调用?
  • 不,我会在自定义模块中进行。这不是真正的主题,而是更多关于处理某些东西。
  • @Sebi:好的,谢谢...我想我会在一个单独的问题中询问更多细节
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-10
  • 2013-09-12
  • 1970-01-01
  • 2020-06-23
  • 1970-01-01
  • 2012-05-15
  • 2012-08-07
相关资源
最近更新 更多