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


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.