프로그래밍 방식으로 노드를 만들면서 프로그래밍 방식으로 이미지를 추가하려면 어떻게합니까?


9

프로그래밍 방식으로 노드를 추가하는 스크립트를 작성 중이며 이미지를 추가 / 첨부하는 올바른 방법을 모릅니다. 사실 저는 Drupal에 익숙하지 않습니다.

다음은 사용 print_r중인 기존 이미지를 찾은 동안 찾은 (샘플) 이미지 객체입니다 $node.

field_image : 배열 ([und] => 배열 ([0] => 배열 ([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 [유형 ] => 이미지 [media_title] => 배열 () [media_description] => 배열 () [field_tags] => 배열 () [field_license] => 배열 ([und] => 배열 ([0] => 배열 ([ value] => nothing))) [metatags] => Array () [rdf_mapping] => Array ())))

다음으로 찾은 것은 다음과 같습니다.

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

그런 식으로 해당 노드에 이미지를 어떻게 추가해야합니까?

답변:


4

에 이미지 필드가 있다고 가정 해 보겠습니다 field_body_images.

먼저 load노드별로 node_load 이미지를 file테이블에 기록 하고 노드 이미지 필드에 추가하십시오.이 샘플이 달성하는 데 도움이되기를 바랍니다.

$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);

devel_generate에 이것을 보여주는 코드가 있습니다 : drupalcontrib.org/api/drupal/… Devel_generate는 물론 이미지를 포함하여 Drupal 사이트를위한 더미 컨텐츠를 생성합니다. 그것은 devel 패키지의 일부입니다 : drupal.org/project/devel
paul-m

file_usage_add($file, 'file', 'node', $n->nid);파일이 실수로 삭제되는 것을 방지하기 위해 마지막 에 추가 하는 것을 잊지 마십시오 .
Neograph734

@ Neograph734 node_save트리거 될 때 추가됩니다 .
Yusef

@ Neograph734 천만에요;). 주의 tnx
유세프

1

드루팔 8

Drupal 8의 경우 다음과 같이 진행됩니다. 먼저 파일을 추가하고 파일 ID를 얻습니다. 그런 다음 노드를 작성하고 주어진 파일 ID를 첨부하십시오.

$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();

0

정확히 필요한 것은 아니지만 예제 2에서 제안한 것처럼 필드의 이미지에 대한 참조를 추가하지 않는 이유는 무엇입니까? 그런 다음 컨텐츠 템플릿 파일에서 해당 필드를 이미지로 렌더링합니다.

노드 생성 스트림에서 :

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

컨텐츠 유형에서 :

<?php
global $base_url;
$image_source_link=$base_url . $node->field_image['und'][0]['value'];
?>
<img src="<?php print($image_source_link); ?>" />
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.