如何在模块安装过程中减轻/增加模块的重量?


8

我正在开发一个自定义模块,并且想在安装模块时增加模块的重量。

我该如何实现?否则,有人知道模块的重量存储在哪个表中吗?

Answers:


5

使用hook_module_implements_alter()而不是更改模块重量。

来自content_translation.module的示例实现:

function content_translation_module_implements_alter(&$implementations, $hook) {
  switch ($hook) {

    // Move our hook_entity_type_alter() implementation to the end of the list.
    case 'entity_type_alter':
      $group = $implementations['content_translation'];
      unset($implementations['content_translation']);
      $implementations['content_translation'] = $group;
      break;

    // Move our hook_entity_bundle_info_alter() implementation to the top of the
    // list, so that any other hook implementation can rely on bundles being
    // correctly marked as translatable.
    case 'entity_bundle_info_alter':
      $group = $implementations['content_translation'];
      $implementations = [
        'content_translation' => $group,
      ] + $implementations;
      break;
  }
}

好的。我会去做。我的问题是在drupal数据库中哪里可以看到这些值?
user15837'1

2
除非您尝试超越的模块使用了hook_module_implements_alter()(实际上我发生了,我认为这是i18n模块之一)。
wizonesolutions

5

现在有一个API:

module_set_weight('your_module_name', 10);

您还可以按照Ivan Jaros所说的那样实现该钩子,这样可以实现更细粒度的控制(例如,第一个钩子是第一个钩子,最后一个钩子是另一个钩子,第三个钩子是特定模块的钩子)。但是模块的重量也应该起作用。


但是,哪一个优先级更高,权重高低?
RaisinBranCrunch

4
低是第一位:-10 ....- 1 .... 1 .... 10,依此类推。
贝尔迪尔

4

如果使用导入/导出配置,则可以在core.extension.yml文件中更改模块的重量,模块名称后的数字为重量。


2
仅当您还更改列表中模块的顺序时,此方法才有效。它们应按模块重量升序订购。
marcvangend 18'Apr

4

您可以使用模块重量模块:

有时我们需要修改模块的执行顺序,有些人可以编写执行查询的代码来修改系统表中模块的权重,有些人可以直接转到他最喜欢的SQL客户端并直接修改记录。该模块提供了一个界面,可以对模块的重量进行重新排序。

披露:我是Modules Weight模块的维护者。


不是要劫持您的答案,而是为什么“有时我们需要修改执行顺序”的一些示例?
Pierre.Vriens,

@ Pierre.Vriens好问题,我真的不知道:-O。我认为有时您需要确保代码是第一个或最后一个执行的代码。我以前从未遇到过这个问题,我只是在Drupal 7中看到没有Drupal 8版本的模块,然后启动了端口;-)
Adrian Cid Almaguer

1
在我的情况下,@ Pierre.Vriens D8具有“依赖注入”功能,这使您可以在自定义模块中更改services.yml中的任何内容。当您要实际覆盖优先级更高的优先级(也就是模块权重)时,就会出现问题,我的意思是,当您的自定义模块比您要更改的模块services.yml首先执行时。因此,您需要更改自定义模块以在之后执行。
kororo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.