Как уменьшить / увеличить вес модуля в процессе установки модуля?

8

Я разрабатываю один пользовательский модуль и хочу увеличить его вес при установке.

Как мне этого добиться? Иначе кто-нибудь знает, в какой таблице хранится вес модуля?

user15837
источник

Ответы:

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
2
Если модуль, который вы пытаетесь перевесить, также использует hook_module_implements_alter()(на самом деле это случилось со мной, я думаю, с одним из модулей i18n).
wizonesolutions
5

Для этого есть API:

module_set_weight('your_module_name', 10);

Вы также можете реализовать хук, как сказал Иван Ярош, который позволяет более тонко контролировать (например, сначала для одного хука, потом для другого, после определенного модуля для третьего). Но вес модуля тоже должен работать.

Berdir
источник
Но что имеет более высокий приоритет, высокий или низкий вес?
RaisinBranCrunch
4
Низкий на первом месте: -10 ....- 1 .... 1 .... 10 и так далее.
Бердир
4

Если вы используете конфигурации импорта / экспорта, вы можете изменить вес модуля в core.extension.ymlфайле, номер после имени модуля - вес.

skorzh
источник
2
Это работает, только если вы также измените порядок модулей в списке. Они должны быть упорядочены по весу модуля по возрастанию.
marcvangend
4

Вы можете использовать модуль веса модулей:

Иногда нам нужно изменить порядок выполнения модулей, и некоторые люди могут написать код, который выполняет запрос, чтобы изменить вес модуля в системной таблице, а кто-то может перейти прямо к своему любимому клиенту SQL и напрямую изменить запись. Этот модуль предоставляет интерфейс для изменения порядка веса модулей.

Раскрытие информации: я поддерживаю модуль Вес модулей .

Адриан Сид Альмагер
источник
Не для того, чтобы обмануть ваш ответ, но каковы некоторые примеры того, почему «иногда нам нужно изменить порядок выполнения»?
Pierre.Vriens
@ Pierre.Vriens Хороший вопрос, я действительно не знаю: -О. Я думаю, что иногда вам нужно быть уверенным, что ваш код выполняется первым или последним. У меня никогда не было этой проблемы, я просто вижу модуль в Drupal 7 без версии Drupal 8 и запускаю порт ;-)
Adrian Cid Almaguer
1
@ Pierre.Vriens в моем случае, D8 имеет функцию внедрения зависимостей, это позволяет вам изменить что-либо в services.yml в вашем пользовательском модуле. Проблема возникает, когда то, что вы хотите переопределить на самом деле с более высоким приоритетом (иначе говоря, вес модуля), что я имею в виду, когда ваш пользовательский модуль выполняется в первую очередь, чем модуль services.yml, который вы хотите изменить. Следовательно, вам нужно изменить свой пользовательский модуль, который будет выполняться после.
Короро