Drupal常用模块

主要涵盖Drupal8,9,10下面的常用模块,包括核心模块,重要的第3方模块,还有亚艾元自己开发的模块介绍。

Drupal版本:

masquerade实现用户切换

有时候正式站点上线了以后,想要切换一下指定用户,查看一下效果,如果创建一个测试帐号,录入测试数据,在正式站点也不方便。对于Drupal用户来说,此时有一个方便的模块可以帮您实现这样的功能,这就是masquerade模块,它允许具有权限的用户,直接切换到给定用户,以给定用户浏览相关功能。除了这个模块以外,Drupal8,9下面还有userswitch模块提供了同样的功能。我们这里介绍masquerade模块。

 

Masquerade英文释义:

[ˌmæskəˈreɪd]

n.伪装;化装舞会;假面舞会

v.冒充

   masquerade模块下载地址:

https://www.drupal.org/project/masquerade

  

   1,下载,解压,上传到modules目录,然后安装这个模块。

2,安装后,在区块管理界面,添加masquerade区块到管理主题的内容区域,

3,(可选)将区块的可见性设置,页面限制在/admin/people,这样在用户管理页面可以看到它。

4,这个时候可以看到这个区块,这个区块是一个表单区块:


   在这里输入用户名,点击切换按钮。

 masquerade.jpg

 

masquerade模块关键代码解读:

protected function switchUser(UserInterface $user) {
    /** @var \Drupal\user\UserInterface $previous */
    $previous = $this->userStorage->load($this->currentUser->id());
    // Call logout hooks when switching from original user.
    $this->moduleHandler->invokeAll('user_logout', [$previous]);
 
    // Regenerate the session ID to prevent against session fixation attacks.
    $this->sessionManager->regenerate();
 
    // Supposed "safe" user switch method https://www.drupal.org/node/218104
    // @todo Use `Drupal::service('account_switcher')` but care about session.
    $this->currentUser->setAccount($user);
    $this->session->set('uid', $user->id());
 
    // Call all login hooks when making user login.
    $this->moduleHandler->invokeAll('user_login', [$user]);
    return $previous;
  }

 

在切换用户的逻辑代码里面,先将当前用户登出,然后使用切换到的用户,重新生成会话信息,实现登录。


使用Tome模块给Drupal站点实现动静分离

我们有一个客户,想在节日期间关闭网站的数据库,还想让网站能够访问。这个需求在国内很常见。我们初步选定了Tome模块。

Tome模块简介

Tome模块是Drupal站点生成静态站的利器,只需要Drupal就能生成静态站点,生成的效果和动态站点几乎一样,对于views,多媒体的支持也很友好。将站点静态化,可以极大的提高站点的性能和安全性。Tome的原理和早先的Boost模块一样,就是发起http请求,将动态生成的页面保存到指定的本地文件目录里面。


项目地址:https://www.drupal.org/project/tome 


这是我们在实际使用中的总结:

首先尝试了Tome模块,总是报错,我检查了一下,网站升级不彻底,重新帮助客户升级到Dupal最新版本,再安装Tome模块。


个别模块冲突

在后台生成静态页面的时候,总是报错。我们研究一下,增加了日志输出。检查到了几个出错的页面:

namespace Drupal\tome_static\Form;
StaticGeneratorForm
 
\Drupal::logger('tome')->notice('path:'.$path);
      
       ///  path:data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD…
       // png
       if(substr($path,0,11) == 'data:image/'){
         return;
       }
       //可以在settings.php里面配置
 
       $exclude_paths = [
         '/wechat',
         '/en/wechat',
        
       ];
       if(in_array($path, $exclude_paths)){
                return;
       }

   发现写的wechat模块提供的路径,匿名用户下,在tome下面报错,就把它排除出去了,还有以data:image/开头的奇怪路径也被我排除掉了。

   这样批处理就可以正常运行。成功生成了静态页面。

  tome配置

   这是后面我们的tome在settings.php里面的配置:

$settings['tome_files_directory'] = '/data/8211/static/files';
$settings['tome_content_directory'] = '/data/8211/static/content';
$settings['tome_static_directory'] = '/data/8211/static/html';
$settings['tome_static_path_exclude'] = [
  '/wechat',
  '/en/wechat',
];

 

Apache、Nginx配置

生成的静态文件存在了/data/8211/static/html目录下面。我们将端口指向到这个静态文件的目录,当前使用的apache,可以直接访问,运行良好。

 

将同样的目录,部署到nginx下面,使用Drupal的nginx配置,是出不来的。Tome生成静态文件夹,部署到nginx下面,采用这样的配置:

    location / {
         try_files $uri $uri/ $uri/index.html; # For Tome static html files
    }

这样就可以跑起来了。

   

 Superfish异常处理

Superfish 的ID发生变化问题,由于整个整点,只用了一个,所以可以这样:

function mytheme_preprocess_superfish(array &$variables) {
  $variables['id'] = 'superfish-main';
}


Drupal版本: