2009-08-14 23 views
0

Ich verwende Drupal 6.x und ich schreibe eine PHP-Klasse, die einen RSS-Feed greifen und als Knoten einfügen wird.Wie kann ich programmatisch Bilder zu einem Drupal-Knoten hinzufügen?

Das Problem, das ich habe, ist, dass der RSS-Feed mit Bildern kommt, und ich kann nicht herausfinden, wie man sie richtig einfügt.

This page hat einige Informationen, aber es funktioniert nicht.

Ich erstelle und speichere das Bild auf dem Server, und dann füge ich es dem Knotenobjekt hinzu, aber wenn das Knotenobjekt gespeichert wird, hat es kein Bildobjekt.

Dies erzeugt das Bildobjekt:

$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; 
} 

und dies fügt das Bild in den Knoten:

$node->field_images[] = $image; 

ich spare den Knoten

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

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

verwenden, aber wenn ich Dump die Knotenobjekt, es nicht mehr als das Bild. Ich habe die Datenbank überprüft und ein Bild erscheint in der Tabelle, aber es hat keine FID. Wie kann ich das machen?

+0

Sie können file_directory_path() verwenden, um die ‚Dateien‘ Verzeichnis zu bekommen, ich glaube nicht, das ist, warum Ihr Code nicht funktioniert, aber wird es sauberer machen. –

Antwort

2

Warum die Feedapi nicht bekommen, zusammen mit feedapi Mapper, und ordnen Sie das Bild aus dem RSS-Feld in ein Bild CCK Feld, das Sie für wie auch immer geartete Knoten erstellen Sie Benutzt du?

Es ist sehr einfach, und Sie können es sogar mit einer Benutzerschnittstelle tun.

Aktivieren Sie einfach feedapi, feedapi Knoten (nicht sicher auf den genauen Namen des Moduls), feedapi Mapper, und erstellen Sie einen Feed.

Sobald Sie den Feed erstellt haben, gehen Sie auf dem Feed-Knoten zur Karte (was Sie auch für den Feed-Inhaltstyp tun können) und wählen Sie aus, welche Feed-Elemente zu welchen Knotenfeldern gehören.

Sie möchten Ihre Feedelemente an dieser Stelle löschen, wenn sie bereits erstellt wurden, und dann den Feed aktualisieren. Das sollte alles sein, was Sie tun müssen.

Müssen Sie ein separates Modul erstellen, oder würde ein bestehendes Modul für Sie arbeiten?

Verwenden Sie hook_nodeapi, um das Bildobjekt zum Knotenobjekt hinzuzufügen, wenn $ op = 'prepare'?

0

Wenn Sie die Kommentare auf der Website lesen Sie auf dem Laufenden, werden Sie feststellen:

Um eine Datei in einem Feld „Datei“ anhängen (dh das Typenfeld geliefert von Filefield-Modul) Sie haben hinzufügen, um eine „Beschreibung“ Element in die Feldanordnung, wie folgt aus:

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

vielleicht das funktioniert. Sie könnten auch versuchen, die Zuordnung, so zu beginnen:

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

Das betraf nur das FileField-Modul, das ich nicht verwende, das ist CCK-Inhalt. – Malfist

+0

FileField ist eine CCK Erweiterung –

0

Wenn Sie nur Inhalte mit Bildern aufnehmen, warum nicht einfach im Körper Ihrer Knoten den Pfad der Bilder zu absolut statt lokal ändern, dann müssen Sie sich überhaupt keine Sorgen um CCK machen.

+0

die Art, wie die Bilder verwendet werden, wird es nicht so funktionieren. – Malfist

0

Zwei weitere Dinge, die Sie benötigen

  1. „fid“ => ‚upload‘, ändern Sie dies auf die fid der Datei zu tun, wenn Sie es speichern. Wenn es nicht in der Dateitabelle ist, dann müssen Sie das beheben. Ich denke, Sie brauchen feild_file_save_file()

    2. Sie benötigen möglicherweise ein Array "Daten" unter Ihrem ImageNode Array mit "Titel", "Beschreibung" und "Alt" als Felder.

0

Datei-Informationen zu erstellen, wenn Sie Modul Filefield haben, können Sie auch field_file_load() oder field_file_save_file() verwenden. Details finden Sie in der Datei filefield/field_file.inc.

Beispiel:

$node->field_name[] = field_file_load('sites/default/files/filename.gif'); 
Verwandte Themen