Програму змінити за замовчуванням програмно


15

Я знаю, що я можу завантажити фавікон через інтерфейс користувача, але чи є спосіб встановити фавікон за замовчуванням для вашої теми, щоб коли хтось включив цю тему, піктограма за замовчуванням негайно використовується?

Відповіді:


12

Ви можете розмістити favicon.icoпапку в темі (на тому ж рівні, що і your_theme.info), і вона буде використана автоматично.

Працює для Drupal 6, 7 та 8.

Примітка. У деяких веб-переглядачах фавікон сильно кешований, можливо, вам доведеться перейти до додаткової довжини, щоб переглянути новий.


Фавікон повинен бути в корені вашої теми, щоб отримати вибір. Наприклад, це не може бути в папці із зображеннями
— Пол Шелдрейк,

Також це не працює з файлами png, знайдено лише favicon.ico. Тому перетворіть на ico, перш ніж використовувати це.
— donquixote

Слід також зазначити, що це буде працювати лише для відповідної теми. Наприклад, ваші сторінки адміністратора не отримають новий фавікон, якщо ви використовуєте тему адміністрування.
— donquixote

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

Це додає новий тег для фавікону, але не замінює старого.
— 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);
 }

Щоб отримати докладнішу інформацію, перегляньте сторінку_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, або сайти / default / favicon.ico. Мета - мати файл у контролі версій, а НЕ у папці загальнодоступних файлів. Ми не хочемо, щоб це було доступним для запису в Інтернеті.

Я припускаю, що більшість людей використовуватиме * .ico замість * .png, у цьому випадку 'type' може зберегти своє початкове значення.


0

У Drupal 8 ви повинні встановити favicon на true у YOUR_THEME.settings.yml (розміщений у темах / YOUR_THEME / config / install) і помістити файл favicon у кореневий каталог теми з назвою "favicon.ico"

features: 
   favicon:true
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.