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'), ]; } } }
第四步:在模板中调用第二个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
相关产品推荐
相关产品推荐

