#drupal-7
#drupal-7
Вопрос:
Я пытаюсь использовать file_scan_directory для сканирования некоторых файлов и получения некоторого локального пути, и я хочу, чтобы они стали объектом и сохранялись в БД, поэтому для этого мне нужно file_save. file_save принимает объект file в качестве параметра, и как я могу предположить, чтобы успешно выполнить эту процедуру?
Я попробовал file_save_upload, в документе API упоминается параметр «$source — Строка, указывающая путь к файлу или URI загруженного файла для сохранения.», Однако, похоже, он не читает путь и всегда возвращает null.
Я также пытаюсь создать файловый объект для запуска file_save, он работает, но не думаю, что это правильно для drupal, будет ли какое-либо решение для:
file_scan_directory-> ???? -> file_save -> field_attach_update (* обновите поле новым идентификатором после сохранения файла)
пожалуйста, помогите за это, большое вам спасибо!
Ответ №1:
Этот фрагмент будет сканировать некоторые файлы jpg, сохранять в БД и прикреплять файлы к полю.
function test_form(){
$node = node_load('61');
unset($node->field_image[$node->language]);
$files = file_scan_directory('public://testimport', '/^.*.(jpg|JPG)$/');
//dpm($files);
//http://drupal.org/node/889058
foreach($files as $fileobj){
$query = new EntityFieldQuery;
$result = $query
->entityCondition('entity_type', 'file')
->propertyCondition('uri', $fileobj->uri)
//$query->propertyCondition('uri', 'public://%', 'LIKE');
->execute();
if(isset($result['file'])){
dpm($result['file']);
$fid = reset($result['file'])->fid;
$fileobj = file_load($fid);
}else{
$fileobj->filemine = file_get_mimetype($fileobj->uri);
$fileobj = file_save($fileobj);
}
$node->field_image[$node->language][] = array(
'fid' => $fileobj->fid,
//'alt' => $node->title,
//'title' => $node->title,
'uid' => '1',
'filename' => $fileobj->filename,
'uri' => $fileobj->uri,
'filemime' => $fileobj->filemime,
'filesize'=> $fileobj->filesize,
'status' => '1',
);
}
if($node = node_submit($node)) { // Prepare node for saving
node_save($node);
echo "Node with nid " . $node->nid . " updated!n";
}
}