2010-06-04 97 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

相關問題