ฉันโพสต์คำถามที่นี่ซึ่งมีหนึ่งข้อเสนอแนะ แต่ไม่มีคำตอบ ใครบ้างมีคำแนะนำเกี่ยวกับวิธีการใช้เบ็ดที่กำหนดเองใน Drupal 8 ซึ่งจะช่วยให้โมดูลอื่น ๆ ในการปรับปรุงสารบัญที่สร้างขึ้นโดยโมดูลแม่? สารบัญจะเป็นรายการที่ไม่ได้เรียงลำดับ
ฉันโพสต์คำถามที่นี่ซึ่งมีหนึ่งข้อเสนอแนะ แต่ไม่มีคำตอบ ใครบ้างมีคำแนะนำเกี่ยวกับวิธีการใช้เบ็ดที่กำหนดเองใน Drupal 8 ซึ่งจะช่วยให้โมดูลอื่น ๆ ในการปรับปรุงสารบัญที่สร้างขึ้นโดยโมดูลแม่? สารบัญจะเป็นรายการที่ไม่ได้เรียงลำดับ
คำตอบ:
ส่วนนี้อยู่ในคอนโทรลเลอร์ในโมดูลพาเรนต์:
$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,
];
}
และสิ่งนี้จะอยู่ในไฟล์ย่อย [module] .module
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);
}
ผู้ปกครองสร้างอาร์เรย์และส่งไปยังเด็ก ๆ โดยการอ้างอิง พวกเขาสามารถเปลี่ยนอาเรย์โดยการเพิ่มองค์ประกอบเข้าไป จากนั้นพาเรนต์จะเพิ่มลงในอาร์เรย์เรนเดอร์
เพียงเพื่อความง่ายถ้าคุณต้องการสร้างและใช้เบ็ดที่กำหนดเองใน drupal 8 สำหรับนักพัฒนาคนอื่นที่จะใช้
ก่อนอื่นเพื่อช่วยให้ผู้อื่นกำหนดการใช้งาน hook ของคุณในไฟล์ mymodule.api.php เบ็ดนี้สามารถทำอะไรก็ได้ที่ต้องการ
ตัวอย่าง:
// my hook
function hook_mymodule_alter_something(array &$data) {
// here others will make a module that will call this to alter "$data"
}
จากนั้นเมื่อจำเป็นในโมดูลของคุณ
\Drupal::moduleHandler()->invokeAll('mymodule_alter_something', [&$data]);
จากนั้นผู้พัฒนารายอื่นสามารถใช้สิ่งนี้ได้โดยการโทร
function MYOTHERMODULE_mymodule_alter_something($data) {