it-swarm-eu.dev

Jak změnit ikony pole Soubor (beze změny jádra)?

Generované označení pro zobrazení pole souboru je (PDF v tomto příkladu):

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

Chtěl bych použít jiný obrázek ikony. Jak to mohu udělat, aniž bych změnil obsah/modules/file/icons?

Myslím, že bych mohl skrýt výchozí obrázek a zobrazit jiný s CSS, ale zdá se trochu chaotický.

11
pushka

Můžete přepsat theme_file_icon v motivu a určete různé obrázky ikon. Viz file_icon_path pro informaci o tom, jak jádro určuje, které ikony použít.

Můžete také nastavit proměnnou „file_icon_directory“ na cestu k vašim ikonám, jako file_icon_path funkce hledá cestu v této proměnné.

10
jhedstrom

Dvě další poznámky k tomuto:

  1. Není nutné kopírovat všechny výchozí soubory ikon do adresáře motivu.
  2. Pokud používáte vlastní ikonu, musí být vhodně pojmenována, aby byla nalezena.

Jako příklad jsem potřeboval použít vlastní ikonu pro soubor .bib (bibtex). Tento typ je mapován v file_default_mimetype_mapping () , ale výchozí je výchozí ikona textu, protože pro tento typ mime (text/x-bibtex) není specificky definována ikona.

Přepracoval jsem téma topic_file_icon () v template.php mého motivu, ale udělal jsem to tak, že cesta ikony je pouze upravena podle potřeby a nemusel jsem kopírovat výchozí adresář ikon do adresáře motivu:

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

Druhou věcí je, že musíte ikonu náležitě pojmenovat. Pokud stále používáte file_icon_url () , bude tento kód z této funkce určovat název souboru pro ikonu:

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

Takže v mém případě jsem potřeboval pojmenovat svůj soubor text-x-bibtex.png. Samozřejmě, pokud si přejete jen pojmenovat, co chcete (v tomto případě bibtex.png), můžete jednoduše nastavit název souboru ručně:

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

Buď bude fungovat, ale tato metoda vám umožní ponechat výchozí ikony tam, kde jsou, a pouze Tweak věci podle potřeby.

4
wonder95

Já a tregis dostal tento File Field Icons modul hotový před nějakou dobou. Snad to pomůže

Tento modul přidává možnost měnit výchozí ikony polí souboru. Můžete použít balíčky základních ikon (součástí tohoto modulu) nebo můžete definovat vlastní sadu ikon.

1
Rudá Maia

Ačkoli to není tak čisté jako některá z uvedených řešení, opravdu jednoduchým způsobem řešení je využití selektoru atributů „typ“ CSS3. Můžete tak rychle přidat vlastní ikonu jako obrázek na pozadí vašeho odkazu. Výsledek, že oba jsou propojeny s cílovým souborem. Potom můžete původní obrázek skrýt. Udělal jsem to, abych získal následující vzhled:

Screenshot of result

Toto je CSS, který jsem použil k dosažení výše uvedených výsledků:

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

V mém příkladu jsem zobrazoval pole souborů pomocí pohledů.

0
Paul Trotter

Můžete (obvykle) předzpracovat tematické funkce. Pokud tedy:

  1. Jsou v pořádku kopírování všech ikon do motivu a přepsání jedné nebo více ikon.
  2. Nestarejte se o přepsání theme_file_icon() ve vašem motivu.

Zkopírujte celý modules/file/icons adresář k vašemu tématu (použil jsem file_icons) a přidejte tuto funkci předběžného zpracování do šablony template.php vašeho motivu:

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

Mohli byste také provést podmíněné přepsání tímto způsobem ala @ div95, ale chtěl jsem udržet věci jednoduché.

0
Cottser