it-swarm.com.de

Wie kann ich bei einer Datei-ID (fid) den HTML-Code erhalten, der diese fid darstellt?

Ich möchte so etwas tun

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

Und speziell dieses FID stammt aus der 7.x-2.x-Version des Medienmoduls .

15
mikeytown2

Das funktioniert bei mir. Für Videos über das Medienmodul:

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

Und für Bilder; Dies zeigt Ihnen, welche Voreinstellungen verfügbar sind (#style_name)

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

Und dies wird die Datei rendern

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

Beachten Sie, dass image_load E/A ausführt.

Und umgekehrt; Wenn Sie einen Dateinamen erhalten, erhalten Sie eine 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
?>

Erhalten Sie bei gegebenem Medieneinbettungscode eine FID.

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

Sie wenden drupal_render() in Ihrem Beispiel falsch an. drupal_render() enthält den anzuzeigenden Inhalt und die Anweisungen zum Rendern in einem Array, sodass der gesamte Inhalt bis zum letzten Moment vor der Anzeige von anderen Modulen geändert werden kann. Alles wird in das Argument drupal_render()&$elements geladen, das das Argument für die Funktion ist. drupal_render() gibt keine gerenderten Elemente von Variablen zurück, die in Argumenten übergeben wurden.

In der Theme-API finden Sie eine Reihe von Funktionen, die HTML für verschiedene Inhaltselemente einschließlich Dateien bereitstellen.

7
Ashlar

Die Funktion, nach der Sie wahrscheinlich suchen, ist file_get_content_headers () , mit der die Header festgelegt werden, damit eine Datei heruntergeladen oder (wenn es sich bei der Datei um eine Textdatei oder ein Bild handelt) inline angezeigt werden kann.

Die Funktion erfordert ein Dateiobjekt, wie es von file_load_multiple () , file_load () oder entity_load ('file') zurückgegeben wird.

3
kiamlaluno