Прикрепление файлов изображений к узлам программно в Drupal 7 - PullRequest
41 голосов
/ 26 февраля 2011

Можно ли программно добавить изображение в узел?

Ответы [ 8 ]

51 голосов
/ 28 февраля 2011

Вот пример кода, который вы можете использовать с 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;
`
31 голосов
/ 22 сентября 2011

Более простой способ:

$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));
7 голосов
/ 12 ноября 2013

Вот что у меня сработало:

$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
    )
  )
);
3 голосов
/ 04 января 2013

Вот еще один бит, который меня на некоторое время смутил: он прикрепит изображение к узлу, и если вы добавляете изображение, то все в порядке.Однако, если вы обновляете изображение и хотите, чтобы оно отображалось на странице, перед вызовом node_save () необходимо выполнить еще один дополнительный шаг:

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

.все стили этого изображения.

2 голосов
/ 24 апреля 2014

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

Я пробовал это на многоязычном сайте. Это провалилось довольно ... но ужасно. Я должен был указать язык, о котором идет речь. Проще говоря, это сработало вместо:

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

Без него прикрепленный файл можно было просматривать на экране «Просмотр», но не на экране «Редактирование».

0 голосов
/ 23 ноября 2016

Просто вставив сюда свое решение, мне нужно было создать новый узел и загрузить изображение программным способом.

$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);
0 голосов
/ 28 июня 2016

Это работает для меня:

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 голосов
/ 27 февраля 2011

Да, сделайте его частью объекта $ node при его сохранении.Сохраните его с помощью node_save ().

...