ファイルID(fid)を指定すると、そのfidを表すHTMLを取得するにはどうすればよいですか?


回答:


16

これは私のために動作します。メディアモジュール経由のビデオの場合:

<?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からビデオをレンダリングしようとしています。ビデオフィールドを使用したくなく、カスタムビデオ形式もありません。
Tejas Vaidya

1
@TejasVaidya $file->filemime = video/youtubeキーが「media_youtube_video」になり、drupal.org / project / media_youtube内のテーマ関数を使用する場合(media_youtube_theme()を参照)
mikeytown2

8

あなたのdrupal_render()例では間違っています。drupal_render()表示するコンテンツと、それを配列にレンダリングする方法の指示を保持して、表示する前の最後の瞬間まで、すべてのコンテンツを他のモジュールで変更できるようにします。すべてが関数のdrupal_render()引数&$elementsであるargument にロードされます。 drupal_render()引数で渡された変数からレンダリングされた要素を返しません。

ファイルを含むさまざまなコンテンツ要素にHTMLを提供する一連の関数については、テーマAPIをご覧ください。


これを言うのは嫌いですが、debug_backtraceは私にそうではないと言った。だからこそ、答え/質問でdrupal_renderを使用しました。
mikeytown2

4

おそらく探している関数はfile_get_content_headers()で、これはファイルのダウンロードを許可するためのヘッダーを設定するか、(ファイルがテキストファイルまたはイメージの場合)インラインで表示するために使用します。

この関数には、file_load_multiple()file_load()、またはentity_load( 'file')によって返されるファイルオブジェクトが必要です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.