Como reduzir / aumentar o peso do módulo no processo de instalação do módulo?

8

Estou desenvolvendo um módulo personalizado e quero aumentar o peso do meu módulo quando o módulo estiver instalado.

Como posso conseguir isso? Caso contrário, alguém sabe em qual tabela o peso do módulo está armazenado?

user15837
fonte

Respostas:

5

Use em hook_module_implements_alter()vez de alterar o peso do módulo.

Implementação de amostra 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
fonte
OK. Eu farei isso. Minha pergunta é onde posso ver esses valores no banco de dados drupal ?.
user15837
2
A menos que o módulo que você está tentando compensar também use hook_module_implements_alter()(realmente aconteceu comigo, acho que com um dos módulos i18n).
Wizonesolutions
5

Há uma API para isso agora:

module_set_weight('your_module_name', 10);

Você também pode implementar o gancho como Ivan Jaros disse, o que permite um controle mais refinado (por exemplo, primeiro para um gancho, último para outro, depois de um módulo específico para o terceiro). Mas o peso do módulo também deve funcionar.

Berdir
fonte
Mas qual tem prioridade mais alta, pesos altos ou baixos?
RaisinBranCrunch #
4
A baixa vem primeiro: -10 ....- 1 .... 1 .... 10 e assim por diante.
Berdir 6/11/16
4

Se você usar configurações de importação / exportação, poderá alterar o peso do módulo no core.extension.ymlarquivo, número após o nome do módulo ser peso.

skorzh
fonte
2
Isso só funciona se você também alterar a ordem dos módulos na lista. Eles devem ser pedidos pelo peso do módulo, ascendente.
Marcvangend # 9/18
4

Você pode usar o módulo de peso Módulos :

Às vezes, precisamos modificar a ordem de execução dos módulos, e algumas pessoas podem escrever um código que execute a consulta para modificar o peso de um módulo na tabela do sistema, alguém pode ir direto para o seu cliente SQL favorito e modificar o registro diretamente. Este módulo fornece uma interface para reordenar o peso dos módulos.

Divulgação: Eu sou o mantenedor do módulo Modules Weight .

Adrian Cid Almaguer
fonte
Não para seqüestrar sua resposta, mas quais são alguns exemplos de por que "às vezes precisamos modificar a ordem de execução"?
Pierre.Vriens
@ Pierre.Vriens Boa pergunta, eu realmente não sei: -O. Eu acho que às vezes você precisa ter certeza de que o código é o primeiro ou o último executado. Eu nunca tenho esse problema antes, eu só ver o módulo no Drupal 7 sem uma versão Drupal 8 e eu começo a porta ;-)
Adrian Cid Almaguer
11
@ Pierre.Vriens no meu caso, o D8 possui o recurso Injeção de Dependência, isso permite alterar qualquer coisa no services.yml no seu módulo personalizado. O problema surge quando o que você deseja substituir realmente na prioridade mais alta (também conhecido como peso do módulo), o que quero dizer é quando o seu módulo personalizado é executado primeiro do que o módulo services.yml que você deseja alterar. Portanto, você precisa alterar seu módulo personalizado para ser executado depois.
Kororo