プログラムでデフォルトのファビコンを変更する


14

ユーザーインターフェイスを介してファビコンを読み込むことができますが、テーマのデフォルトのファビコンを設定する方法はありますか?

回答:


12

あなたは置くことができますfavicon.ico(your_theme.infoと同じレベルで)あなたのテーマフォルダに、それが自動的に使用されます。

Drupal 6、7、および8で動作します。

注:ファビコンは一部のブラウザーによって大量にキャッシュされます。新しいブラウザーを表示するには、余分な長さを表示する必要がある場合があります。


ファビコンをピックアップするには、テーマのルートにある必要があります。それは、例えば、フォルダの画像にすることはできません
ポール・シェルドレイク

また、これはpngファビコンでは機能せず、favicon.icoのみが見つかります。したがって、これを使用する前にicoに変換してください。
ドンキホーテ

これは、それぞれのテーマでのみ機能することにも注意してください。たとえば、管理テーマを使用している場合、管理ページは新しいファビコンを取得しません。
ドンキホーテ

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

これにより、ファビコンに新しいタグが追加されますが、古いタグは置き換えられません。
ドンキホーテ

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

ファビコンファイルの場所については、MYMODULEのモジュールフォルダーか、sites / default / favicon.icoのいずれかをお勧めします。目標は、ファイルをパブリックファイルフォルダーではなく、バージョン管理することです。Webで書き込み可能にしたくないのです。

ほとんどの人が* .pngの代わりに* .icoを使用すると想定しています。この場合、「タイプ」は元の値を保持できます。


2

方法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を参照してください。

注:新しいファビコンの場所をにリストする必要はありませんhook_html_head_alter()。通常、THEMENAME_preprocess_html()またはで指定しますMODULENAME_init()


0

Drupal 8では、YOUR_THEME.settings.yml(themes / YOUR_THEME / config / installにあります)でファビコンをtrueに設定し、「favicon.ico」という名前でファビコンファイルをテーマのルートディレクトリに配置する必要があります。

features: 
   favicon:true
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.