Thay đổi favicon mặc định theo chương trình


14

Tôi biết tôi có thể tải một favicon qua giao diện người dùng, nhưng có cách nào để thiết lập favicon mặc định cho chủ đề của bạn, để khi ai đó kích hoạt chủ đề, biểu tượng mặc định sẽ được sử dụng ngay lập tức?

Câu trả lời:


12

Bạn có thể đặt favicon.icothư mục chủ đề của mình (cùng cấp với your_theme.info) và nó sẽ được sử dụng tự động.

Hoạt động cho Drupal 6, 7 & 8.

Lưu ý: Favicon được lưu trữ rất nhiều bởi một số trình duyệt, bạn có thể cần phải đi thêm độ dài để xem cái mới.


Các favicon cần phải nằm trong thư mục gốc của chủ đề của bạn để được chọn. Nó không thể có trong một thư mục hình ảnh chẳng hạn
Paul Sheldrake

Ngoài ra, điều này không hoạt động với png favicon, chỉ tìm thấy favicon.ico. Vì vậy, chuyển đổi sang ico trước khi bạn sử dụng này.
donquixote

Cũng cần lưu ý rằng điều này sẽ chỉ hoạt động cho chủ đề tương ứng. Ví dụ: các trang quản trị của bạn sẽ không nhận được favicon mới, nếu bạn sử dụng chủ đề quản trị.
donquixote

9

Trong Drupal 8, bạn có thể sử dụng settings.ymltệp, nằm ởthemes/YOURTHEME/config/install/YOURTHEME.settings.yml

Dưới đây là một ví dụ cho tùy chỉnh logo / favicon chủ đề:

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

Tuy nhiên, nếu bạn thay đổi các cài đặt này trong khi chủ đề của bạn đã được cài đặt trong quản trị Drupal, bạn sẽ cần gỡ cài đặt chủ đề của mình và sau đó cài đặt lại. Khác, ngay cả khi bạn xóa tất cả bộ nhớ cache, Drupal sẽ không xem xét các thay đổi của bạn.


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

Điều này thêm một thẻ mới cho favicon, nhưng không thay thế thẻ cũ.
donquixote

2

Đoạn mã sau (trong một mô-đun tùy chỉnh) thay thế favicon, thay vì thêm một mã bổ sung.

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

Đối với vị trí tệp favicon, tôi sẽ đề xuất thư mục mô-đun của MYMODULE hoặc các trang web / default / favicon.ico. Mục tiêu là để tệp trong kiểm soát phiên bản và KHÔNG trong thư mục tệp công khai. Chúng tôi không muốn nó có thể ghi được trên web.

Tôi cho rằng hầu hết mọi người sẽ sử dụng * .ico thay vì * .png, trong trường hợp này, 'loại' có thể giữ giá trị ban đầu của nó.


2

Phương pháp 1 - thông qua 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);
}

Phương pháp 2 - thông qua mô-đun tùy chỉnh

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

Xem hook_html_head_alter để biết thêm thông tin.

Lưu ý: Không bắt buộc phải liệt kê vị trí favicon mới trong hook_html_head_alter(). Tôi thường chỉ định nó trong THEMENAME_preprocess_html()hoặc MODULENAME_init().


0

Trong Drupal 8, bạn phải đặt favicon thành true trong YOU_THEME.sinstall.yml (nằm ở chủ đề / YOU_THEME / config / install) và đặt tệp favicon của bạn vào thư mục gốc của chủ đề với tên "favicon.ico"

features: 
   favicon:true
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.