web-gelistirme-sc.com

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

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.

11
pushka

Geçersiz kılabilirsiniz theme_file_icon temanıza ekleyin ve farklı simge resimleri belirtin. Görmek file_icon_path çekirdeğin hangi simgelerin kullanılacağını nasıl belirlediğine ilişkin referans için.

Ayrıca "file_icon_directory" değişkenini simgelerinizin yoluna --- file_icon_path işlevi bu değişkende yolu arar.

10
jhedstrom

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 () ile eşleştirilir, ancak varsayılan olarak varsayılan metin simgesini kullanır çünkü bu mime türü için özel olarak tanımlanmış bir simge yoktur (text/x-bibtex).

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. 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 gerektiğinde yalnızca Tweak şeylerini korumanıza izin verir.

4
wonder95

Ben ve tregis anladım Dosya Alanı Simgeleri modül bir süre önce yapıldı. 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.

1
Rudá Maia

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:

Screenshot of result

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 dosya alanlarını görünümleri kullanarak gösteriyordum.

0
Paul Trotter

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ızdaki theme_file_icon() öğesini geçersiz kılmaya özen gösterin.

Tüm modules/file/icons Dizinini temanıza kopyalayın (file_icons Kullandım) 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
Cottser