Dosya alanı simgeleri nasıl değiştirilir (çekirdek değiştirilmeden)?


11

Bir dosya alanını görüntülemek için oluşturulan işaretleme şöyledir (bu örnekte PDF):

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

Farklı bir simge resmi kullanmak istiyorum. / Modules / file / icons içeriğini değiştirmeden bunu nasıl yapabilirim?

Sanırım varsayılan görüntüyü gizleyebilir ve CSS ile farklı bir görüntü gösterebilirim, ancak biraz dağınık görünüyor.

Yanıtlar:


10

Temanızda geçersiz kılabilir theme_file_iconve farklı simge görüntüleri belirleyebilirsiniz. file_icon_pathÇekirdeğin hangi simgelerin kullanılacağını nasıl belirlediğine ilişkin başvuru için bkz .

file_icon_pathİşlev bu değişkendeki yolu ararken , "file_icon_directory" değişkenini simgelerinizin yoluna da ayarlayabilirsiniz .


Ne jhedstrom itibaren ardından bu çözüm bulmak amacıyla yukarıdaki iki işlevi kullanmak için nasıl bir acemi blog yazdım diyor burada . Umarım bu birisine yardımcı olur!
Alison

4

Bununla ilgili iki ek not:

  1. Varsayılan simge dosyalarının tümünü tema dizininize kopyalamanız gerekmez.
  2. Özel bir simge kullanıyorsanız, bulunabilmesi için simgenin uygun şekilde adlandırılmış olması gerekir.

Örnek olarak, .bib (bibtex) dosyası için özel bir simge kullanmaya ihtiyacım vardı. Bu tür, file_default_mimetype_mapping () öğesinde eşlenir , ancak varsayılan olarak varsayılan metin simgesidir, çünkü o mime türü (metin / x-bibtex) için özel olarak tanımlanmış bir simge yoktur.

Temamın template.php öğesinde theme_file_icon () yöntemini geçersiz kıldım, ancak simge yolunun yalnızca gerektiği gibi değiştirilmesini sağladım ve varsayılan simgeler dizinini tema dizinime kopyalamak zorunda kalmadım:

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 . '" />';
}

İkinci şey, simgeyi uygun şekilde adlandırmanız gerektiğidir. Sadece file_icon_url () işlevini kullanmaya devam ederseniz , bu işlevdeki bu kod simgenin dosya adını belirler:

// 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;
}

Bu yüzden benim durumumda text-x-bibtex.png dosyamı adlandırmam gerekiyordu. Tabii ki, sadece istediğinizi adlandırmak istiyorsanız (bu durumda bibtex.png), dosya adını manuel olarak ayarlayabilirsiniz:

$icon_url = $icon_directory . '/bibtex.png';

Her ikisi de işe yarayacaktır, ancak bu yöntem varsayılan simgeleri oldukları yerde tutmanıza ve yalnızca gerektiği gibi ayarlamanıza izin verir.


1

Ben ve tregis bu Dosya Alanı Simgeleri modülünü bir süre önce yaptık. Bu yardımcı olur umarım

Bu modüller varsayılan dosya alanı simgelerini değiştirme yeteneği ekler. Çekirdek simge paketlerini (bu modüle dahil edilmiştir) kullanabilir veya özel bir simge paketi tanımlayabilirsiniz.


0

Tema işlevlerini (genellikle) önceden işleyebilirsiniz. Yani eğer:

  1. Bir veya daha fazla simgeyi geçersiz kılmak için tüm simgeleri temanıza kopyalamakta sorun yoktur.
  2. Temanızda geçersiz kılmayı önemsemeyin theme_file_icon().

modules/file/iconsDizinin tamamını temanıza kopyalayın (kullandım file_icons) ve bu önişleme işlevini temanızın template.php dosyasına ekleyin:

/**
 * 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';
}

Ayrıca bu şekilde koşullu geçersiz kılmalar da yapabilirsin ala @ wonder95 ama işleri basit tutmak istedim.


0

Verilen çözümlerden bazıları kadar temiz olmasa da, bununla başa çıkmanın gerçekten basit bir yolu CSS3 'tipi' özellik seçiciden faydalanmaktır. Özel simgenizi bağlantınıza arka plan resmi olarak hızlı bir şekilde eklemek için bunu kullanabilirsiniz. Her ikisinin de hedef dosyaya bağlandığı sonuç. Daha sonra orijinal görüntüyü gizleyebilirsiniz. Aşağıdaki görünümü elde etmek için bunu yaptım:

Sonucun ekran görüntüsü

Bu, yukarıdaki sonuçları elde etmek için kullandığım 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; }

Örneğimde, görünümleri kullanarak dosya alanlarını gösteriyordum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.