ユーザーインターフェースからファビコンをロードできることはわかっていますが、テーマのデフォルトのファビコンを設定して、誰かがテーマを有効にするとデフォルトのアイコンがすぐに使用されるようにする方法はありますか?
favicon.ico
(your_theme.infoと同じレベルの)テーマフォルダー内にあり、自動的に使用されます。
Drupal 6、7、8で機能します。
注:ファビコンは重い一部のブラウザーでキャッシュされます。新しいファビコンを表示するには、追加の長さに移動する必要がある場合があります。
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は変更を考慮しません。
<?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));
}
?>
_/**
* 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);
}
_
_/**
* 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()
で指定します。
次のコード(カスタムモジュール内)は、ファビコンを追加する代わりに、ファビコンを置き換えます。
/**
* 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を使用すると思います。この場合、「タイプ」は元の値を維持できます。
Drupal 8では、YOUR_THEME.settings.yml(themes/YOUR_THEME/config/installにあります)でfaviconをtrueに設定し、faviconファイルをテーマルートディレクトリに「favicon」という名前で配置する必要があります。 .ico」
features:
favicon:true