Drupal 7中依赖模块加载父模块CSS/JS文件的实现方法
Drupal 7 公共模块资源调用实现方案
现有配置生效说明
你当前父模块mymodule的.info文件中直接定义scripts[]、stylesheets[all][]的写法本身是有效的,只要满足以下条件即可自动加载资源:
- 父模块
mymodule已正确启用 - 子模块
mysecondmodule已声明dependencies[] = mymodule,启用子模块时会自动校验并要求启用父模块 - 修改配置后清空Drupal全站缓存
如果需要更灵活的按需加载能力(不需要全局加载所有资源,仅在需要的模块/页面中调用),推荐使用库定义方案,具体操作如下:
库定义按需加载方案
步骤1:父模块定义公共资源库
在mymodule.module文件中实现hook_library(),将公共CSS、JS封装为可复用的库:
<?php /** * Implements hook_library(). */ function mymodule_library() { $libraries = []; // 自定义公共资源库 $libraries['common_assets'] = [ 'title' => '公共样式与脚本库', 'version' => '7.x-1.0', 'css' => [ drupal_get_path('module', 'mymodule') . '/css/main.css' => [], drupal_get_path('module', 'mymodule') . '/css/mobile.css' => [], ], 'js' => [ drupal_get_path('module', 'mymodule') . '/mymodule.js' => [], ], ]; return $libraries; } ?>
步骤2:按需加载资源库
根据你的使用场景选择加载方式:
- 全局自动加载:如果需要父模块启用后全站所有页面都加载资源,在
mymodule.module中新增hook_init()实现:
<?php /** * Implements hook_init(). */ function mymodule_init() { drupal_add_library('mymodule', 'common_assets'); } ?>
- 子模块按需加载:如果只需要在依赖父模块的子模块中加载资源,在子模块
mysecondmodule的对应业务钩子(如页面钩子、表单钩子、区块渲染钩子等)中调用即可:
<?php // 放在子模块需要加载资源的逻辑位置即可 drupal_add_library('mymodule', 'common_assets'); ?>
注意事项
- 所有代码、配置修改完成后必须清空Drupal全站缓存才能生效
- 检查资源文件路径和实际存储路径一致,避免出现404错误
- 非必要不建议全局加载资源,按需加载可以减少页面不必要的资源请求,提升性能
内容的提问来源于stack exchange,提问作者Shamelezz
相关产品推荐
相关产品推荐

