关于定制Drupal核心模块启用链接适配Module Filter的技术问询
实现方案:自定义模块替换“启用新添加模块”链接
绝对可以实现这个需求!我之前帮朋友处理过类似的场景,核心思路是利用Drupal的模块安装钩子,替换默认的状态消息链接,让它指向Module Filter的过滤页面。下面是具体步骤:
1. 创建自定义模块
首先创建一个简单的自定义模块(比如命名为module_filter_new_modules_redirect),需要两个核心文件:
1.1 模块信息文件 (module_filter_new_modules_redirect.info.yml)
name: 'Module Filter New Modules Redirect' type: module description: 'Redirects the "Enable newly added modules" link to Module Filter''s filtered view of newly installed modules.' core_version_requirement: ^9 || ^10 dependencies: - drupal:system - module_filter:module_filter
1.2 模块逻辑文件 (module_filter_new_modules_redirect.module)
<?php /** * Implements hook_modules_installed(). */ function module_filter_new_modules_redirect_modules_installed($modules) { // Get the messenger service $messenger = \Drupal::messenger(); // Remove the default status message added by system module $messages = $messenger->all(); foreach ($messages as $type => $message_list) { foreach ($message_list as $key => $message) { if (strpos($message, 'enable newly added modules') !== FALSE) { $messenger->deleteByMessage($message, $type); } } } // Generate the filtered URL: encode module names separated by spaces $module_names = implode(' ', $modules); $filtered_url = \Drupal\Core\Url::fromRoute('system.modules_list', [], [ 'query' => ['filter' => $module_names], 'absolute' => TRUE, ])->toString(); // Add our custom status message with the correct link $messenger->addStatus(t('You can now <a href=":url">enable newly added modules</a>.', [':url' => $filtered_url])); }
2. 安装并启用自定义模块
把这个模块放到你的Drupal站点的modules/custom/目录下,然后在后台启用它。
3. 测试效果
安装任意新模块后,你会看到原来的“启用新添加模块”链接现在指向/admin/modules?filter=模块名1%20模块名2,直接展示你刚安装的模块,完美适配Module Filter的功能!
补充说明
- 这个方案兼容Drupal 9和10版本,只要Module Filter模块支持对应版本就行。
- 如果需要处理批量安装多个模块的场景,代码里已经用
implode(' ', $modules)把所有新安装的模块名用空格分隔,Module Filter会自动识别这个过滤条件。
内容的提问来源于stack exchange,提问作者Markus
相关产品推荐
相关产品推荐

