2011-02-26 65 views

回答

50

下面是使用示例代码,你可以用node_save

$filepath = drupal_realpath('misc/druplicon.png'); 
    // Create managed File object and associate with Image field. 
    $file = (object) array(
    'uid' => 1, 
    'uri' => $filepath, 
    'filemime' => file_get_mimetype($filepath), 
    'status' => 1, 
); 

    // We save the file to the root of the files directory. 
    $file = file_copy($file, 'public://'); 

    $node->field_image[LANGUAGE_NONE][0] = (array)$file; 
` 
+4

+1。无论出于何种原因,我还必须在$ file数组中添加''display'=> 1',否则我得到一个约束冲突,即field_doc_file_display为NULL。这是为了文件而不是图像,这可能是不同的。 – feedbackloop 2012-02-02 19:55:31

+0

有一种方法可以将Alt或Title添加到图像中使用此方法? – Shyghar 2013-08-07 08:50:10

+2

+1对于LANGUAGE_NONE – saadlulu 2013-09-26 11:08:26

0

是的,当你保存它时,使它成为$ node对象的一部分。使用node_save()保存它。

30

一种更简单的方式来使用:

$filename = 'image.txt'; 
$image = file_get_contents('http://www.ibiblio.org/wm/paint/auth/gogh/gogh.white-house.jpg'); 
$file = file_save_data($image, 'public://' . $filename, FILE_EXISTS_RENAME); 
$node->field_image = array(LANGUAGE_NONE => array('0' => (array)$file)); 
3

下面是我绊倒了一会儿一个额外的位:这将附加图像到节点,如果你添加图像,那么你没事。但是,如果你是更新图像,你所关心的一个网页上显示的话,则()之前调用node_save需要一个额外的步骤:

image_path_flush($node->field_image['und'][0]['uri']); 

这将重新生成所有的这种形象的风格。

6

这是对我工作:

$file_temp = file_get_contents('public://someimage.jpg'); 

// Saves a file to the specified destination and creates a database entry. 
$file_temp = file_save_data($file_temp, 'public://' . 'someimage.jpg', FILE_EXISTS_RENAME); 

$node->field_page_image = array(
    'und' => array(
    0 => array(
     'fid' => $file_temp->fid, 
     'filename' => $file_temp->filename, 
     'filemime' => $file_temp->filemime, 
     'uid' => 1, 
     'uri' => $file_temp->uri, 
     'status' => 1, 
     'display' => 1 
    ) 
) 
); 
+0

Drupal社区文档为此提供了稍微不同的方式。 https://www.drupal.org/node/2301425。它说'file_usage_add($ file,'file','node',$ node-> nid);'这样做也必须完成。 – rineez 2015-04-25 07:27:41

+1

您可能还想手动取消临时文件的链接(如果不再需要)。否则随着时间的推移,它将积累成为存储空间的巨大浪费。 – rineez 2015-04-25 07:40:23

+0

这种情况下没有临时文件。该图像仅被下载到内存,然后存储在目标目标中。 – Brian 2017-11-02 16:44:55

2

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

我试图与一个多语种的网站。它相当失败......但可怕。 我不得不指定有问题的语言。简单地说,这个工作不是:

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

没有它,附加的文件是在“视图”屏幕查看,但不能在“编辑”屏幕。

0

这个工作对我来说:

define('DRUPAL_ROOT', $_SERVER['DOCUMENT_ROOT']); 
require_once DRUPAL_ROOT . '/includes/bootstrap.inc'; 
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); 

$node = node_load(99); 
$filename = 'image.txt'; 
chdir(DRUPAL_ROOT); 
$image = file_get_contents('http://www.ibiblio.org/wm/paint/auth/gogh/gogh.white-house.jpg'); 
$file = file_save_data($image, 'public://' . $filename, FILE_EXISTS_RENAME); 
$node->field_imagen_producto = array(LANGUAGE_NONE => array('0' => (array)$file)); 
node_save($node); 
0

只是要在这里贴上我的解决方案,以及,我需要建立一个新的节点,并上传图片编程。

$filepath = variable_get('file_public_path') . '/xmas_banner.jpg'; 
$file_temp = file_get_contents($filepath); 
$file_temp = file_save_data($file_temp, file_default_scheme() . '://' .'xmas_banner_nl.jpg', FILE_EXISTS_RENAME); 

$node = new stdClass(); 
$node->type = 'carousel'; // custom content type 
$node->title = 'XMAS NL'; 
$node->field_banner_image[LANGUAGE_NONE][0] = (array) $file_temp; 
$node->uid = 1; 
$node->status = 0; 
$node->active = 0; 
$node->promote = 0; 
node_save($node); 
相关问题