Come ridurre / aumentare il peso del modulo sul processo di installazione del modulo?


8

Sto sviluppando un modulo personalizzato e voglio aumentare il peso del mio modulo quando il modulo è installato.

Come posso raggiungere questo obiettivo? Altrimenti, qualcuno sa in quale tabella è memorizzato il peso del modulo?

Risposte:


5

Utilizzare hook_module_implements_alter()anziché modificare il peso del modulo.

Implementazione di esempio da 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;
  }
}

Va bene. Lo farò. La mia domanda è dove posso vedere questi valori nel database drupal ?.
user15837

2
A meno che non usi anche il modulo che stai cercando di superare hook_module_implements_alter()(in realtà mi è successo, penso con uno dei moduli i18n).
wizonesolutions,

5

C'è un'API per questo ora:

module_set_weight('your_module_name', 10);

Puoi anche implementare il gancio come ha detto Ivan Jaros, il che consente un controllo più accurato (ad es. Primo per un gancio, ultimo per un altro, dopo un modulo specifico per il terzo). Ma dovrebbe funzionare anche il peso del modulo.


Ma quale ha priorità più alta, pesi alti o bassi?
RaisinBranCrunch

4
Il primo viene prima: -10 ....- 1 .... 1 .... 10 e così via.
Berdir,

4

Se si utilizzano le configurazioni di importazione / esportazione, è possibile modificare il peso del modulo nel core.extension.ymlfile, il numero dopo il nome del modulo è il peso.


2
Funziona solo se si modifica anche l'ordine dei moduli nell'elenco. Dovrebbero essere ordinati in base al peso del modulo, in ordine crescente.
marcvangend,

4

È possibile utilizzare il modulo di peso Moduli :

A volte abbiamo bisogno di modificare l'ordine di esecuzione dei moduli e alcune persone potrebbero scrivere un codice che esegue la query per modificare il peso di un modulo nella tabella di sistema, qualcuno potrebbe andare direttamente al suo client SQL preferito e modificare direttamente il record. Questo modulo fornisce un'interfaccia per riordinare il peso dei moduli.

Informativa: sono il manutentore del modulo Moduli Peso .


Non dirottare la tua risposta, ma quali sono alcuni esempi del perché "a volte abbiamo bisogno di modificare l'ordine di esecuzione"?
Pierre.Vriens,

@ Pierre.Vriens Bella domanda, davvero non lo so: -O. Penso che a volte devi essere sicuro che il tuo codice sia il primo o l'ultimo eseguito. Non ho mai avuto questo problema prima, vedo solo il modulo in Drupal 7 senza una versione di Drupal 8 e avvio la porta ;-)
Adrian Cid Almaguer

1
@ Pierre.Vriens nel mio caso, D8 ha la funzione di iniezione di dipendenza, questo ti consente di cambiare qualsiasi cosa in services.yml nel tuo modulo personalizzato. Il problema sorge quando ciò che si desidera sovrascrivere effettivamente con priorità più alta (ovvero il peso del modulo), ciò che intendo è quando il modulo personalizzato viene eseguito prima del modulo services.yml che si desidera modificare. Quindi, è necessario modificare il modulo personalizzato da eseguire dopo.
kororo,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.