【发布时间】:2011-02-26 20:32:47
【问题描述】:
是否可以通过编程方式将图像添加到节点?
【问题讨论】:
是否可以通过编程方式将图像添加到节点?
【问题讨论】:
这是一个示例代码,您可以使用它与 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;
`
【讨论】:
'display' => 1 添加到 $file 数组,否则我会违反约束,即 field_doc_file_display 为 NULL。这是用于文件而不是图像,这可能是不同的。
更简单的方法:
$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));
【讨论】:
这对我有用:
$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
)
)
);
【讨论】:
file_usage_add($file, 'file', 'node', $node->nid); 在执行此操作时也必须完成。
这里有一点让我很困惑:这会将图像附加到节点上,如果您要添加图像,那么您就可以了。但是,如果您正在更新图像,并且您关心在页面上显示它,那么在调用 node_save() 之前需要一个额外的步骤:
image_path_flush($node->field_image['und'][0]['uri']);
这将重新生成该图像的所有样式。
【讨论】:
$node->field_image[LANGUAGE_NONE][0] = (array)$file;
我在一个多语言网站上进行了尝试。它相当失败......但非常可怕。 我必须指定有问题的语言。简而言之,这是可行的:
$node->field_image['en'][0] = (array)$file;
没有它,附加文件可以在“查看”屏幕中查看,但不能在“编辑”屏幕中查看。
【讨论】:
是的,当你保存它时让它成为 $node 对象的一部分。使用 node_save() 保存它。
【讨论】:
这对我有用:
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);
【讨论】:
我也想在这里粘贴我的解决方案,我需要创建一个新节点,并以编程方式上传图像。
$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);
【讨论】: