Dado un ID de archivo (fid), ¿cómo puedo obtener el HTML que representa ese fid?

Respuestas:

16

Esto funciona para mi. Para videos a través del módulo de medios:

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

Y para imágenes; esto le muestra qué ajustes preestablecidos están disponibles ( #style_name)

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

Y esto representará el archivo

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

Tenga en cuenta que image_load realiza E / S.

Y por el reverso; dado un nombre de archivo obtener un 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
?>

Dado el código de inserción de medios, obtenga un FID.

<?php
$file = media_parse_to_file($embed_code);
if (empty($file->fid)) {
  return FALSE;
}
return $file->fid;
?>
mikeytown2
fuente
¿Puede explicar "$ key = 'media_'. Substr ($ file-> filemime, 6). '_Video';" ? Estoy tratando de reproducir un video de FID. No quiero usar ningún campo de video y no tengo ningún formato de video personalizado.
Tejas Vaidya
1
@TejasVaidya si $file->filemime = video/youtubela clave terminará siendo 'media_youtube_video', que usará la función de tema dentro de drupal.org/project/media_youtube (ver media_youtube_theme () )
mikeytown2
8

Estás aplicando mal drupal_render()tu ejemplo. drupal_render()contiene el contenido que se mostrará y las instrucciones sobre cómo representarlo en una matriz para que otros módulos puedan modificar todo el contenido, hasta el último momento antes de mostrarlo. Todo se carga en el drupal_render()argumento &$elements, que es el argumento de la función. drupal_render()no devuelve elementos renderizados de variables pasadas en argumentos.

Mire la API del tema para ver una serie de funciones que proporcionarán HTML para varios elementos de contenido, incluidos los archivos.

Sillar
fuente
Odio decir esto, pero debug_backtrace me dijo lo contrario. Es por eso que fui con drupal_render en mi respuesta / pregunta.
mikeytown2