(コアを変更せずに)ファイルフィールドアイコンを変更するにはどうすればよいですか?


11

ファイルフィールドを表示するために生成されるマークアップは(この例ではPDF)です。

<img src="/modules/file/icons/application-pdf.png" title="application/pdf" alt="" class="file-icon">

別のアイコン画像を使用したいのですが。/ modules / file / iconsの内容を変更せずにこれを行うにはどうすればよいですか?

デフォルトの画像を非表示にして、CSSで別の画像を表示できると思いますが、少し面倒です。

回答:


10

theme_file_iconテーマをオーバーライドして、別のアイコン画像を指定できます。file_icon_pathコアがどのアイコンを使用するかを決定する方法については、参考資料を参照してください。

「file_icon_directory」変数をアイコンへのパスに設定することもできfile_icon_pathます。関数がその変数でパスを探すためです。


jhedstromの発言に続いて、ここでこのソリューションを実現するために上記の2つの関数を使用する方法について初心者向けのブログを書きまし。それが誰かに役立つことを願っています!
アリソン

4

これに関する2つの追加メモ:

  1. すべてのデフォルトのアイコンファイルをテーマディレクトリにコピーする必要はありません。
  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';

どちらでも機能しますが、この方法では、デフォルトのアイコンをそのままにして、必要に応じて調整するだけです。


1

私とtregisは、このFile Field Iconsモジュールを少し前に完成させました。お役に立てれば

このモジュールは、デフォルトのファイルフィールドアイコンを変更する機能を追加します。コアアイコンパッケージ(このモジュールに含まれています)を使用するか、カスタムアイコンパッケージを定義できます。


0

(通常)テーマ関数を前処理できます。だからあなたが:

  1. すべてのアイコンをテーマにコピーして、1つまたは複数のアイコンを上書きしてもかまいません。
  2. 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で行うこともできますが、私は物事をシンプルに保ちたかったです。


0

与えられたいくつかの解決策ほどきれいではありませんが、これに対処する本当に簡単な方法は、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; }

私の例では、ビューを使用してファイルフィールドを表示していました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.