프로그래밍 방식으로 기본 즐겨 찾기 아이콘 변경


15

사용자 인터페이스를 통해 즐겨 찾기 아이콘을로드 할 수 있지만 테마에 기본 즐겨 찾기 아이콘을 설정하여 누군가 테마를 사용하도록 설정하면 기본 아이콘이 즉시 사용되도록하는 방법이 있습니까?

답변:


12

당신은 배치 할 수 있습니다 favicon.ico테마 폴더에 (your_theme.info와 같은 수준) 및 자동으로 사용됩니다.

Drupal 6, 7 및 8에서 작동합니다.

참고 : 일부 브라우저 는 즐겨 찾기 아이콘을 많이 캐시하므로 새 브라우저를 보려면 추가 길이로 이동해야 할 수도 있습니다.


즐겨 찾기 아이콘을 선택하려면 테마의 루트에 있어야합니다. 예를 들어 이미지 폴더에있을 수 없습니다
Paul Sheldrake

또한 이것은 png 즐겨 찾기 아이콘에서는 작동하지 않으며 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은 변경 사항을 고려하지 않습니다.


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-via 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를 제안합니다. 목표는 파일을 버전 제어에 있고 공용 파일 폴더에는없는 것입니다. 우리는 그것이 웹 쓰기가되기를 원하지 않습니다.

대부분의 사람들은 * .png 대신 * .ico를 사용한다고 가정합니다.이 경우 'type'은 원래 값을 유지할 수 있습니다.


0

Drupal 8에서는 your_THEME.settings.yml (themes / YOUR_THEME / config / install에 위치)에서 favicon을 true로 설정하고 이름이 "favicon.ico"인 테마 루트 디렉토리에 favicon 파일을 넣어야합니다.

features: 
   favicon:true
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.