2009-08-14 175 views
0

我正在使用Drupal 6.x,並且正在寫一個php類,它將獲取RSS提要並將其作爲節點插入。如何以編程方式將圖像添加到Drupal節點?

我遇到的問題是RSS提要帶有圖像,我無法弄清楚如何正確插入它們。

This page有一些信息,但它不起作用。

我創建並將圖像保存到服務器,然後將其添加到節點對象,但是當節點對象被保存時,它沒有圖像對象。

這將創建圖像對象:

$image = array(); 
if($first['image'] != '' || $first['image'] != null){ 
    $imgName = urlencode('a' . crypt($first['image'])) . ".jpg"; 
    $fullName = dirname(__FILE__) . '/../../sites/default/files/rssImg/a' . $imgName; 
    $uri = 'sites/default/files/rssImg/' . $imgName; 

    save_image($first['image'], $fullName); 

    $imageNode = array(
     "fid" => 'upload', 
     "uid" => 1, 
     "filename" => $imgName, 
     "filepath" => $uri, 
     "filemime" => "image/jpeg", 
     "status" => 1, 
     'filesize' => filesize($fullName), 
     'timestamp' => time(), 
     'view' => '<img class="imagefield imagefield-field_images" alt="' . $first['title'] . '" src="/' . $uri . '" /> ', 
    ); 
    $image = $imageNode; 
} 

,這增加了圖像的節點:

$node->field_images[] = $image; 

我節省使用

module_load_include('inc', 'node', 'node.pages'); 

// Finally, save the node 
node_save(&$node); 

的節點,但是當我轉儲節點對象,它不再作爲圖像。我已經檢查過數據庫,並且表中顯示了一個圖像,但它沒有fid。我怎樣才能做到這一點?

+0

您可以使用file_directory_path()來獲得「files」目錄下,我不認爲這就是爲什麼你的代碼不能正常工作,但將使它更清潔。 – 2009-08-17 14:33:43

回答

2

爲什麼拿不到Feedapi,與feedapi映射器一起,並從RSS領域的圖像映射到你什麼樣的節點創建圖像CCK場你'正在使用?

這很容易,你甚至可以用用戶界面來做。

只需啓用feedapi,feedapi節點(不確定該模塊的確切名稱),feedapi映射器並創建一個提要。

一旦您創建了該提要,就可以在提要節點上轉到地圖(您可以對提要內容類型進行一般操作),並選擇將哪些提要項目轉到哪些節點字段。

如果您已經創建了Feed,並且已經創建好了,那麼您需要刪除此時的Feed項目,然後刷新Feed。這應該是你需要做的一切。

您是否需要創建一個單獨的模塊,或者現有的模塊是否適合您?

當$ op ='prepare'時,您是否使用hook_nodeapi將圖像對象添加到節點對象?

0

如果你讀你在網站上張貼的評論,你會發現:

要附加文件的「文件」字段 (即由 的FileField模塊提供的字段類型)你有到 「說明」項添加到域數組, 像這樣:

$node->field_file = array(
    array(
    'fid' => 'upload', 
    'title' => basename($file_temp), 
    'filename' => basename($file_temp), 
    'filepath' => $file_temp, 
    'filesize' => filesize($file_temp), 
    'list' => 1, // always list 
    'filemime' => mimedetect_mime($file_temp), 
    'description' => basename($file_temp),// <-- add this 
    ),); 

也許這工作。您也可以嘗試開始分配這樣:

$node->field_file = array(0 => array(... 
+0

這隻屬於我不使用的FileField模塊,這是CCK內容。 – Malfist 2009-08-14 15:40:02

+0

FileField是一個CCK擴展 – 2009-08-17 10:24:16

0

如果您只是抓取有圖像的內容,爲什麼不只是在節點的主體中將圖像路徑改爲絕對路徑而不是本地路徑,那麼您根本就不必擔心CCK。其他

+0

圖像的使用方式,它不會那樣工作。 – Malfist 2009-08-17 13:33:04

0

兩個,你可能需要做

  1. 「FID」 =>「上傳」的事情,當你保存這個更改文件的FID。如果它不在文件表中,那麼這是您需要修復的問題。我認爲你將需要feild_file_save_file()

    2.您可能需要在您的imageNode數組下面有「title」,「description」和「alt」字段的數組「數據」。

0

要構建的文件信息,如果你的FileField模塊,您還可以使用field_file_load()field_file_save_file()。有關詳細信息,請參閱文件filefield/field_file.inc

例子:

$node->field_name[] = field_file_load('sites/default/files/filename.gif'); 
相關問題