Diberikan ID File (fid) bagaimana saya bisa mendapatkan HTML yang mewakili fid itu?


Jawaban:


16

Ini bekerja untuk saya. Untuk video melalui modul media:

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

Dan untuk gambar; ini menunjukkan kepada Anda preset apa yang tersedia ( #style_name)

<?php
$styles = image_styles();
echo '<pre>' . print_r($styles, TRUE) . '</pre>';
?>

Dan ini akan membuat file

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

Perhatikan bahwa image_load melakukan I / O.

Dan sebaliknya; diberi nama file mendapatkan 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
?>

Diberi kode embed media, dapatkan FID.

<?php
$file = media_parse_to_file($embed_code);
if (empty($file->fid)) {
  return FALSE;
}
return $file->fid;
?>

Bisakah Anda jelaskan "$ key = 'media_'. Substr ($ file-> filemime, 6). '_Video';" ? Saya mencoba membuat video dari fid. Saya tidak ingin menggunakan bidang video apa pun dan saya tidak memiliki format video khusus.
Tejas Vaidya

1
@TejasVaidya jika $file->filemime = video/youtubekemudian kuncinya akan berakhir menjadi 'media_youtube_video' yang akan menggunakan fungsi tema di dalam drupal.org/project/media_youtube (lihat media_youtube_theme () )
mikeytown2

8

Anda salah menerapkan drupal_render()dalam contoh Anda. drupal_render()menyimpan konten yang akan ditampilkan dan instruksi cara merendernya dalam array sehingga semua konten dapat dimodifikasi oleh modul lain, hingga saat-saat terakhir sebelum ditampilkan. Semuanya dimuat dalam drupal_render()argumen &$elements, yang merupakan argumen untuk fungsi. drupal_render()tidak mengembalikan elemen yang diberikan dari variabel yang dikirimkan dalam argumen.

Lihatlah API tema untuk serangkaian fungsi yang akan menyediakan HTML untuk berbagai elemen konten termasuk file.


benci mengatakan ini tetapi debug_backtrace mengatakan sebaliknya. Itu sebabnya saya menggunakan drupal_render dalam jawaban / pertanyaan saya.
mikeytown2

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.