web-dev-qa-db-ja.com

モジュールを使用してノードに外部イメージを追加するにはどうすればよいですか?

ユーザー(匿名)が画像のURLと画像のタイトルを入力できるフォームをモジュールで作成しました。リンクは、リモートストリームラッパーと同様に、実際の画像として表示する必要があります。つまり、画像は外部ソースから使用する必要があり、ローカルサーバーにダウンロードしないでください。

$node = new stdClass(); // Create a new node object
$node->type = "article"; // Or page, or whatever content type you like
node_object_prepare($node);

$node->title    = filter_xss($_GET['title']);
$node->language = en; // Or e.g. 'en' if locale is enabled

$file_path = $_GET['link'];

$file = (object) array(
        'uid' => 1,
        'uri' => $file_path,
        'filemime' => file_get_mimetype($file_path),
        'status' => 1,
);

$node->field_image[$node->language][0] = (array)$file;

$node->uid = 1; // UID of the author of the node; or use $node->name

node_save($node);

私はこのコードを持っていて、画像のURLを保存しません。 「リンク」および「タイトル」プロパティをAJAX経由で送信しています。

3
hakala

ファイルフィールドの参照は、file_managedテーブルのfid列で行われます-ファイルオブジェクトを保存していないため、fidがなく、フィールドデータを関連付けるものはありません。

ファイルオブジェクトを準備した後、ノードオブジェクトのフィールドに追加する前に、file_saveへの呼び出しを追加するだけです。

file_save($file);
1
Clive