Recent Entries

Предположим у нас уже есть нода, ее 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

Tagged with:
 

Attach image to node

On May 24, 2010, in Uncategorized, by admin
0

В моем случае это CCK поле со множеством картинок.
Для начала располагаем файлы там, где они и будут лежать: sites/default/files/<path>
Цикл добавления файлов (в этом примере пути находятся в результате SQL запроса):

$image_directory_path = file_directory_path() . <path>;
$directory_path = $_SERVER['DOCUMENT_ROOT'] . base_path() . $image_directory_path;

$node->field_mages = array();

while($image = db_fetch_array($images)) {
$dest_file_path = $directory_path . $image['path'];
if (file_exists($dest_file_path)) {
array_push($node->field_images, node_attach_file($node, $image_directory_path . $image['path']));
}
}

ну и сама функция:


function node_attach_file($node, $path) {
$file = new stdClass();
$file->filename = basename($path);
$file->filepath = $path;
$file->filemime = file_get_mimetype($path);
$file->filesize = filesize($path);

$file->uid = 1;
$file->status = FILE_STATUS_PERMANENT;
$file->timestamp = time();
drupal_write_record('files', $file);
$file->fid = db_result(db_query("SELECT fid FROM {files} WHERE filepath = '%s'", $file->filepath));

return array(
'fid' => $file->fid,
'title' => basename($file->filename),
'filename' => $file->filename,
'filepath' => $file->filepath,
'filesize' => $file->filesize,
'mimetype' => $file->filemime,
'description' => basename($file->filename),
'list' => 1,
);
}

Tagged with:
 

Print view from code

On May 22, 2010, in Uncategorized, by admin
0

Делается через
views_embed_view($name, $display_id = 'default')

Tagged with:
 

В базовом комплекте Ubuntu 10.04 идёт с версией PHP 5.3.2.
А это не всем и не всегда нужно.
Например, некоторые модули Drupal (да и само ядро) с последними версиями PHP дружат не очень.

Поэтому в некоторых случаях лучше откатить PHP до определенной версии, да еще и лучше чтобы при апдейте системы эта версия осталась прежней.
(more…)

Tagged with: