我正在寻找做这样的事情
$fid = 15;
$file = (array)file_load($fid);
$content = drupal_render($file);
echo $content;
特别是,此fid来自媒体模块的7.x-2.x版本。
我正在寻找做这样的事情
$fid = 15;
$file = (array)file_load($fid);
$content = drupal_render($file);
echo $content;
特别是,此fid来自媒体模块的7.x-2.x版本。
Answers:
这对我有用。对于通过媒体模块的视频:
<?php
$file = file_load($fid);
if (strpos($file->filemime, 'video/') !== 0) {
return;
}
$key = 'media_' . substr($file->filemime, 6) . '_video';
$formatter_info = file_info_formatter_types($key);
$content = array();
$content['#theme'] = $key;
$content['#uri'] = $file->uri;
if (isset($formatter_info['default settings'])) {
$content['#options'] = $formatter_info['default settings'];
}
$rendered = drupal_render($content);
return $rendered;
?>
对于图像;这会向您显示可用的预设(#style_name
)
<?php
$styles = image_styles();
echo '<pre>' . print_r($styles, TRUE) . '</pre>';
?>
这将渲染文件
<?php
$file = file_load($fid);
$image = image_load($file->uri);
$content = array(
'file' => array(
'#theme' => 'image_style',
'#style_name' => 'large',
'#path' => $image->source,
'#width' => $image->info['width'],
'#height' => $image->info['height'],
),
);
echo drupal_render($content);
?>
请注意,image_load执行I / O。
反之亦然;给定一个文件名得到一个fid。
<?php
$query = new EntityFieldQuery();
$result = $query
->entityCondition('entity_type', 'file')
->propertyCondition('filename', basename($filename))
->execute();
foreach ($result['file'] as $values) {
$fid = $values->fid;
break;
}
echo $fid
?>
给定媒体嵌入代码,获取FID。
<?php
$file = media_parse_to_file($embed_code);
if (empty($file->fid)) {
return FALSE;
}
return $file->fid;
?>
$file->filemime = video/youtube
则密钥最终将是'media_youtube_video',它将使用drupal.org/project/media_youtube(请参阅media_youtube_theme())内部的主题功能
您drupal_render()
在您的示例中使用不当。drupal_render()
保留要显示的内容以及如何将其呈现在数组中的说明,以便所有内容可以被其他模块修改,直到显示前的最后一刻。一切都加载到drupal_render()
参数&$elements
,这是函数的参数。 drupal_render()
不从参数传递的变量中返回渲染的元素。
查看主题API,了解一系列功能,这些功能将为各种内容元素(包括文件)提供HTML。
您可能正在寻找的函数是file_get_content_headers(),该函数设置标题以允许下载文件,或者(如果文件是文本文件或图像)内联查看。
该函数需要file_load_multiple(),file_load()或Entity_load('file')返回的文件对象。