Php 如何在使用node_save($node)创建图像时将图像附加到节点;

Php 如何在使用node_save($node)创建图像时将图像附加到节点;,php,drupal,drupal-6,drupal-7,Php,Drupal,Drupal 6,Drupal 7,您好,我正在使用drupal 7,并尝试通过使用php解析xml来导入数据,然后使用node\u save($node)创建节点 到目前为止,我已经成功地从xml创建了没有任何图像的节点。我想在导入图像时将其附加到节点 我知道Drupal7仍然在alpha 6中,但它很好node\u save($node)函数与drupal 6中的几乎相同,但略有不同 好的,这是我的代码图像文件路径存储在一个变量中…任何帮助都会很好…提前谢谢 function main($head, $txt) { $no

您好,我正在使用drupal 7,并尝试通过使用php解析xml来导入数据,然后使用
node\u save($node)
创建节点

到目前为止,我已经成功地从xml创建了没有任何图像的节点。我想在导入图像时将其附加到节点

我知道Drupal7仍然在alpha 6中,但它很好
node\u save($node)
函数与drupal 6中的几乎相同,但略有不同

好的,这是我的代码图像文件路径存储在一个变量中…任何帮助都会很好…提前谢谢

function main($head, $txt) {
  $nodes = array();
  $nodes[0]['title'] = $head; // node name
  $nodes[0]['body'] = $txt; // body text for the node
  $nodes[0]['teaser'] = '<p>A node</p>';
  $nodes[0]['timestamp'] = 1281765101;
  $nodes[0]['format'] = 2;
  make_nodes($nodes);
}

function make_nodes($nodes) {
  $new_node = $nodes[0];
  $node = new stdClass();
  $node->type = 'article';
  $node->status = 1;
  $node->uid = 1;
  $node->title = $new_node['title'];
  $node->promote = 1;
  $node->created = $new_node['timestamp'];
  $node->timestamp = $new_node['timestamp'];
  $node->changed= $new_node['timestamp'];
  $node->sticky = 0;
  $node->language = 'en';
  $node->body['und'][0]['format'] = 3;
  $node->body['und'][0]['summary'] = $new_node['teaser'];
  $node->body['und'][0]['value'] = $new_node['body'];
  $node->revision = 0;
  node_submit($node);
  node_save($node);
}
函数主($head,$txt){
$nodes=array();
$nodes[0]['title']=$head;//节点名称
$nodes[0]['body']=$txt;//节点的正文文本
$nodes[0]['striser']='A节点

'; $nodes[0]['timestamp']=1281765101; $nodes[0]['format']=2; 生成_节点($nodes); } 函数make_节点($nodes){ $new_node=$nodes[0]; $node=新stdClass(); $node->type='article'; $node->status=1; $node->uid=1; $node->title=$new_node['title']; $node->promote=1; $node->created=$new_节点['timestamp']; $node->timestamp=$new_node['timestamp']; $node->changed=$new_节点['timestamp']; $node->sticky=0; $node->language='en'; $node->body['und'][0]['format']=3; $node->body['und'][0]['summary']=$new_node['striser']; $node->body['und'][0]['value']=$new_node['body']; $node->revision=0; 节点提交($node); 节点\保存($node); }
您好。在阅读了10个小时的文档之后,我终于做到了……我在这里包含了我的代码

$uri = 'bird/bird_image.jpg';
$files =  new stdClass();
$files->uid = (isset($local_user->uid) && !empty($local_user->uid)?$local_user->uid:1);
$files->filename = 'bird.jpg';
$files->uri = $uri; 
$files->filemime = file_get_mimetype($uri);
$files->status = 1;
$files->timestamp = $new_node['timestamp'];

file_copy($files);

Zero Cool最初提出的问题是“如何在创建节点时将图像附加到节点”

我在任何地方都没有看到完整的答案,因此下面是一些在Windows 8上的Drupal 7.27中适用于我的代码:)

此节点的“分类”内容类型有3个字段:标题、正文和字段\广告\图像(这只是图像字段类型)

$node=newstdclass();
$node->type='classified';
节点_对象_准备($node);//设置一些默认值。
$node->language=语言\u无;
$node->title=“使用图像测试节点”;
$node->body[LANGUAGE_NONE][0]['value']=strip_标记(“body text示例”);
$node->body[LANGUAGE_NONE][0]['format']='plain_text';//或者“完整的html”,如果你愿意的话
//获取pathauto以生成URL别名
$node->path['pathauto']=1;
//由用户1创建
$node->uid=1;
//映像目录必须对Drupal的本地文件系统可见,
//例如,这里是站点/默认/文件/广告
$directory\u uri='0public://adverts';
//该目录中的示例图像文件:
$my_image_file='32449.jpg';
//首先创建一个文件对象,并将其添加到Drupal的managed_files表中。。。
$file=新的stdClass();
$file->filename=$my\u image\u文件;
$file->uri=$directory\u uri.'/'.$my\u image\u file;
$file->filemime=file\u get\u mimetype($file->uri);
$file->status=文件\状态\永久;
$file->uid=1;
$file=file\u save($file);
//…然后使用新的文件对象。
$node->field\u advert\u image[语言\u NONE][0]=(数组)$file;
节点\保存($node);
//N.B.node_save()获取文件管理表中递增的计数;无需调用文件\u用法\u添加()
如果($node->nid){
echo“-已创建节点“$node->nid.”…“。打印($node,true)。“\n”;
}否则{
echo“-Drupal节点\u保存API调用失败\n”;
}
正如您可能猜到的,此代码从命令行PHP脚本运行


希望对其他人有所帮助。

当您以编程方式创建节点时,请确保填充$node->name,因为对于所有有权管理节点的用户,
node\u submit()
会将您的
$node->uid
更改为0(匿名),包括你的管理员用户。谢谢你的提示…但是我如何在drupal 7中将这个节点的图片作为图像附加在一起这不像你不需要填充$node->name。
$node = new stdClass();
$node->type = 'classified';

node_object_prepare($node); // Set some default values.

$node->language = LANGUAGE_NONE; 
$node->title = "Test node with image";

$node->body[LANGUAGE_NONE][0]['value'] = strip_tags("<b>Body text example</b>");
$node->body[LANGUAGE_NONE][0]['format'] = 'plain_text';     // or 'full_html' if you want

// Get pathauto to generate an URL alias
$node->path['pathauto'] = 1;
// Created by user 1
$node->uid = 1;

// The image directory has to be visible to Drupal on its local file-system,
// e.g. here it would be sites/default/files/adverts
$directory_uri = 'public://adverts';

// example image file in that directory:
$my_image_file = '32449.jpg';

// First create a file object, and add it to Drupal's managed_files table...
$file =  new stdClass();
$file->filename = $my_image_file;
$file->uri = $directory_uri.'/'.$my_image_file;
$file->filemime = file_get_mimetype($file->uri);
$file->status = FILE_STATUS_PERMANENT;
$file->uid = 1;
$file = file_save($file);
// ...then use the new file object.
$node->field_advert_image[LANGUAGE_NONE][0] = (array)$file;

node_save($node);       

// N.B. node_save() gets the count incremented in the file_managed table; no need to call file_usage_add()

if ($node->nid) {
    echo "- Created node ".$node->nid." ... ".print_r($node,true)."\n";
} else {
    echo "- Drupal node_save API call failed\n";
}