Zmień domyślnie favicon programowo

15

Wiem, że mogę załadować favicon za pośrednictwem interfejsu użytkownika, ale czy istnieje sposób na ustawienie domyślnego favicon dla Twojego motywu, więc gdy ktoś włączy motyw, natychmiast zostanie użyta domyślna ikona?

Maciej
źródło

Odpowiedzi:

12

Możesz umieścić go favicon.icow folderze motywu (na tym samym poziomie, co twoja_theme.info), a zostanie on użyty automatycznie.

Działa dla Drupal 6, 7 i 8.

Uwaga: Favicon jest mocno buforowany przez niektóre przeglądarki, może być konieczne zwiększenie długości, aby zobaczyć nową.

rocketeerbkw
źródło
Favicon musi znajdować się w katalogu głównym motywu, aby zostać odebranym. Na przykład nie może znajdować się w folderze zdjęć
Paul Sheldrake
To również nie działa z favicons png, znaleziono tylko favicon.ico. Dlatego przed użyciem należy przekonwertować na ico.
donquixote
Należy również zauważyć, że będzie to działać tylko w przypadku danego tematu. Np. Strony administracyjne nie otrzymają nowego favicon, jeśli użyjesz motywu administracyjnego.
donquixote
9

W Drupal 8 możesz użyć settings.ymlpliku znajdującego się pod adresemthemes/YOURTHEME/config/install/YOURTHEME.settings.yml

Oto przykład dostosowania motywu logo / favicon:

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

Jeśli jednak zmienisz te ustawienia, podczas gdy Twój motyw jest już zainstalowany w administracji Drupala, będziesz musiał go odinstalować, a następnie zainstalować ponownie. W przeciwnym razie, nawet jeśli wyczyścisz wszystkie skrzynki, Drupal nie weźmie pod uwagę twoich zmian.

amanteaux
źródło
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
źródło
Dodaje to nowy znacznik do ulubionych, ale nie zastępuje starego.
donquixote
3

Metoda 1 - poprzez 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);
}

Metoda 2 - za pomocą niestandardowego modułu

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

Aby uzyskać więcej informacji, zobacz hook_html_head_alter .

Uwaga: Nie jest wymagane podanie nowej lokalizacji ulubionych hook_html_head_alter(). Zazwyczaj określam to w THEMENAME_preprocess_html()lub MODULENAME_init().

timofey.com
źródło
2

Poniższy kod (w module niestandardowym) zastępuje ikonę ulubionych, zamiast dodawać dodatkowy.

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

Dla lokalizacji pliku favicon sugerowałbym albo folder modułu MYMODULE, albo strony / default / favicon.ico. Celem jest, aby plik był pod kontrolą wersji, a NIE w folderze plików publicznych. Nie chcemy, aby można go było zapisywać w Internecie.

Zakładam, że większość ludzi użyje * .ico zamiast * .png, w tym przypadku „typ” może zachować swoją pierwotną wartość.

Don Kichot
źródło
0

W Drupal 8 musisz ustawić wartość favicon na true w YOUR_THEME.settings.yml (znajduje się w themes / YOUR_THEME / config / install) i umieścić plik favicon w katalogu głównym motywu o nazwie „favicon.ico”

features: 
   favicon:true
Vlledo
źródło