Biorąc pod uwagę identyfikator pliku (FID), w jaki sposób mogę uzyskać kod HTML reprezentujący ten identyfikator FID?

Odpowiedzi:

15

To działa dla mnie. W przypadku filmów za pośrednictwem modułu multimediów:

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

I dla obrazów; to pokazuje, jakie ustawienia wstępne są dostępne ( #style_name)

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

A to wyrenderuje plik

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

Zauważ, że image_load wykonuje operacje we / wy.

I na odwrót; biorąc pod uwagę nazwę pliku, uzyskaj 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
?>

Biorąc pod uwagę kod osadzania mediów, uzyskaj FID.

<?php
$file = media_parse_to_file($embed_code);
if (empty($file->fid)) {
  return FALSE;
}
return $file->fid;
?>
mikeytown2
źródło
Czy możesz wyjaśnić „$ key = 'media_'. Substr ($ file-> filemime, 6). '_Video';” ? Próbuję renderować wideo z FID. Nie chcę używać żadnego pola wideo i nie mam żadnych niestandardowych formatów wideo.
Tejas Vaidya
1
@TejasVaidya, jeśli $file->filemime = video/youtubekluczem będzie „media_youtube_video”, który będzie korzystał z funkcji motywu wewnątrz drupal.org/project/media_youtube (patrz media_youtube_theme () )
mikeytown2
7

Źle aplikujesz drupal_render()w swoim przykładzie. drupal_render()przechowuje zawartość do wyświetlenia i instrukcje, jak renderować ją w tablicy, aby cała zawartość mogła być modyfikowana przez inne moduły, aż do ostatniej chwili przed wyświetleniem. Wszystko jest ładowane do drupal_render()argumentu &$elements, który jest argumentem funkcji. drupal_render()nie zwraca renderowanych elementów ze zmiennych przekazywanych w argumentach.

W interfejsie API kompozycji znajduje się szereg funkcji, które zapewnią HTML dla różnych elementów treści, w tym plików.

Łom
źródło
nie chcę tego mówić, ale debug_backtrace powiedział mi inaczej. Dlatego w odpowiedzi / pytaniu poszedłem z drupal_render .
mikeytown2