「ギャラリー」コンテンツタイプを作成し、「写真」と「ドキュメント」という2つのフィールドを追加しました。次に、次のコードを使用して、「ドキュメント」フィールドにファイルをアップロードしました。
_$file = file_save_upload('document', array(
'file_validate_extensions' => array('txt doc'), // Validate extensions.
));
// If the file passed validation:
if ($file) {
// Move the file, into the Drupal file system
if ($file = file_move($file, 'public://')) {
$file->status = FILE_STATUS_PERMANENT;
// $file->file_display = 1;
$file = file_save($file);
} else {
$output = t('Failed to write the uploaded file the site\'s file folder.');
}
} else {
$output = t('No file was uploaded.');
}
_
次のコードを使用して、このファイルをノードに添付しています。
_$customNode->field_document[$customNode->language][0] = (array)$file;
_
node_submit()
関数を呼び出すと、次のエラーが発生します。
整合性制約違反:1048列 'field_document_display'はnullにできません
誰かが私が間違っていることを知っていますか?
フィールドデータが本当に必要なのは、fid、description、displayだけなので、通常は(array)$file
行をスローしません。だから私は通常次のことをします:
$node->field_image[LANGUAGE_NONE][] = array(
'fid' => $file->fid,
'display' => 1,
'description' => '',
);
node_save( $node );
これにより、表示が必要な場合でもエラーになりません。しかし、それは私だけです...
あなたの解決策はほぼ正しいです。ただし、場合によっては、表示と説明も設定する必要があります。
コードを機能させるには、次のようにします。
$file = file_save_upload('document', array(
'file_validate_extensions' => array('txt doc'), // Validate extensions.
));
// If the file passed validation:
if ($file) {
// Move the file, into the Drupal file system
if ($file = file_move($file, 'public://')) {
$file->status = FILE_STATUS_PERMANENT;
// $file->file_display = 1;
$file = file_save($file);
//set the extra values needed to make node_save work
$file->display = 1;
$file->description = "";
} else {
$output = t('Failed to write the uploaded file the site\'s file folder.');
}
} else {
$output = t('No file was uploaded.');
}
ここでの鍵はそれらの行だと思います
$file->display = 1;
$file->description = "";
エリック・ファン・エルディックが指摘したように。私はまったく同じ問題に苦労していて、ちょうど追加しました
$file->display = 1;
助けにはならなかったが、
$file->description = "";
私の日を作りました。
ここにもソリューションを貼り付けるだけなので、新しいノードを作成し、プログラムで画像をアップロードする必要がありました。
$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['und'][0] = (array) $file_temp;
$node->uid = 1;
$node->status = 0;
$node->active = 0;
$node->promote = 0;
node_save($node);
プログラムでノードにファイルを追加するには、使用できます
$managed = TRUE; // Whether or not to create a Drupal file record
$filename = 'public://imdb-cast-' . time() . '.jpg';
$iamge_file = system_retrieve_file($url,$filename , $managed);
if($iamge_file){
$file = file_load(db_query('SELECT MAX(fid) FROM {file_managed}')->fetchField());
$node->field_image['und'][0] = (array) $file;
}
}
プログラムで複数のファイルをDrupal 8:
foreach ($fileIds as $fid) {
$node->field_images[] = [
'target_id' => $fid,
'alt' => 'ALT TEXT',
'title' => 'TITLE TEXT'
];
}
$node->save();