我正在尝试编写一个同步函数,将一些数据保存到节点,这样可以正常工作,直到我尝试保存与节点关联的缩略图图像。
我已经设法下载文件并将其放入我的sites / default / files文件夹中,但是告诉Drupal的最佳方法是什么,“将此文件放在CCK图像字段中”?
修改 为了澄清一点..我单独同步缩略图(因为一个图像可以由几个节点使用)...我想初始缩略图同步将文件保存在正确的文件夹(不是临时文件夹)中,只需指向imagefield到这个文件...这就是使用field_file_save_file()来惹恼我的东西,它保存了一个新文件,而不仅仅是制作一个指针。 有什么建议吗?
答案 0 :(得分:5)
您可以使用field_file_save_file();
将文件从临时目录移动到desitnation,并创建要保存为CCK字段的对象。
请参阅:http://api.lullabot.com/field_file_save_file
然后您可以使用返回的值保存字段,如下所示:
$node->field_image[0] = field_file_save_file($my_file_path, array(), $my_destination);
您可能需要运行一些测试。因此,您需要删除目标目录并再次执行此操作。
答案 1 :(得分: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);
答案 2 :(得分:1)
有点我自己解决了这个问题。我分别使用field_file_save_file()我的缩略图,然后在同步节点时使用field_file_load()它们。
似乎工作正常。 :)
答案 3 :(得分:-4)
您需要在数据库中查找。 不幸的是,根据字段的使用,您的数据库可以通过多种方式进行布局。所以解释有点困难。如果认为需要,CCK将移动表,重命名内容和(de)规范化数据库。数据可能在任何地方:)并且根据它现在的位置,解决这个问题变得更容易或更困难。
说,您的节点类型为 foo ,缩略图字段为 bar 。您可以在表格 content_foo 中添加栏列,但您也可以拥有表 content_field_bar
在该表中,imagefield将外键存储到文件表中。您需要在文件表中找到该条目(如果存在),或者输入新记录。这并不容易。然后在content_foo表,列栏或content_field_bar中添加该文件条目的键。
但是,在开始之前:真的不值得痛苦:只需删除节点并将内容复制粘贴到新节点中。