Étant donné un ID de fichier (fid), comment puis-je obtenir le code HTML qui représente ce fid?

16

Je cherche à faire quelque chose comme ça

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

Et plus précisément, ce fid provient de la version 7.x-2.x du module média .

mikeytown2
la source

Réponses:

16

Cela fonctionne pour moi. Pour les vidéos via le module média:

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

Et pour les images; cela vous montre quels préréglages sont disponibles ( #style_name)

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

Et cela rendra le fichier

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

Notez que image_load effectue des E / S.

Et pour l'inverse; étant donné un nom de fichier obtenir 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
?>

Étant donné le code d'intégration des médias, obtenez un FID.

<?php
$file = media_parse_to_file($embed_code);
if (empty($file->fid)) {
  return FALSE;
}
return $file->fid;
?>
mikeytown2
la source
Pouvez-vous expliquer "$ key = 'media_'. Substr ($ file-> filemime, 6). '_Video';" ? J'essaye de rendre une vidéo de fid. Je ne veux utiliser aucun champ vidéo et je n'ai aucun format vidéo personnalisé.
Tejas Vaidya
1
@TejasVaidya si $file->filemime = video/youtubealors la clé finira par être 'media_youtube_video' qui utilisera la fonction de thème à l'intérieur de drupal.org/project/media_youtube (voir media_youtube_theme () )
mikeytown2
8

Vous drupal_render()faites une mauvaise application dans votre exemple. drupal_render()contient le contenu à afficher et les instructions pour le rendre dans un tableau afin que tout le contenu puisse être modifié par d'autres modules, jusqu'au dernier moment avant l'affichage. Tout est chargé dans l' drupal_render()argument &$elements, qui est l'argument de la fonction. drupal_render()ne renvoie pas les éléments rendus des variables passées en arguments.

Regardez l' API de thème pour une série de fonctions qui fourniront du HTML pour divers éléments de contenu, y compris des fichiers.

Pierre de taille
la source
déteste dire cela mais debug_backtrace m'a dit le contraire. C'est pourquoi je suis allé avec drupal_render dans ma réponse / question.
mikeytown2