¿Cómo reducir / aumentar el peso del módulo en el proceso de instalación del módulo?

8

Estoy desarrollando un módulo personalizado y quiero aumentar el peso de mi módulo cuando esté instalado.

¿Cómo puedo conseguir esto? De lo contrario, ¿alguien sabe en qué tabla se almacena el peso del módulo?

usuario15837
fuente

Respuestas:

5

Use en hook_module_implements_alter()lugar de cambiar el peso del módulo.

Implementación de muestra 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
fuente
Bueno. Yo haré eso. Mi pregunta es ¿dónde puedo ver estos valores en la base de datos de drupal?
user15837
2
A menos que el módulo que intentas superar también use hook_module_implements_alter()(en realidad me pasó a mí, creo que con uno de los módulos i18n).
wizonesolutions
5

Hay una API para esto ahora:

module_set_weight('your_module_name', 10);

También puede implementar el gancho como dijo Ivan Jaros, lo que permite un control más detallado (por ejemplo, primero para un gancho, último para otro, después de un módulo específico para el tercero). Pero el peso del módulo también debería funcionar.

Berdir
fuente
Pero, ¿cuál tiene mayor prioridad, pesos altos o bajos?
RaisinBranCrunch
44
Primero viene bajo: -10 ....- 1 .... 1 .... 10 y así sucesivamente.
Berdir el
4

Si usa configuraciones de importación / exportación, puede cambiar el peso del módulo en el core.extension.ymlarchivo, número después del nombre del módulo.

skorzh
fuente
2
Esto solo funciona si también modifica el orden de los módulos en la lista. Deben ordenarse por peso del módulo, ascendente.
marcvangend
4

Puede usar el módulo de peso Módulos :

A veces necesitamos modificar el orden de ejecución de los módulos, y algunas personas pueden escribir un código que ejecute la consulta para modificar el peso de un módulo en la tabla del sistema, alguien puede ir directamente a su cliente SQL favorito y modificar el registro directamente. Este módulo proporciona una interfaz para reordenar el peso de los módulos.

Divulgación: soy el mantenedor del módulo Módulos Peso .

Adrian Cid Almaguer
fuente
No para secuestrar su respuesta, pero ¿cuáles son algunos ejemplos de por qué "a veces necesitamos modificar el orden de ejecución"?
Pierre.Vriens
@ Pierre.Vriens Buena pregunta, realmente no sé: -O. Creo que a veces debes asegurarte de que el código es el primero o el último ejecutado. Nunca tuve este problema antes, solo veo el módulo en Drupal 7 sin una versión de Drupal 8 y comienzo el puerto ;-)
Adrian Cid Almaguer
1
@ Pierre.Vriens en mi caso, D8 tiene la función de inyección de dependencia, esto le permite cambiar cualquier cosa en services.yml en su módulo personalizado. El problema surge cuando lo que desea anular realmente en una prioridad más alta (también conocido como peso del módulo), lo que quiero decir es cuando su módulo personalizado se ejecuta primero que el módulo services.yml que desea cambiar. Por lo tanto, debe cambiar su módulo personalizado para que se ejecute después.
kororo