ได้รับ ID ไฟล์ (fid) ฉันจะรับ HTML ที่แสดงถึง fid นั้นได้อย่างไร


16

ฉันกำลังมองหาที่จะทำอะไรเช่นนี้

$fid = 15;
$file = (array)file_load($fid);
$content = drupal_render($file);
echo $content;

และโดยเฉพาะ FID นี้มาจากรุ่น 7.x-2.x ของโมดูลสื่อ

คำตอบ:


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ซึ่งเป็นอาร์กิวเมนต์สำหรับฟังก์ชัน drupal_render()ไม่ส่งคืนองค์ประกอบที่เรนเดอร์จากตัวแปรที่ส่งผ่านในอาร์กิวเมนต์

ดูAPI ธีมสำหรับชุดฟังก์ชันที่จะให้ HTML สำหรับองค์ประกอบเนื้อหาต่าง ๆ รวมถึงไฟล์


เกลียดที่จะพูดแบบนี้ แต่debug_backtraceบอกฉันเป็นอย่างอื่น นั่นเป็นเหตุผลที่ฉันไปกับdrupal_renderในคำตอบ / คำถามของฉัน
mikeytown2

4

ฟังก์ชั่นที่คุณกำลังมองหาคือ file_get_content_headers ()ซึ่งตั้งค่าส่วนหัวสำหรับอนุญาตให้ดาวน์โหลดไฟล์หรือ (หากไฟล์นั้นเป็นไฟล์ข้อความหรือรูปภาพ) ที่ต้องการดูแบบอินไลน์

ฟังก์ชั่นต้องใช้วัตถุไฟล์ที่ส่งกลับโดยfile_load_multiple () , file_load ()หรือentity_load ( 'ไฟล์')

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.