ファイルフィールドを表示するために生成されるマークアップは(この例ではPDF)です。
<img src="/modules/file/icons/application-pdf.png" title="application/pdf" alt="" class="file-icon">
別のアイコン画像を使用したいのですが。/modules/file/iconsの内容を変更せずにこれを行うにはどうすればよいですか?
デフォルトの画像を非表示にして、CSSで別の画像を表示できると思いますが、少し面倒です。
theme_file_icon
をテーマに追加し、別のアイコン画像を指定します。見る - file_icon_path
コアがどのアイコンを使用するかを決定する方法に関する参照用。
"file_icon_directory"変数に、アイコンへのパスを file_icon_path
関数は、その変数でパスを探します。
これに関する2つの追加メモ:
例として、.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 . '" />';
}
2つ目は、アイコンに適切な名前を付ける必要があることです。 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 これを取得 File Field Icons 少し前にモジュールが完了しました。お役に立てれば
このモジュールは、デフォルトのファイルフィールドアイコンを変更する機能を追加します。コアアイコンパッケージ(このモジュールに含まれています)を使用するか、カスタムアイコンパッケージを定義できます。
与えられたいくつかの解決策ほどきれいではありませんが、これに対処する本当に簡単な方法は、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; }
私の例では、ビューを使用してファイルフィールドを表示していました。
(通常)テーマ関数を前処理できます。だからあなたが:
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で行うこともできますが、私は物事をシンプルに保ちたかったです。