Bagaimana cara membuat dan menggunakan pengait khusus?

10

Saya memposting pertanyaan di sini , yang punya satu saran, tetapi tidak ada jawaban. Apakah ada yang punya saran tentang bagaimana menerapkan pengait kustom di Drupal 8 yang akan memungkinkan modul lain untuk memperbarui daftar isi yang dibuat oleh modul induk? Daftar isi akan menjadi daftar yang tidak terurut.

Kevin Nowaczyk
sumber
2
Lihatlah bagian di bawah "Untuk mendefinisikan sebuah kait:" di sini , apakah itu membantu?
Clive
Hanya sebagian saja. Ini menjelaskan cara membuat kait untuk fungsi anak untuk digunakan, tetapi tidak ada pada bagaimana modul induk membuat konten. Apakah orang tua menggunakan pengontrol untuk menambahkan konten ke, katakanlah, $ output ['table_of_contents'] dan kemudian kait induk menambahkan data yang dikembalikan dari anak, ke array ini?
Kevin Nowaczyk
2
@KevinNowaczyk tergantung pada tujuan hook. Sebuah hook tidak spesifik untuk rendering, tetapi dapat digunakan untuk itu. Jika Anda ingin membuat kait kustom untuk menyediakan konten dan Anda memohon kait di tempat Anda membutuhkan konten, itu akan berfungsi. Dan karena pengait adalah kebiasaan dan baru untuk fungsi Anda, Anda harus menentukan bagaimana pengait harus memberikan hasilnya. Kemudian jika Anda mengaktifkan hook selama fungsi render induk Anda, Anda dapat menerima hasilnya dalam format yang dapat digunakan.
Neograph734

Jawaban:

8

Bagian ini berada di pengontrol di modul induk:

$plugin_items = [];
// Call modules that implement the hook, and let them add items.
\Drupal::moduleHandler()->alter('flot_examples_toc', $plugin_items);
if (count($plugin_items > 0)) {
  $output['plugins'] = [
    '#title' => 'Plugins',
    '#theme' => 'item_list',
    '#items' => $plugin_items,
  ];
}

Dan ini berada di file [modul] .module anak.

use Drupal\Core\Url;

function mymodule_flot_examples_toc_alter(&$item_list) {
  $options = [
    ':one' => Url::fromRoute('flot_spider_examples.example')->toString(),
  ];
  $item_list[] = t('<a href=":one">Spider Chart</a> (with spider plugin)', $options);
}

Orang tua membuat array dan memberikannya kepada anak-anak dengan referensi. Mereka dapat mengubah array dengan menambahkan elemen ke dalamnya. Induk kemudian menambahkannya ke render array.

Kevin Nowaczyk
sumber
5

Demi kesederhanaan jika Anda ingin membuat dan menggunakan custom hook di drupal 8 untuk digunakan pengembang lain

pertama untuk membantu orang lain mendefinisikan penggunaan hook Anda di file mymodule.api.php hook ini dapat bertindak atas apa saja yang diperlukan.

contoh:

 // my hook 
 function hook_mymodule_alter_something(array &$data) {
   // here others will make a module that will call this to alter "$data"
 }

maka ketika dibutuhkan dalam modul Anda.

 \Drupal::moduleHandler()->invokeAll('mymodule_alter_something', [&$data]);

maka pengembang lain dapat memanfaatkan ini dengan menelepon

function MYOTHERMODULE_mymodule_alter_something($data) {
Taggart Jensen
sumber