Réponses:
Vous pouvez placer le favicon.ico
dans 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.
Dans Drupal 8, vous pouvez utiliser le settings.yml
fichier, 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.
<?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));
}
?>
/**
* 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);
}
/**
* 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()
.
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.