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


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

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.


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.