Ubah favicon default secara terprogram

15

Saya tahu saya dapat memuat favicon melalui antarmuka pengguna, tetapi apakah ada cara untuk mengatur favicon default untuk tema Anda, sehingga ketika seseorang mengaktifkan tema, ikon default segera digunakan?

Maciej
sumber

Jawaban:

12

Anda dapat menempatkannya favicon.icodi folder tema Anda (pada tingkat yang sama dengan your_theme.info) dan itu akan digunakan secara otomatis.

Bekerja untuk Drupal 6, 7 & 8.

Catatan: Favicon sangat di- cache oleh beberapa browser, Anda mungkin perlu berusaha lebih keras untuk melihat yang baru.

rocketeerbkw
sumber
Favicon harus berada di root tema Anda untuk dijemput. Misalnya
Paul Sheldrake
Juga, ini tidak berfungsi dengan favicons png, hanya favicon.ico yang ditemukan. Jadi konversikan ke ico sebelum Anda menggunakan ini.
donquixote
Perlu juga dicatat bahwa ini hanya akan berfungsi untuk tema masing-masing. Misalnya, halaman admin Anda tidak akan mendapatkan favicon baru, jika Anda menggunakan tema administrasi.
donquixote
9

Di Drupal 8, Anda dapat menggunakan settings.ymlfile yang terletak dithemes/YOURTHEME/config/install/YOURTHEME.settings.yml

Berikut adalah contoh untuk kustomisasi logo tema / favicon:

logo:
  use_default: false
  path: 'themes/YOURTHEME/logo.png'
favicon:
  use_default: false
  path: 'themes/YOURTHEME/favicon.png'

Namun, jika Anda mengubah pengaturan ini sementara tema Anda sudah diinstal dalam administrasi Drupal, Anda perlu menghapus instalasi tema Anda dan kemudian menginstalnya kembali. Lain, bahkan jika Anda menghapus semua cache, Drupal tidak akan mempertimbangkan perubahan Anda.

amanteaux
sumber
5
<?php
function hook_page_alter(&$pages) {  
  $favicon = "http://example.com/sites/default/files/favicon.ico";
  $type = theme_get_setting('favicon_mimetype');
  drupal_add_html_head_link(array('rel' => 'shortcut icon', 'href' => drupal_strip_dangerous_protocols($favicon), 'type' => $type));
}
?>
Sivaji
sumber
Ini menambahkan tag baru untuk favicon, tetapi tidak menggantikan yang lama.
donquixote
3

Metode 1 - melalui template.php

/**
 * Implements hook_html_head_alter().
 */
function MYTHEME_html_head_alter(&$head_elements) {

  // Remove existing favicon location
  global $base_url;
  $default_favicon_element = 'drupal_add_html_head_link:shortcut icon:' . $base_url . '/misc/favicon.ico';
  unset($head_elements[$default_favicon_element]);

  // Specify new favicon location
  $element = array(
    'rel' => 'shortcut icon',
    'href' => '/path-to-favicon/favicon.ico',
  );
  drupal_add_html_head_link($element);
}

Metode 2 - melalui modul khusus

/**
 * Implements hook_html_head_alter().
 */
  // Remove existing favicon location
 function MODULENAME_html_head_alter(&$head_elements) {
   global $base_url;
   $default_favicon_element = 'drupal_add_html_head_link:shortcut icon:' . $base_url . '/misc/favicon.ico';
   unset($head_elements[$default_favicon_element]);

  // Specify new favicon location
  $element = array(
    'rel' => 'shortcut icon',
    'href' => '/path-to-favicon/favicon.ico',
  );
  drupal_add_html_head_link($element);
 }

Lihat hook_html_head_alter untuk info lebih lanjut.

Catatan: Tidak perlu mencantumkan lokasi favicon baru di hook_html_head_alter(). Saya biasanya menentukannya di THEMENAME_preprocess_html()atau MODULENAME_init().

timofey.com
sumber
2

Kode berikut (dalam modul khusus) menggantikan favicon, alih-alih menambahkan yang lain.

/**
 * Implements hook_html_head_alter().
 *
 * Replaces the favicon.
 *
 * @param array $head_elements
 */
function MYMODULE_html_head_alter(&$head_elements) {
  foreach ($head_elements as $key => $element) {
    if (1
      // The array key can vary, depending on the original favicon setting.
      && 0 === strpos($key, 'drupal_add_html_head_link:shortcut icon:')
      && !empty($element['#attributes']['href'])
      && 'shortcut icon' === $element['#attributes']['rel']
    ) {
      // Make sure to use a file that actually exists!
      $favicon_path = drupal_get_path('module', 'MYMODULE') . '/img/favicon_32.png';
      $favicon_url = file_create_url($favicon_path);
      // If the favicon path came from a user-provided setting, we would also need drupal_strip_dangerous_protocols().
      $element['#attributes']['href'] = $favicon_url;
      $element['#attributes']['type'] = 'image/png';
      $head_elements[$key] = $element;
    }
  }
}

Untuk lokasi file favicon saya akan menyarankan folder modul MYMODULE, atau situs / default / favicon.ico. Tujuannya adalah untuk memiliki file dalam kontrol versi, dan BUKAN di folder file publik. Kami tidak ingin itu bisa ditulis web.

Saya berasumsi kebanyakan orang akan menggunakan * .ico daripada * .png, dalam hal ini 'type' dapat mempertahankan nilai aslinya.

donquixote
sumber
0

Di Drupal 8 Anda harus mengatur favicon menjadi true di YOUR_THEME.settings.yml (terletak di themes / YOUR_THEME / config / install) dan letakkan file favicon Anda di direktori root tema Anda dengan nama "favicon.ico"

features: 
   favicon:true
vlledo
sumber