Dato un ID file (fid) come posso ottenere l'HTML che rappresenta quel fid?


Risposte:


16

Questo funziona per me. Per i video tramite il modulo multimediale:

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

E per immagini; questo ti mostra quali preset sono disponibili ( #style_name)

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

E questo renderà il file

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

Si noti che image_load esegue l'I / O.

E per il contrario; dato un nome di file ottenere 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
?>

Dato il codice di incorporamento dei media, ottieni un FID.

<?php
$file = media_parse_to_file($embed_code);
if (empty($file->fid)) {
  return FALSE;
}
return $file->fid;
?>

Puoi spiegare "$ key = 'media_'. Substr ($ file-> filemime, 6). '_Video';" ? Sto provando a rendere un video da fid. Non voglio usare nessun campo video e non ho formati video personalizzati.
Tejas Vaidya,

1
@TejasVaidya se $file->filemime = video/youtubela chiave finirà per essere "media_youtube_video" che utilizzerà la funzione tema all'interno di drupal.org/project/media_youtube (vedi media_youtube_theme () )
mikeytown2

8

Stai applicando erroneamente drupal_render()nel tuo esempio. drupal_render()contiene il contenuto da visualizzare e le istruzioni su come renderlo in un array in modo che tutto il contenuto possa essere modificato da altri moduli, fino all'ultimo momento prima della visualizzazione. Tutto è caricato drupal_render()nell'argomento &$elements, che è l'argomento per la funzione. drupal_render()non restituisce gli elementi renderizzati dalle variabili passate negli argomenti.

Guarda l' API del tema per una serie di funzioni che forniranno HTML per vari elementi di contenuto, inclusi i file.


odio dirlo ma debug_backtrace mi ha detto diversamente. Ecco perché sono andato con drupal_render nella mia risposta / domanda.
mikeytown2,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.