답변:
theme_file_icon
테마에서 재정의 하고 다른 아이콘 이미지를 지정할 수 있습니다 . file_icon_path
코어가 사용할 아이콘을 결정하는 방법에 대한 참조 를 참조 하십시오 .
file_icon_path
함수가 해당 변수에서 경로를 찾을 때 "file_icon_directory"변수를 아이콘의 경로로 설정할 수도 있습니다 .
이것에 대한 두 가지 추가 참고 사항 :
예를 들어, .bib (bibtex) 파일에 사용자 정의 아이콘을 사용해야했습니다. 이 유형은 file_default_mimetype_mapping ()에 매핑 되지만 해당 MIME 유형 (text / x-bibtex)에 대해 특별히 정의 된 아이콘이 없으므로 기본 텍스트 아이콘으로 기본 설정됩니다.
내 테마의 template.php에서 theme_file_icon ()을 무시하지만 필요한 경우에만 아이콘 경로가 수정되도록 기본 아이콘 디렉토리를 내 테마 디렉토리에 복사 할 필요가 없었습니다.
function mytheme_file_icon($variables) {
$file = $variables['file'];
$icon_directory = $variables['icon_directory'];
$mime = check_plain($file->filemime);
if ($mime == 'text/x-bibtex') {
$icon_directory = drupal_get_path('theme', 'mytheme') . '/images';
}
$icon_url = file_icon_url($file, $icon_directory);
return '<img class="file-icon" alt="" title="' . $mime . '" src="' . $icon_url . '" />';
}
두 번째는 아이콘 이름을 적절하게 지정해야한다는 것입니다. file_icon_url ()을 계속 사용하면 해당 함수의이 코드는 아이콘의 파일 이름을 결정합니다.
// For a few mimetypes, we can "manually" map to a generic icon.
$generic_mime = (string) file_icon_map($file);
$icon_path = $icon_directory . '/' . $generic_mime . '.png';
if ($generic_mime && file_exists($icon_path)) {
return $icon_path;
}
따라서 필자의 경우 파일 이름을 text-x-bibtex.png로 지정해야했습니다. 물론 원하는대로 이름을 지정하려면 (이 경우 bibtex.png) 파일 이름을 수동으로 설정하면됩니다.
$icon_url = $icon_directory . '/bibtex.png';
어느 쪽이든 작동하지만이 방법을 사용하면 기본 아이콘을 그대로 유지하고 필요에 따라 조정할 수 있습니다.
테마 기능을 전처리 할 수 있습니다. 따라서 당신이 :
theme_file_icon()
테마 를 재정의하지 않아도 됩니다.전체 modules/file/icons
디렉토리를 테마에 복사하고 (I used file_icons
)이 전처리 기능을 테마의 template.php에 추가하십시오.
/**
* Implements hook_preprocess_HOOK() for theme_file_icon().
*
* Change the icon directory to use icons from this theme.
*/
function MYTHEME_preprocess_file_icon(&$variables) {
$variables['icon_directory'] = drupal_get_path('theme', 'MYTHEME') . '/file_icons';
}
aa @ wonder95와 같은 조건부 재정의를 수행 할 수도 있지만 일을 단순하게 유지하고 싶었습니다.
주어진 솔루션만큼 깨끗하지는 않지만 CSS3 'type'속성 선택기를 사용하는 간단한 방법입니다. 이를 사용하여 사용자 정의 아이콘을 배경 이미지로 링크에 빠르게 추가 할 수 있습니다. 둘 다 대상 파일에 링크 된 결과입니다. 그런 다음 원본 이미지를 숨길 수 있습니다. 나는 다음과 같은 모습을 얻기 위해 이것을했다.
이것은 위의 결과를 달성하는 데 사용한 CSS입니다.
.views-field-field-image-files img.file-icon {display:none;}
.views-field-field-image-files a {padding-left: 100px; height: 80px; display: block; margin-bottom: 20px;}
.views-field-field-image-files a[type*="application/pdf"] {background: url(../img/icons/file-icon-pdf.gif) no-repeat; }
.views-field-field-image-files a[type*="application/zip"] {background: url(../img/icons/file-icon-zip.gif) no-repeat; }
.views-field-field-image-files a[type*="application/ppt"] {background: url(../img/icons/file-icon-ppt.gif) no-repeat; }
.views-field-field-image-files a[type*="application/pptx"] {background: url(../img/icons/file-icon-ppt.gif) no-repeat; }
이 예에서는 뷰를 사용하여 파일 필드를 보여주었습니다.