Php 如何通过编程将图像添加到drupal节点?

Php 如何通过编程将图像添加到drupal节点?,php,drupal,rss,Php,Drupal,Rss,我正在使用Drupal6.x,我正在编写一个php类,它将获取RSS提要并将其作为节点插入 我遇到的问题是RSS提要附带了图像,我不知道如何正确插入它们 有一些信息,但不起作用 我创建图像并将其保存到服务器,然后将其添加到节点对象,但保存节点对象时,它没有图像对象 这将创建图像对象: $image = array(); if($first['image'] != '' || $first['image'] != null){ $imgName = urlencode('a' . cryp

我正在使用Drupal6.x,我正在编写一个php类,它将获取RSS提要并将其作为节点插入

我遇到的问题是RSS提要附带了图像,我不知道如何正确插入它们

有一些信息,但不起作用

我创建图像并将其保存到服务器,然后将其添加到节点对象,但保存节点对象时,它没有图像对象

这将创建图像对象:

$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;
}
我使用

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

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

但当我转储节点对象时,它不再作为图像。我检查了数据库,表中确实显示了一个图像,但它没有fid。我怎样才能做到这一点?

如果你阅读了你发布的网站上的评论,你会发现:

在“文件”字段中附加文件的步骤 (即由提供的字段类型) 文件字段模块)您必须添加 字段数组中的“说明”项, 像这样:


为什么不使用Feedapi和Feedapi映射器,将RSS字段中的图像映射到您为使用的任何节点创建的图像CCK字段中

这很简单,你甚至可以用一个用户界面来完成

只需启用feedapi、feedapi节点(不确定该模块的确切名称)、feedapi映射器,然后创建一个提要

创建提要后,转到提要节点上的映射(通常也可以对提要内容类型进行映射),然后选择哪些提要项将转到哪些节点字段

此时,如果已经创建了提要项,则需要删除它们,然后刷新提要。这应该是你需要做的全部

您是否需要创建一个单独的模块,或者现有模块是否适合您


当$op='prepare'时,您是否使用hook_nodeapi将图像对象添加到节点对象?

如果您只是获取包含图像的内容,为什么不将图像的路径更改为绝对路径而不是局部路径,那么你就不必担心CCK了。

你可能还需要做另外两件事

  • “fid”=>“上载”,保存时将其更改为文件的fid。如果它不在文件表中,那么您需要修复它。我想你需要

    2.在imageNode数组下可能需要一个数组“data”,其中“title”、“description”和“alt”作为字段


  • 要生成文件信息,如果您有filefield模块,还可以使用
    字段文件加载()
    字段文件保存文件()。有关详细信息,请参见文件filefield/field_file.inc

    例如:

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

    这只是关于FileField模块,我没有使用它,这是CCK内容。您可以使用file_directory_path()来获取“files”目录,我不认为这就是代码不起作用的原因,但会使它更干净。
    $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(...
    
    $node->field_name[] = field_file_load('sites/default/files/filename.gif');