Alterar favicon padrão programaticamente


15

Sei que posso carregar um favicon pela interface do usuário, mas existe uma maneira de definir o favicon padrão para o seu tema, de modo que quando alguém ativar o tema, o ícone padrão seja usado imediatamente?

Respostas:


12

Você pode colocar o favicon.icoarquivo na sua pasta de temas (no mesmo nível que o seu_theme.info) e ele será usado automaticamente.

Trabalhos para Drupal 6, 7 e 8.

Nota: O favicon é fortemente armazenado em cache por alguns navegadores; talvez você precise fazer comprimentos extras para ver o novo.


O favicon precisa estar na raiz do seu tema para ser escolhido. Ele não pode estar em uma pasta de imagens, por exemplo
Paul Sheldrake

Além disso, isso não funciona com png favicons, apenas o favicon.ico é encontrado. Portanto, converta para o ico antes de usar isso.
Donquixote 20/05

Note-se também que isso funcionará apenas para o respectivo tema. Por exemplo, suas páginas de administração não receberão o novo favicon, se você usar um tema de administração.
Donquixote 20/05

9

No Drupal 8, você pode usar o settings.ymlarquivo, localizado emthemes/YOURTHEME/config/install/YOURTHEME.settings.yml

Aqui está um exemplo para a personalização do logotipo do tema / favicon:

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

No entanto, se você alterar essas configurações enquanto o tema já estiver instalado na administração do Drupal, será necessário desinstalar o tema e reinstalá-lo. Caso contrário, mesmo que você limpe todos os caches, o Drupal não levará em consideração suas alterações.


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

Isso adiciona uma nova tag para o favicon, mas não substitui a antiga.
Donquixote

3

Método 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étodo 2 - via módulo personalizado

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

Veja hook_html_head_alter para mais informações.

Nota: Não é necessário listar a nova localização do favicon hook_html_head_alter(). Normalmente, eu o especifico em THEMENAME_preprocess_html()ou MODULENAME_init().


2

O código a seguir (em um módulo personalizado) substitui o favicon, em vez de adicionar outro.

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

Para o local do arquivo favicon, sugiro a pasta do módulo MYMODULE ou sites / default / favicon.ico. O objetivo é ter o arquivo no controle de versão e NÃO na pasta de arquivos públicos. Não queremos que seja gravável na Web.

Presumo que a maioria das pessoas use * .ico em vez de * .png, nesse caso, o 'tipo' pode manter seu valor original.


0

No Drupal 8, você deve definir o favicon como true em YOUR_THEME.settings.yml (localizado em themes / YOUR_THEME / config / install) e colocar seu arquivo favicon no diretório raiz do tema com o nome "favicon.ico"

features: 
   favicon:true
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.