З огляду на ідентифікатор файлу (fid), як я можу отримати HTML, який представляє цей fid?


Відповіді:


15

Це працює для мене. Для відео через медіа-модуль:

<?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 виконує введення-виведення.

А для зворотного; дали ім'я файлу отримати 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. Я не хочу використовувати жодне відео-поле і не маю спеціальних відеоформатів.
Техас Вайдя

1
@TejasVaidya, якщо $file->filemime = video/youtubeтоді ключ виявиться "media_youtube_video", який використовуватиме функцію теми всередині drupal.org/project/media_youtube (див. Media_youtube_theme () )
mikeytown2

7

Ви неправильно застосовуєте drupal_render()у своєму прикладі. drupal_render()містить вміст, який відображається, та інструкції щодо його відображення в масиві, щоб весь вміст міг бути змінений іншими модулями до останнього моменту перед відображенням. Все завантажується в drupal_render()аргумент &$elements, який є аргументом для функції. drupal_render()не повертає виведені елементи зі змінних, переданих в аргументах.

Подивіться на API теми для низки функцій, які нададуть HTML для різних елементів вмісту, включаючи файли.


ненавиджу говорити це, але debug_backtrace сказав мені інакше. Ось чому я пішов з drupal_render у своїй відповіді / питанні.
mikeytown2

3

Ви, ймовірно, шукаєте функцію file_get_content_headers () , яка встановлює заголовки для дозволу завантаження файлу, або (якщо файл є текстовим файлом або зображенням) для перегляду вбудованим.

Функція вимагає файлового об’єкта, який повертається file_load_multiple () , file_load () або entity_load ('файл') .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.