Modifier le favicon par défaut par programme

15

Je sais que je peux charger un favicon via l'interface utilisateur, mais existe-t-il un moyen de définir le favicon par défaut pour votre thème, de sorte que lorsque quelqu'un active le thème, l'icône par défaut est immédiatement utilisée?

Maciej
la source

Réponses:

12

Vous pouvez placer le favicon.icodans votre dossier de thème (au même niveau que your_theme.info) et il sera utilisé automatiquement.

Fonctionne pour Drupal 6, 7 & 8.

Remarque: Le favicon est fortement mis en cache par certains navigateurs, vous devrez peut-être aller plus loin pour voir le nouveau.

rocketeerbkw
la source
Le favicon doit être à la racine de votre thème pour être récupéré. Il ne peut pas être dans un dossier d'images par exemple
Paul Sheldrake
En outre, cela ne fonctionne pas avec les favicons png, seul favicon.ico est trouvé. Alors convertissez-vous en ico avant de l'utiliser.
donquixote
Il convient également de noter que cela ne fonctionnera que pour le thème respectif. Par exemple, vos pages d'administration ne recevront pas le nouveau favicon, si vous utilisez un thème d'administration.
donquixote
9

Dans Drupal 8, vous pouvez utiliser le settings.ymlfichier, situé àthemes/YOURTHEME/config/install/YOURTHEME.settings.yml

Voici un exemple de personnalisation de logo / favicon de thème:

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

Cependant, si vous modifiez ces paramètres alors que votre thème est déjà installé dans l'administration Drupal, vous devrez désinstaller votre thème puis le réinstaller. Sinon, même si vous supprimez tous les caches, Drupal ne prendra pas en compte vos modifications.

amanteaux
la source
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
la source
Cela ajoute une nouvelle balise pour le favicon, mais ne remplace pas l'ancienne.
donquixote
3

Méthode 1 - via 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);
}

Méthode 2 - via un module personnalisé

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

Voir hook_html_head_alter pour plus d'informations.

Remarque: Il n'est pas nécessaire de répertorier le nouvel emplacement de favicon dans hook_html_head_alter(). Je le spécifie généralement dans THEMENAME_preprocess_html()ou MODULENAME_init().

timofey.com
la source
2

Le code suivant (dans un module personnalisé) remplace le favicon, au lieu d'en ajouter un supplémentaire.

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

Pour l'emplacement du fichier favicon, je suggérerais soit le dossier du module de MYMODULE, soit sites / default / favicon.ico. Le but est d'avoir le fichier sous contrôle de version, et NON dans le dossier des fichiers publics. Nous ne voulons pas qu'il soit accessible en écriture sur le Web.

Je suppose que la plupart des gens utiliseront * .ico au lieu de * .png, dans ce cas, le «type» peut conserver sa valeur d'origine.

don Quichotte
la source
0

Dans Drupal 8, vous devez définir favicon sur true dans YOUR_THEME.settings.yml (situé dans themes / YOUR_THEME / config / install) et placer votre fichier favicon dans le répertoire racine de votre thème avec le nom "favicon.ico"

features: 
   favicon:true
vlledo
la source