You are here

Drupal8下为同一主题设置不同风格

g089h515r806 的头像
Submitted by g089h515r806 on 星期六, 2019-11-16 09:23

作者:亚艾元技术部

我们在项目中,遇到一个客户提出需求,想在节假日,使用红色风格的样式,在其他日子,使用蓝色的风格。经过研究,在Drupal8里面,可以这样实现。

 

首先修改主题的设置,增加一个风格设置,这里使用了skin。

function mytheme_form_system_theme_settings_alter(&$form, $form_state) {
 
  $form['skin'] = array(
    '#type'          => 'select',
    '#title'         => t('网站风格'),
    '#options' => array(
          "" => t('请选择不同风格'),
       "blue" => t('蓝色'),
       "red" => t('红色(默认)'),
    ),
    '#default_value' => theme_get_setting('skin')
  );
 
}

 

这样允许后台可以选择。为了让我们的设置生效,我们实现钩子hook_preprocess_page,当主题的设置skin选择了蓝色时,我们加载我们定义好的蓝色的CSS库

function mytheme_preprocess_page(&$variables) {
  $skin = theme_get_setting('skin');
  if($skin == 'blue'){
    $variables['#attached']['library'][] = 'mytheme/blue';
  }
}

为了方便定义css,或者其他切换的难点,我们给body的class增加了一个'skin-blue'。

function mytheme_preprocess_html(&$variables) {
  $skin = theme_get_setting('skin');
  if($skin == 'blue'){
       $variables['attributes']['class'][] = 'skin-blue';
  }
 
}

 

这样,就比较完美的解决了Drupal8下面的同一主题下面,不同风格的切换。

 


论坛:

Drupal版本: