파일 ID (fid)가 주어지면 해당 fid를 나타내는 HTML을 어떻게 얻을 수 있습니까?


답변:


16

이것은 나를 위해 작동합니다. 미디어 모듈을 통한 비디오의 경우 :

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

그리고 이미지를 위해; 사용 가능한 사전 설정이 표시됩니다 ( #style_name).

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

그리고 이것은 파일을 렌더링합니다

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

참고 image_load의 수행 I / O.

그리고 그 반대의 경우도 있습니다. 파일 이름이 주어지면 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
?>

주어진 미디어 임베드 코드는 FID를 얻습니다.

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

"$ key = 'media_'. substr ($ file-> filemime, 6). '_video';"를 설명해 주시겠습니까? ? fid에서 비디오를 렌더링하려고합니다. 비디오 필드를 사용하고 싶지 않으며 사용자 정의 비디오 형식이 없습니다.
Tejas Vaidya

1
@TejasVaidya 경우 $file->filemime = video/youtube 다음 키의 테마 기능 내부 사용 'media_youtube_video'끝나게됩니다 drupal.org/project/media_youtube를 (참조 ) media_youtube_theme를 ( )
mikeytown2

8

귀하 drupal_render()의 예에서 잘못 적용 되고 있습니다. drupal_render()표시 할 내용과 표시하기 전 마지막 순간까지 다른 모듈에서 모든 내용을 수정할 수 있도록 배열에 내용을 렌더링하는 방법에 대한 지침을 보유합니다. 모든 것은 drupal_render()인수에 로드되며 &$elements이는 함수의 인수입니다. drupal_render()인수에 전달 된 변수에서 렌더링 된 요소를 반환하지 않습니다.

파일을 포함한 다양한 컨텐츠 요소에 HTML을 제공하는 일련의 함수 에 대해서는 테마 API 를 살펴보십시오 .


이 말을 싫어하지만 debug_backtrace 가 달리 말하지 않았습니다 . 그래서 답변 / 질문에서 drupal_render 와 함께갔습니다 .
mikeytown2

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.