Modifica la favicon predefinita a livello di codice


15

So di poter caricare una favicon tramite l'interfaccia utente, ma esiste un modo per impostare la favicon predefinita per il tuo tema, in modo che quando qualcuno abilita il tema, l'icona predefinita viene immediatamente utilizzata?

Risposte:


12

È possibile posizionare il favicon.iconella cartella del tema (allo stesso livello di your_theme.info) e verrà utilizzato automaticamente.

Funziona con Drupal 6, 7 e 8.

Nota: il favicon è pesantemente memorizzato nella cache da alcuni browser, potrebbe essere necessario andare oltre per vedere quello nuovo.


La favicon deve essere alla radice del tuo tema per essere raccolta. Ad esempio, non può trovarsi in una cartella di immagini
Paul Sheldrake,

Inoltre, questo non funziona con i favicon png, si trova solo favicon.ico. Quindi converti in ico prima di usarlo.
donquixote,

Va anche notato che questo funzionerà solo per il rispettivo tema. Ad esempio, le pagine di amministrazione non riceveranno la nuova favicon, se si utilizza un tema di amministrazione.
donquixote,

9

In Drupal 8, è possibile utilizzare il settings.ymlfile, situato inthemes/YOURTHEME/config/install/YOURTHEME.settings.yml

Ecco un esempio per la personalizzazione del logo / favicon del tema:

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

Tuttavia, se si modificano queste impostazioni mentre il tema è già installato nell'amministrazione Drupal, sarà necessario disinstallare il tema e reinstallarlo. Altrimenti, anche se cancelli tutte le cache, Drupal non prenderà in considerazione le tue modifiche.


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));
}
?>

Questo aggiunge un nuovo tag per la favicon, ma non sostituisce quello vecchio.
donquixote,

3

Metodo 1 - tramite 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);
}

Metodo 2: tramite modulo personalizzato

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

Vedi hook_html_head_alter per maggiori informazioni.

Nota: non è necessario elencare la nuova posizione favicon in hook_html_head_alter(). Di solito lo specifico in THEMENAME_preprocess_html()o MODULENAME_init().


2

Il seguente codice (in un modulo personalizzato) sostituisce il favicon, invece di aggiungerne uno aggiuntivo.

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

Per la posizione del file favicon suggerirei la cartella del modulo di MYMODULE o siti / default / favicon.ico. L'obiettivo è avere il file nel controllo versione e NON nella cartella dei file pubblici. Non vogliamo che sia scrivibile sul web.

Suppongo che molte persone useranno * .ico invece di * .png, in questo caso il 'tipo' può mantenere il suo valore originale.


0

In Drupal 8 devi impostare favicon su true in YOUR_THEME.settings.yml (che si trova in themes / YOUR_THEME / config / install) e posizionare il tuo file favicon nella directory principale del tema con il nome "favicon.ico"

features: 
   favicon:true
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.