以编程方式更改默认图标


15

我知道我可以通过用户界面加载收藏夹图标,但是有没有办法为您的主题设置默认收藏夹图标,以便当有人启用主题时,立即使用默认图标?

Answers:


12

您可以将放置favicon.ico在主题文件夹中(与your_theme.info处于同一级别),它将被自动使用。

适用于Drupal 6、7和8。

注意:该图标被某些浏览器大量缓存,您可能需要花更多的时间才能看到新的图标。


网站图标必须位于主题的根目录才能被拾取。例如,它不能位于图像文件夹中
Paul Sheldrake 2012年

此外,这不适用于png图标,仅找到favicon.ico。因此,在使用此功能之前请先转换为ico。
donquixote 2015年

还应注意,这仅适用于相应主题。例如,如果您使用管理主题,则您的管理页面将不会获得新的图标。
donquixote 2015年

9

在Drupal 8中,您可以使用settings.yml位于以下位置的文件themes/YOURTHEME/config/install/YOURTHEME.settings.yml

这是主题徽标/网站图标自定义的示例:

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

但是,如果在Drupal管理中已经安装了主题的情况下更改了这些设置,则需要卸载主题然后重新安装。否则,即使您清除了所有缓存,Drupal也不会考虑您的更改。


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

这将为该图标添加一个新标签,但不会替换旧标签。
donquixote13年

3

方法1-通过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);
}

方法2-通过自定义模块

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

有关更多信息,请参见hook_html_head_alter

注意:不需要在中列出新的图标图标位置hook_html_head_alter()。我通常在THEMENAME_preprocess_html()或中指定它MODULENAME_init()


2

以下代码(在自定义模块中)替换了图标图标,而不是添加其他图标。

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

对于favicon文件位置,我建议使用MYMODULE的模块文件夹,或sites / default / favicon.ico。目标是使文件处于版本控制中,而不是位于公共文件文件夹中。我们不希望它是可写网络的。

我假设大多数人将使用* .ico代替* .png,在这种情况下,“类型”可以保留其原始值。


0

在Drupal 8中,必须在YOUR_THEME.settings.yml(位于themes / YOUR_THEME / config / install中)中将favicon设置为true,并将favicon文件放置在主题根目录中,并命名为“ favicon.ico”。

features: 
   favicon:true
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.