Bagaimana cara Mengurangi / menambah bobot modul pada proses pemasangan modul?

8

Saya sedang mengembangkan satu modul khusus dan saya ingin menambah berat modul saat modul dipasang.

Bagaimana saya bisa mencapai ini? Kalau tidak, apakah ada yang tahu di meja mana berat modul disimpan?

pengguna15837
sumber

Jawaban:

5

Gunakan hook_module_implements_alter()daripada mengubah bobot modul.

Contoh implementasi dari 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
sumber
Baik. Saya akan melakukannya. Pertanyaan saya adalah di mana saya bisa melihat nilai-nilai ini di database drupal ?.
user15837
2
Kecuali jika modul yang Anda coba beratkan juga menggunakan hook_module_implements_alter()(sebenarnya terjadi pada saya, saya pikir dengan salah satu modul i18n).
wizonesolutions
5

Ada API untuk ini sekarang:

module_set_weight('your_module_name', 10);

Anda juga dapat menerapkan pengait seperti yang dikatakan Ivan Jaros, yang memungkinkan kontrol lebih halus (mis. Pertama untuk satu kait, terakhir untuk yang lain, setelah modul khusus untuk ketiga). Tetapi bobot modul juga harus bekerja.

Berdir
sumber
Tetapi yang memiliki prioritas lebih tinggi, bobot tinggi atau rendah?
RaisinBranCrunch
4
Rendah lebih dulu: -10 ....- 1 .... 1 .... 10 dan seterusnya.
Berdir
4

Jika Anda menggunakan impor / ekspor konfigurasi, Anda dapat mengubah berat modul dalam core.extension.ymlfile, nomor setelah nama modul adalah berat.

skorzh
sumber
2
Ini hanya berfungsi jika Anda juga mengubah urutan modul dalam daftar. Mereka harus dipesan berdasarkan berat modul, naik.
marcvangend
4

Anda dapat menggunakan modul Berat modul:

Kadang-kadang kita perlu memodifikasi urutan eksekusi modul, dan beberapa orang dapat menulis kode yang mengeksekusi kueri untuk memodifikasi bobot modul dalam tabel sistem, seseorang mungkin langsung ke klien SQL favoritnya dan memodifikasi catatan secara langsung. Modul ini menyediakan antarmuka untuk menyusun ulang bobot modul.

Pengungkapan: Saya adalah pengelola Modul Berat modul .

Adrian Cid Almaguer
sumber
Bukan untuk membajak jawaban Anda, tetapi apa beberapa contoh mengapa "kadang-kadang kita perlu mengubah urutan eksekusi"?
Pierre.Vriens
@ Pierre.Vriens Pertanyaan bagus, saya benar-benar tidak tahu: -O. Saya pikir kadang-kadang Anda perlu memastikan bahwa kode Anda adalah yang pertama atau yang terakhir dieksekusi. Saya tidak pernah memiliki masalah ini sebelumnya, saya hanya melihat modul di Drupal 7 tanpa versi Drupal 8 dan saya memulai port ;-)
Adrian Cid Almaguer
1
@ Pierre.Vriens dalam kasus saya, D8 memiliki fitur Injeksi Ketergantungan, ini memungkinkan Anda untuk mengubah apa pun di services.yml dalam modul khusus Anda. Masalahnya muncul ketika apa yang ingin Anda timpa sebenarnya dalam prioritas yang lebih tinggi (alias. Berat modul), yang saya maksud adalah ketika modul khusus Anda dieksekusi lebih dulu daripada module services.yml yang ingin Anda ubah. Oleh karena itu, Anda perlu mengubah modul khusus Anda untuk dieksekusi setelah.
kororo