【问题标题】:How to attach an image to a node while creating it with node_save($node);如何在使用 node_save($node) 创建图像时将图像附加到节点;
【发布时间】:2010-08-25 19:26:48
【问题描述】:

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

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

我知道 drupal 7 仍处于 alpha 6 但它很好。 node_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);
}

【问题讨论】:

  • 当您以编程方式创建节点时,请务必填写 $node->name,因为对于所有有权管理节点的用户,node_submit() 会将您的 $node-&gt;uid 更改为 0(匿名) ,包括您的管理员用户。
  • 感谢您的提示...但是我如何将带有此节点的图片附加为图像
  • 在drupal 7中,这不像你不必填充$node->name。

标签: php drupal drupal-6 drupal-7


【解决方案1】:

嗨。在阅读了 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);

这就是上传文件和drupal 7数据库的方式

【讨论】:

    【解决方案2】:

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

    我还没有在任何地方看到完全回答,所以这里有一些代码适用于 Windows 8 上的 Drupal 7.27 :)

    此节点的“分类”内容类型有 3 个字段:title、body 和 field_advert_image(它只是一个 Image 字段类型)。

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

    您可能已经猜到了,此代码从命令行 PHP 脚本运行。

    希望对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多