1

我正在尝试编写一个同步函数,将一些数据保存到节点,它工作正常,直到我尝试保存与节点关联的缩略图。

我已设法下载文件并将其放入我的站点/默认/文件文件夹中,但是告诉 Drupal“将此文件放入 CCK 图像字段”的最佳方式是什么?

编辑澄清一下..我分别同步缩略图(因为一个图像可以被多个节点使用)......我希望初始缩略图同步将文件保存在正确的文件夹中(不是临时文件夹),然后指向该文件的图像字段...这就是field_file_save_file()让我烦恼的地方,它保存了一个新文件,而不仅仅是制作一个指针。有什么建议吗?

4

4 回答 4

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);

您可能需要运行一些测试。因此,您需要删除目标目录并再次执行此操作。

于 2010-06-04T10:37:51.643 回答
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);
于 2010-06-04T10:47:26.630 回答
1

我想我自己解决了这个问题。我分别在 field_file_save_file() 我的缩略图,然后在同步节点时 field_file_load() 它们。

似乎工作正常。:)

于 2010-06-09T09:29:51.757 回答
-4

您将需要在数据库中四处寻找。不幸的是,您的数据库可以根据字段的使用以多种方式布局。所以解释有点难。如果 CCK 认为有必要,CCK 将在表中移动、重命名并(去)规范化数据库。数据可能在任何地方 :) 并且取决于它现在所在的位置,解决这个问题变得更容易或更难。

比如说,您的节点类型是foo并且缩略图字段是bar。您可以在表content_foo中有一个列,但您也可以有一个表content_field_bar

在该表中,图像字段存储文件表的外键。您要么需要在文件表中找到该条目(如果存在),要么输入一条新记录。这并不容易。然后在 content_foo 表、列栏或 content_field_bar 中添加该文件条目的键。

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

于 2010-06-04T09:29:42.960 回答