Ändern Sie das Standard-Favicon programmgesteuert

14

Ich weiß, dass ich ein Favicon über die Benutzeroberfläche laden kann, aber gibt es eine Möglichkeit, das Standard-Favicon für Ihr Thema festzulegen, sodass das Standardsymbol sofort verwendet wird, wenn jemand das Thema aktiviert?

Maciej
quelle

Antworten:

12

Sie können das favicon.icoin Ihrem Theme-Ordner ablegen (auf der gleichen Ebene wie your_theme.info) und es wird automatisch verwendet.

Funktioniert für Drupal 6, 7 und 8.

Hinweis: Das Favicon wird von einigen Browsern stark zwischengespeichert. Möglicherweise müssen Sie zusätzliche Längen angeben, um das neue zu sehen.

rocketeerbkw
quelle
Das Favicon muss sich in der Wurzel Ihres Themas befinden, um aufgegriffen zu werden. Es kann zum Beispiel nicht in einem Bilderordner sein
Paul Sheldrake
Dies funktioniert auch nicht mit PNG-Favicons, es wird nur favicon.ico gefunden. Also konvertieren Sie zu ICO, bevor Sie dies verwenden.
donquixote
Es ist auch zu beachten, dass dies nur für das jeweilige Thema funktioniert. ZB erhalten Ihre Admin-Seiten nicht das neue Favicon, wenn Sie ein Administrationsthema verwenden.
donquixote
9

In Drupal 8 können Sie die settings.ymlDatei unter verwendenthemes/YOURTHEME/config/install/YOURTHEME.settings.yml

Hier ist ein Beispiel für die Anpassung von Themenlogos / Favoriten:

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

Wenn Sie diese Einstellungen jedoch ändern, während Ihr Design bereits in der Drupal-Administration installiert ist, müssen Sie das Design deinstallieren und anschließend neu installieren. Andernfalls berücksichtigt Drupal Ihre Änderungen nicht, auch wenn Sie alle Caches löschen.

amanteaux
quelle
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
quelle
Dies fügt ein neues Tag für das Favicon hinzu, ersetzt jedoch nicht das alte.
donquixote
2

Der folgende Code (in einem benutzerdefinierten Modul) ersetzt das Favicon, anstatt ein zusätzliches hinzuzufügen.

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

Als Speicherort für die Favicon-Datei würde ich entweder den Modulordner von MYMODULE oder sites / default / favicon.ico vorschlagen. Das Ziel ist es, die Datei in der Versionskontrolle und NICHT im öffentlichen Ordner zu haben. Wir möchten nicht, dass es im Web beschreibbar ist.

Ich gehe davon aus, dass die meisten Benutzer * .ico anstelle von * .png verwenden. In diesem Fall kann der 'Typ' seinen ursprünglichen Wert beibehalten.

donquixote
quelle
2

Methode 1 - über 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);
}

Methode 2 - über benutzerdefiniertes Modul

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

Sehen Informationen finden hook_html_head_alter .

Hinweis: Es ist nicht erforderlich, den neuen Favicon-Speicherort in aufzulisten hook_html_head_alter(). Ich gebe es normalerweise in THEMENAME_preprocess_html()oder an MODULENAME_init().

timofey.com
quelle
0

In Drupal 8 müssen Sie favicon in YOUR_THEME.settings.yml (unter themes / YOUR_THEME / config / install) auf true setzen und Ihre Favicon-Datei in Ihrem Theme-Stammverzeichnis mit dem Namen "favicon.ico" ablegen.

features: 
   favicon:true
vlledo
quelle