You need to enable JavaScript to run this app. Drupal 7中依赖模块加载父模块CSS/JS文件的实现方法
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 08:45:05