2010-06-04 80 views
1

我试图编写一个同步功能,将一些数据保存到节点,这很好,直到我尝试保存与该节点相关联的缩略图图像。Drupal:以编程方式保存图像场图像

我已经设法下载该文件并将其放入我的网站/ default/files文件夹中,但是告诉Drupal“将该文件放在CCK imagefield中”的最佳方式是什么?

编辑 为了澄清一点。我分开同步的缩略图(因为一个图像可以通过几个节点使用)......我想最初的缩略图同步将文件保存在正确的文件夹(不是temp one),只是指向这个文件的imagefield ...这是什么让我恼火与field_file_save_file(),它保存了一个新的文件,而不是只是一个指针.. 任何建议?

回答

1

均田这解决了我自己,我想。我分别使用field_file_save_file()我的缩略图,然后在同步节点时使用field_file_load()。

似乎工作正常。 :)

-4

您将需要在数据库中徘徊。 不幸的是,根据字段的使用情况,您的数据库可以以多种方式布局。所以解释有点困难。 CCK将围绕表移动,重命名内容,并且(如果)认为这是必要的,则将数据库规范化。数据可能在任何地方:)并且取决于它现在的生活地点,解决这个问题变得更容易或更难。

说,你的节点类型是FOO和缩略图场酒吧。你可以在表中content_foo酒吧,但你也可以有一个表content_field_bar

这个表里面,ImageField的商店外键的文件表。您或者需要在文件表中找到该条目(如果存在),或者输入新的记录。这并不容易。然后将该文件条目的关键字添加到content_foo表,列栏或content_field_bar中。

但是,在开始之前:它真的不值得痛苦:只需删除节点并复制粘贴新内容。

+3

Noooooo!不要在数据库中徘徊! – Rimian 2010-06-04 10:31:59

+0

当然。但是如果你的数据库被破坏了,你需要在其中戳出arount来重新修复它。并且Aces数据库似乎破裂了。 – berkes 2010-06-10 21:57:59

+0

非常不好的建议...切勿直接触摸数据库。 – Disco 2010-07-07 11:55:31

5

您可以使用field_file_save_file();将文件从临时目录移动到您的设定并创建要保存为CCK字段的对象。

参见:http://api.lullabot.com/field_file_save_file

然后你可以使用像这样的返回值保存领域:

$node->field_image[0] = field_file_save_file($my_file_path, array(), $my_destination);

你可能需要运行一些测试。因此,您需要清理目标目录并重新执行。

5

此代码将做到这一点:

$imagefile = '/temp/somefile.jpg'; 
// Load up the CCK field 
$field = content_fields('field_image', 'mycontenttype'); 
// Load up the appropriate validators 
$validators = array_merge(filefield_widget_upload_validators($field), imagefield_widget_upload_validators($field)); 
// Where do we store the files? 
$files_path = filefield_widget_file_path($field); 
// Create the file object, replace existing file with new file as source and dest are the same 
$file = field_file_save_file($imagefile, $validators, $files_path, FILE_EXISTS_REPLACE); 


$node = node_load($mynode); 
$node->field_image[] = $file; 
$node = node_submit($node); 
node_save($node); 
+0

酷!我有类似的布局,但没有node_submit()..什么是差异? – Ace 2010-06-04 12:29:42

+1

node_submit创建预告片,如果未设置,则添加用户并设置节点的创建日期和更新日期。 – Tom 2010-06-04 21:39:39

+0

http://api.drupal.org/api/function/node_submit/6 – Tom 2010-06-04 21:46:57