Answers:
您可以覆盖theme_file_icon
主题,并指定其他图标图像。请参阅file_icon_path
以获取有关core如何确定要使用哪些图标的参考。
您也可以将“ file_icon_directory”变量设置为图标的路径,因为file_icon_path
函数会在该变量中寻找路径。
关于此的两个附加说明:
例如,我需要为.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';
两种方法都可以使用,但是这种方法可让您将默认图标保留在原位置,并仅根据需要进行调整。
我和tregis不久前完成了此“ 文件字段图标”模块。希望这可以帮助
该模块增加了更改默认文件字段图标的功能。您可以使用核心图标包(包含在此模块中),也可以定义自定义图标包。
您通常可以预处理主题功能。因此,如果您:
theme_file_icon()
主题。将整个modules/file/icons
目录复制到您的主题(我曾用过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';
}
您也可以使用这种方式进行条件覆盖ala @ 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; }
在我的示例中,我使用视图显示文件字段。