我正在尝试将节点从我的论坛导入到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都有经验,可以帮助我吗?
答案 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'