私はこのようなことをしたいと思っています
$fid = 15;
$file = (array)file_load($fid);
$content = drupal_render($file);
echo $content;
具体的には、このfidは メディアモジュール の7.x-2.xバージョンのものです。
これでうまくいきます。メディアモジュールを介した動画の場合:
<?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;
?>
あなたの例ではdrupal_render()
を誤って適用しています。 drupal_render()
は、表示するコンテンツと、それを配列にレンダリングする方法の指示を保持します。これにより、すべてのコンテンツを他のモジュールで変更することができます。すべては、関数の引数であるdrupal_render()
引数_&$elements
_にロードされます。 drupal_render()
は、引数で渡された変数からレンダリングされた要素を返しません。
テーマAPI を見て、ファイルを含むさまざまなコンテンツ要素にHTMLを提供する一連の関数を探します。
おそらく探している関数は file_get_content_headers() で、ファイルのダウンロード、または(ファイルがテキストファイルまたは画像の場合)インラインでの表示を許可するヘッダーを設定します。
この関数には、 file_load_multiple() 、 file_load() 、または entity_load( 'file') によって返されるファイルオブジェクトが必要です。