Изменить значок по умолчанию программно

15

Я знаю, что могу загрузить значок через пользовательский интерфейс, но есть ли способ установить значок по умолчанию для вашей темы, чтобы, когда кто-то включал тему, сразу использовался значок по умолчанию?

Маца
источник

Ответы:

12

Вы можете поместить его favicon.icoв папку вашей темы (на том же уровне, что и your_theme.info), и она будет использоваться автоматически.

Работает на Drupal 6, 7 и 8.

Примечание. Фавикон в некоторых браузерах сильно кешируется. Возможно, вам придется перейти на дополнительные длины, чтобы увидеть новый.

rocketeerbkw
источник
Фавикон должен быть в корне вашей темы. Это не может быть в папке изображений, например
Пол Шелдрейк
Кроме того, это не работает с png favicons, найден только favicon.ico. Так что конвертируйте в ico, прежде чем использовать это.
Donquixote
Следует также отметить, что это будет работать только для соответствующей темы. Например, ваши страницы администратора не получат новый значок, если вы используете тему администрирования.
Donquixote
9

В Drupal 8 вы можете использовать settings.yml файл, расположенный по адресуthemes/YOURTHEME/config/install/YOURTHEME.settings.yml

Вот пример для настройки логотипа темы / favicon:

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

Однако, если вы измените эти настройки, в то время как ваша тема уже установлена ​​в администрировании Drupal, вам нужно будет удалить ее, а затем переустановить. Иначе, даже если вы очистите все кэши, Drupal не примет во внимание ваши изменения.

amanteaux
источник
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));
}
?>
Шиваджи
источник
Это добавляет новый тег для favicon, но не заменяет старый.
Donquixote
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().

timofey.com
источник
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 вы должны установить favicon в true в YOUR_THEME.settings.yml (находится по адресу themes / YOUR_THEME / config / install) и поместить файл favicon в корневой каталог вашей темы с именем «favicon.ico».

features: 
   favicon:true
vlledo
источник