You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Drupal 7:为Bootstrap子主题添加第二个Logo配置选项

实现Drupal Bootstrap子主题添加第二个Logo上传选项的方法

没问题,我帮你搞定这个需求!要在Drupal Bootstrap子主题里添加第二个Logo的上传选项,同时创建可调用的$second_logo变量,你可以按下面这几步来操作:

第一步:修改主题设置表单,添加第二个Logo上传字段

在你的子主题的.theme文件(比如你的子主题叫my_bootstrap,那文件就是my_bootstrap.theme)里添加以下代码,记得把所有YOUR_SUBTHEME_NAME替换成你的子主题实际名称:

/**
 * Implements hook_form_FORM_ID_alter().
 */
function YOUR_SUBTHEME_NAME_form_system_theme_settings_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
  // 获取当前激活的主题名称
  $theme = \Drupal::theme()->getActiveTheme()->getName();

  // 添加第二个Logo上传字段,调整权重让它出现在原Logo和站点名称之间
  $form['logo']['second_logo'] = [
    '#type' => 'managed_file',
    '#title' => t('Second Logo'),
    '#description' => t('上传你的第二个站点Logo,支持png/jpg/jpeg/gif/svg格式,最大2MB。'),
    '#default_value' => theme_get_setting('second_logo', $theme),
    '#upload_location' => 'public://logos/',
    '#upload_validators' => [
      'file_validate_extensions' => ['png jpg jpeg gif svg'],
      'file_validate_size' => [2 * 1024 * 1024],
    ],
    '#weight' => -9, // 原Logo的权重通常是-10,设为-9就能插在它和站点名称之间
  ];

  // 添加提交处理函数,确保上传的文件被标记为永久保存
  $form['#submit'][] = 'YOUR_SUBTHEME_NAME_second_logo_submit';
}

/**
 * 第二个Logo字段的提交处理函数
 */
function YOUR_SUBTHEME_NAME_second_logo_submit($form, \Drupal\Core\Form\FormStateInterface $form_state) {
  $second_logo_fid = $form_state->getValue('second_logo');
  if (!empty($second_logo_fid)) {
    $file = \Drupal\file\Entity\File::load($second_logo_fid[0]);
    if ($file) {
      $file->setPermanent();
      $file->save();
    }
  }
}

第二步:初始化主题设置默认值(可选但推荐)

在子主题的settings.php文件里(如果没有就新建一个)添加一行代码,设置第二个Logo的默认值为空:

$settings['second_logo'] = '';

第三步:添加预处理函数,传递Logo变量到模板

同样在.theme文件里添加页面预处理函数,把第二个Logo的URL和alt文本传到模板变量中:

/**
 * Implements hook_preprocess_page().
 */
function YOUR_SUBTHEME_NAME_preprocess_page(&$variables) {
  $theme = \Drupal::theme()->getActiveTheme()->getName();
  $second_logo_fid = theme_get_setting('second_logo', $theme);
  
  if (!empty($second_logo_fid)) {
    $file = \Drupal\file\Entity\File::load($second_logo_fid[0]);
    if ($file) {
      $variables['second_logo'] = [
        'url' => file_create_url($file->getFileUri()),
        'alt' => t('Second Site Logo'),
      ];
    }
  }
}

现在你可以在需要的模板文件(比如page.html.twig)里调用second_logo变量了,示例代码:

{% if second_logo %}
  <img src="{{ second_logo.url }}" alt="{{ second_logo.alt }}" class="second-logo" />
{% endif %}

关键注意事项

  • 清空缓存:修改.theme文件后,一定要在Drupal后台清空所有缓存,否则代码不会生效。
  • 目录权限:确保Drupal有创建public://logos/目录的权限,如果目录不存在,Drupal会尝试自动创建,若权限不足则会上传失败。
  • 权重调整:如果第二个Logo的位置不对,可以微调#weight的值,数值越小越靠前。

内容的提问来源于stack exchange,提问作者Albert Lazaro de Lara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:16:17