Como adiciono programaticamente uma imagem ao criar nós programaticamente?

9

Estou escrevendo um script para adicionar nós programaticamente e não sei a maneira correta de adicionar / anexar imagem. Na verdade, eu não estou tão familiarizado com Drupal.

Aqui são a imagem (amostra) objetos que encontrei enquanto print_ring o existente $nodeque estou usando:

field_image: Matriz ([und] => Matriz ([0] => Matriz ([fxid] => 3089 [alt] => [title] => [width] => 95 [height] => 126 [uid] = > 249 [filename] => helloworld.jpg [uri] => public: //helloworld.jpg [filemime] => image / jpeg [filesize] => 3694 [status] => 1 [timestamp] => 1346748001 [tipo ] => imagem [media_title] => Matriz () [media_description] => Matriz () [field_tags] => Matriz () [field_license] => Matriz ([und] => Matriz ([0] => Matriz ([ valor] => nada))) [metatags] => Matriz () [rdf_mapping] => Matriz ())))

O próximo que eu encontrei é o seguinte.

field_temp_image: Matriz ([und] => Matriz ([0] => Matriz ([valor] => http://www.example.com/sample-path/helloworld.jpg [format] => [safe_value] => http://www.example.com/sample-path/helloworld.jpg))) `

Como devo adicionar uma imagem a esse nó dessa maneira?

夏 期 劇場
fonte

Respostas:

4

Vamos supor que seus campos de imagem sejam inseridos em field_body_images,

primeiro loadseu nó, node_load registre sua imagem nas filetabelas e adicione-a ao campo de imagem do nó. Espero que este exemplo ajude você a obter:

$n=  node_load($nid);
$file = new stdClass();      
$file->filename =$file_name;
$file->filemime =file_get_mimetype($localimagepath.$file_name);
$file->filesize = @filesize(file_create_path($localimagepath.$file_name));
$file->uid = $user->uid;
$file->status = 1;
$file->timestamp = time();
$file->list=1;
$file->data=array('alt'=>'','title'=>$n->title);
drupal_write_record('files', $file);
$record->fid=$file->fid;
$n->field_body_images[]=(array)$file;
node_save($n);
Yusef
fonte
Há algum código para demonstrar isso em devel_generate: drupalcontrib.org/api/drupal/… O Devel_generate naturalmente gera conteúdo fictício para sites Drupal, incluindo imagens. Faz parte do pacote Devel: drupal.org/project/devel
paul-m
Não se esqueça de adicionar file_usage_add($file, 'file', 'node', $n->nid);no final para impedir que o arquivo seja excluído acidentalmente.
Neograph734
@ Neograph734 será adicionado quando for node_saveacionado.
Yusef
@ Neograph734 de nada;). tnx pela atenção
Yusef
1

Drupal 8

Para o Drupal 8, seria como seguir. Primeiro adicione o arquivo e obtenha uma identificação de arquivo. Em seguida, crie o nó e anexe o ID do arquivo fornecido.

$data = file_get_contents(__DIR__ . '/images/my_image.jpeg');
$file = file_save_data($data, 'public://my_image.jpeg');

$node = \Drupal\node\Entity\Node::create([
  'type'             => 'page',
  'title'            => 'Foobar',
  'field_my_image' => [
    'target_id' => $file->id(),
    'alt'       => 'Lorem ipsum',
    'title'     => 'Dolor sit amet',
  ],
]);

$node->save();
leymannx
fonte
0

Pode não ser exatamente o que você precisa, mas por que não adicionar uma referência a uma imagem em um campo, como sugere o exemplo 2? E então, no arquivo de modelo de conteúdo, processe esse campo como uma imagem.

No fluxo de criação do nó:

$node->field_image['und'][0]['value'] = "/path_to_image/image.jpg";

No tipo de conteúdo:

<?php
global $base_url;
$image_source_link=$base_url . $node->field_image['und'][0]['value'];
?>
<img src="<?php print($image_source_link); ?>" />
NenadP
fonte