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.