เปลี่ยนค่าเริ่มต้น favicon โดยทางโปรแกรม


15

ฉันรู้ว่าฉันสามารถโหลด favicon ได้แม้ว่าส่วนติดต่อผู้ใช้ แต่มีวิธีการตั้งค่า favicon เริ่มต้นสำหรับธีมของคุณดังนั้นเมื่อมีคนเปิดใช้งานธีมไอคอนเริ่มต้นจะถูกใช้ทันทีหรือไม่

คำตอบ:


12

คุณสามารถวางfavicon.icoในโฟลเดอร์ธีมของคุณ (ในระดับเดียวกับ your_theme.info) และมันจะถูกใช้โดยอัตโนมัติ

ทำงานได้กับ Drupal 6, 7 และ 8

หมายเหตุ: เบราว์เซอร์บางตัวถูกแคชไว้อย่างหนักโดยเบราว์เซอร์คุณอาจต้องไปที่ความยาวเพิ่มเติมเพื่อดูเบราว์เซอร์ใหม่


favicon ต้องอยู่ในรูทของธีมของคุณเพื่อรับ ไม่สามารถอยู่ในโฟลเดอร์รูปภาพได้
Paul Sheldrake

นอกจากนี้สิ่งนี้ไม่ทำงานกับ png favicons เท่านั้นที่พบ favicon.ico ดังนั้นแปลงเป็น ico ก่อนที่คุณจะใช้
donquixote

ควรสังเกตว่าสิ่งนี้จะใช้ได้เฉพาะกับธีมที่เกี่ยวข้อง เช่นหน้าผู้ดูแลระบบของคุณจะไม่ได้รับ favicon ใหม่หากคุณใช้ธีมการดูแลระบบ
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));
}
?>

สิ่งนี้จะเพิ่มแท็กใหม่สำหรับ 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สำหรับข้อมูลเพิ่มเติม

หมายเหตุ: มันไม่จำเป็นต้องแสดงที่ตั้งของ favicon hook_html_head_alter()ใหม่ ฉันมักจะระบุว่าในหรือTHEMENAME_preprocess_html()MODULENAME_init()


2

รหัสต่อไปนี้ (ในโมดูลที่กำหนดเอง) จะแทนที่ favicon แทนการเพิ่มรหัสอื่น

/**
 * 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 เป็นจริงใน YOUR_THEME.settings.yml (อยู่ที่ธีม / YOUR_THEME / config / ติดตั้ง) และวางไฟล์ favicon ของคุณไว้ที่ไดเรกทอรีรูทธีมของคุณด้วยชื่อ "favicon.ico"

features: 
   favicon:true
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.