在drupal 7中重新处理附加图像

时间:2011-02-01 20:44:19

标签: drupal drupal-7

我正在尝试将节点从我的论坛导入到drupal 7.不是批量,而是一个接一个,以便可以创建新闻帖并将其引用回论坛。踢球者是我想要带来图像附件......

到目前为止,使用此处的代码示例http://drupal.org/node/889058#comment-3709802事情大部分都有效:节点已创建,但图像未经过任何验证或处理。

我希望根据内容类型中定义的规则验证附加的图像。特别是与我的图像字段相关联的样式,它将它们的大小调整为600x600。

因此,我决定使用hook_node_prepare 修改一个“新”节点,并使用现有表单创建新内容(基于传入的url),而不是简单地使用我自己的表单以编程方式创建节点。参数)。这非常有效,并且创建了一个预先填充了所有数据的创建表单。包括图像!非常可爱。

我预计我可以点击预览保存,所有验证和调整大小都会发生在我的图片上,但我得到错误:

"The file used in the Image field may not be referenced."

原因是我的文件在file_usage表中没有条目.. * le叹*

那么,当我手动选择要上传的文件时,如何进行所有良好的验证和处理?比如调整大小,是file_usage表中的一个条目。

ajax上传功能可以实现,但我找不到在api中任何地方调用的代码。

Drupal调用哪些文件上传/验证功能,我没有做什么?

任何人对Drupal 7的文件/图像api都有经验,可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

获取使用条目(实际上,将文件签出到特定模块,以便在使用时不会被删除)查找Drupal函数'file_usage_add()'

为了验证传入的图像,我从user.module得到了这个例子(如果你对PHP感到满意,你可以随时查看核心,看看'Drupal方式'是如何完成的):

function user_validate_picture(&$form, &$form_state) {
  // If required, validate the uploaded picture.
  $validators = array(
    'file_validate_is_image' => array(),
    'file_validate_image_resolution' => array(variable_get('user_picture_dimensions', '85x85')),
    'file_validate_size' => array(variable_get('user_picture_file_size', '30') * 1024),
  );

  // Save the file as a temporary file.
  $file = file_save_upload('picture_upload', $validators);
  if ($file === FALSE) {
    form_set_error('picture_upload', t("Failed to upload the picture image; the %directory directory doesn't exist or is not writable.", array('%directory' => variable_get('user_picture_path', 'pictures'))));
  }
  elseif ($file !== NULL) {
    $form_state['values']['picture_upload'] = $file;
  }
}

该函数被添加到$ form ['#validity']数组中,如下所示:

$ form ['#validate'] [] ='user_validate_picture'