Comment réduire / augmenter le poids du module sur le processus d'installation du module?

8

Je développe un module personnalisé et je souhaite augmenter le poids de mon module lorsque le module est installé.

Comment puis-je atteindre cet objectif? Sinon, quelqu'un sait-il dans quelle table le poids du module est stocké?

user15837
la source

Réponses:

5

Utilisez hook_module_implements_alter()plutôt que de modifier le poids du module.

Exemple d'implémentation de 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;
  }
}
Vladislav
la source
D'accord. Je ferai ça. Ma question est où je peux voir ces valeurs dans la base de données drupal?.
user15837
2
À moins que le module que vous essayez de l'emporter n'utilise égalementhook_module_implements_alter() (en fait, cela m'est arrivé, je pense avec l'un des modules i18n).
wizonesolutions
5

Il y a maintenant une API pour cela:

module_set_weight('your_module_name', 10);

Vous pouvez également implémenter le crochet comme l'a dit Ivan Jaros, ce qui permet un contrôle plus fin (par exemple, premier pour un crochet, dernier pour un autre, après un module spécifique pour le troisième). Mais le poids du module devrait également fonctionner.

Berdir
la source
Mais lequel a une priorité plus élevée, des poids élevés ou faibles?
RaisinBranCrunch
4
Low vient en premier: -10 ....- 1 .... 1 .... 10 et ainsi de suite.
Berdir
4

Si vous utilisez des configurations d'importation / exportation, vous pouvez modifier le poids du module dans le core.extension.ymlfichier, le nombre après le nom du module est le poids.

skorzh
la source
2
Cela ne fonctionne que si vous modifiez également l'ordre des modules dans la liste. Ils doivent être classés par poids de module, croissant.
marcvangend
4

Vous pouvez utiliser le module de poids des modules:

Parfois, nous devons modifier l'ordre d'exécution des modules, et certaines personnes peuvent écrire un code qui exécute la requête pour modifier le poids d'un module dans la table système, certains peuvent aller directement à son client SQL préféré et modifier directement l'enregistrement. Ce module fournit une interface pour réorganiser le poids des modules.

Divulgation: Je suis le responsable du module Modules Weight .

Adrian Cid Almaguer
la source
Pas pour détourner votre réponse, mais quels sont quelques exemples de la raison pour laquelle "parfois nous devons modifier l'ordre d'exécution"?
Pierre.Vriens
@ Pierre.Vriens Bonne question, je ne sais vraiment pas: -O. Je pense que parfois, vous devez être sûr que votre code est le premier ou le dernier exécuté. Je n'ai jamais eu ce problème auparavant, je vois juste le module dans Drupal 7 sans une version Drupal 8 et je démarre le port ;-)
Adrian Cid Almaguer
1
@ Pierre.Vriens dans mon cas, D8 a la fonction d'injection de dépendance, cela vous permet de changer quoi que ce soit dans services.yml dans votre module personnalisé. Le problème se pose lorsque ce que vous souhaitez remplacer est en fait de priorité plus élevée (aka. Poids du module), ce que je veux dire, c'est lorsque votre module personnalisé est exécuté en premier que le module services.yml que vous souhaitez modifier. Par conséquent, vous devez modifier votre module personnalisé pour qu'il soit exécuté après.
kororo