web-dev-qa-db-fra.com

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

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 .

15
mikeytown2

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 les 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;
?>
15
mikeytown2

Vous appliquez incorrectement drupal_render() 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'argument drupal_render()&$elements, qui est l'argument de la fonction. drupal_render() ne renvoie pas les éléments rendus des variables passées en arguments.

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

7
Ashlar

La fonction que vous recherchez probablement est file_get_content_headers () , qui définit les en-têtes pour autoriser le téléchargement d'un fichier ou (si le fichier est un fichier texte ou une image) pour être visualisé en ligne.

La fonction nécessite un objet fichier renvoyé par file_load_multiple () , file_load () ou entity_load ('file') .

3
kiamlaluno