Đưa ra một ID tệp (fid) làm thế nào tôi có thể nhận được HTML đại diện cho fid đó?


Câu trả lời:


16

Điều này làm việc cho tôi. Đối với video qua mô-đun phương tiện:

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

Và cho hình ảnh; cái này cho bạn thấy những gì cài sẵn có sẵn ( #style_name)

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

Và điều này sẽ làm cho tập tin

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

Lưu ý rằng image_load thực hiện I / O.

Và cho ngược lại; đưa ra một tên tệp có được một 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
?>

Cho mã nhúng phương tiện, nhận FID.

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

Bạn có thể giải thích "$ key = 'media_'. Chất nền ($ file-> filemime, 6). '_Video';" ? Tôi đang cố gắng để kết xuất một video từ fid. Tôi không muốn sử dụng bất kỳ trường video nào và tôi không có bất kỳ định dạng video tùy chỉnh nào.
Tejas Vaidya

1
@TejasVaidya nếu $file->filemime = video/youtubesau đó, khóa sẽ kết thúc là 'media_youtube_video', sẽ sử dụng chức năng chủ đề bên trong drupal.org/project/media_youtube (xem media_youtube_theme () )
mikeytown2

8

Bạn đang áp dụng sai drupal_render()trong ví dụ của bạn. drupal_render()giữ nội dung sẽ được hiển thị và hướng dẫn cách hiển thị nội dung trong một mảng để tất cả nội dung có thể được sửa đổi bởi các mô-đun khác, cho đến giây phút cuối cùng trước khi hiển thị. Tất cả mọi thứ được tải trong drupal_render()đối số &$elements, đó là đối số cho hàm. drupal_render()không trả về các phần tử được kết xuất từ ​​các biến được truyền trong các đối số.

Nhìn vào API chủ đề cho một loạt các chức năng sẽ cung cấp HTML cho các yếu tố nội dung khác nhau bao gồm các tệp.


ghét nói điều này nhưng debug_backtrace đã nói với tôi khác. Đó là lý do tại sao tôi đi với drupal numnder trong câu trả lời / câu hỏi của mình.
mikeytown2

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.