Предположим у нас уже есть нода, ее nid = 5.
У нее уже есть поле типа filefield (field_pdf) и нам нужно программно туда приаттачить файл sites/default/files/pdf/super.pdf.
Все просто:
$node = node_load(5);
$new_file = file_directory_path().'/pdf/super.pdf';
if( file_exists( $new_file )) {
// загружаем CCK поле
$field = content_fields('field_pdf', $node->type);
// получаем валидаторы этого поля
$validators = filefield_widget_upload_validators($field);
// получаем настройки пути для данного поля
$field_path = filefield_widget_file_path($field);
// сохраняем файл, и получаем данные для записи в ноду
$file = field_file_save_file($new_file, $validators, $field_path, FILE_EXISTS_REPLACE);
// и пишем их в ноду
$node->field_pdf = array(0 => $file);
// сохраняем ноду
node_save($node);
}
Если же нам нужно загрузить картинку в поле типа imagefield,
то делаем то же самое, только к валидаторам нужно добавить дополнительную валидацию для imagefield:
$validators = array_merge(filefield_widget_upload_validators($field), imagefield_widget_upload_validators($field));
Все.
Этот подход универсален, поскольку использует основные функции CCK
и проверяет любые ограничения, прописанные в настройках поля.
–
drugget