给定一个文件ID(fid),我如何获取表示该fid的HTML?


Answers:


15

这对我有用。对于通过媒体模块的视频:

<?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;
?>

您能解释一下“ $ key ='media_'。substr($ file-> filemime,6)。'_video';” ?我正在尝试从fid渲染视频。我不想使用任何视频字段,也没有任何自定义视频格式。
2016年

1
@TejasVaidya如果是,$file->filemime = video/youtube则密钥最终将是'media_youtube_video',它将使用drupal.org/project/media_youtube(请参阅media_youtube_theme())内部的主题功能
mikeytown2 '16

7

drupal_render()在您的示例中使用不当。drupal_render()保留要显示的内容以及如何将其呈现在数组中的说明,以便所有内容可以被其他模块修改,直到显示前的最后一刻。一切都加载到drupal_render()参数&$elements,这是函数的参数。 drupal_render()不从参数传递的变量中返回渲染的元素。

查看主题API,了解一系列功能,这些功能将为各种内容元素(包括文件)提供HTML。


讨厌这样说,但是debug_backtrace告诉了我。这就是为什么我在回答/问题中使用drupal_render的原因。
mikeytown2

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.