Wie kann ich unter Angabe einer Datei-ID (FID) den HTML-Code abrufen, der diese FID darstellt?

16

Ich versuche so etwas zu machen

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

Und speziell diese ID stammt aus der Version 7.x-2.x des Medienmoduls .

mikeytown2
quelle

Antworten:

16

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 das 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 I / O ausführt.

Und für das Gegenteil; einen Dateinamen gegeben bekommen 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 einen FID, wenn Sie den Einbettungscode für das Medium angeben.

<?php
$file = media_parse_to_file($embed_code);
if (empty($file->fid)) {
  return FALSE;
}
return $file->fid;
?>
mikeytown2
quelle
Können Sie bitte erklären "$ key = 'media_'. Substr ($ file-> filemime, 6). '_Video';" ? Ich versuche, ein Video von FID zu rendern. Ich möchte kein Videofeld verwenden und habe keine benutzerdefinierten Videoformate.
Tejas Vaidya
1
@ TejasVaidya, wenn $file->filemime = video/youtubeder Schlüssel dann "media_youtube_video" ist, wird die Theme-Funktion in drupal.org/project/media_youtube verwendet (siehe media_youtube_theme () )
mikeytown2
8

Sie sind drupal_render()in Ihrem Beispiel falsch . 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 drupal_render()Argument geladen &$elements, 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 Themen-API finden Sie eine Reihe von Funktionen, die HTML für verschiedene Inhaltselemente, einschließlich Dateien, bereitstellen.

Quader
quelle
Ich hasse es, das zu sagen, aber debug_backtrace hat mir etwas anderes gesagt. Deshalb habe ich mich bei meiner Antwort / Frage für drupal_render entschieden .
mikeytown2