ฉันมีโมดูลที่ฉันกำลังทำอยู่ซึ่งเชื่อมโยงกับไฟล์เสียงและเล่นเมื่อมีบางอย่างเกิดขึ้น ฉันมีเพื่อให้มีปุ่มในการกำหนดค่าผู้ดูแลระบบเพื่อกำหนดเส้นทางของไฟล์เป็นเส้นทางเริ่มต้นซึ่งเป็นไฟล์ที่มาพร้อมกับโมดูล นอกจากนี้ ผู้ใช้อาจอัปโหลดไฟล์ของตนเองและจะเปลี่ยนเป็นเล่นไฟล์นั้นเมื่อสิ่งนั้นเกิดขึ้น ปัญหาคือ โมดูลที่ติดตั้งใหม่ไม่ทำอะไรเลย เมื่อฉันต้องการให้ตั้งค่าเสียงเริ่มต้นนั้นให้เล่นทันทีหลังจากติดตั้ง ฉันพยายามทำเช่นนั้นด้วยไฟล์ settings.yml อย่างไรก็ตาม การพยายามเข้าถึงข้อมูลนั้นจะส่งคืนค่า null จนกว่าฉันจะเข้าสู่การกำหนดค่าของผู้ดูแลระบบและตั้งค่าเป็นค่าเริ่มต้นหรืออัปโหลดไฟล์ของฉันเอง
นี่คือการดูไฟล์:
MYMODULE.settings.yml
pathToSound: '/assets/sound.mp3'
MYMODULE.schema.yml
MYMODULE การตั้งค่า:
ประเภท: config_object
ป้ายกำกับ: 'การตั้งค่า MYMODULE'
การทำแผนที่:
เส้นทางเสียง:
ประเภท: สตริง
ป้ายกำกับ: 'เส้นทางสู่เสียง'
MYMODULE.module
<?php
ใช้ Drupal\Core\Form\FormStateInterface;
ฟังก์ชัน MYMODULE_page_attachments (อาร์เรย์ &$ ไฟล์แนบ) {
$attachments['#attached']['library'][] = 'MYMODULE/MYMODULE';
$attachments['#attached']['drupalSettings']['MYMODULE'] = [
'pathToSound' => \Drupal::config('MYMODULE.settings')->get('pathToSound'),
];
}
MYMODULE.js
/**
* @ไฟล์
*/
(ฟังก์ชัน ($, Drupal) {
'ใช้อย่างเข้มงวด';
Drupal.behaviors.MYMODULE = {
/**
* พฤติกรรมการแนบ Drupal
*/
แนบ: ฟังก์ชัน (บริบท การตั้งค่า) {
// ทริกเกอร์เมื่อแคชถูกล้างเพื่อเล่นเสียง
$('body', context).once('MYMODULE').each(function () {
console.log (การตั้งค่า MYMODULE.pathToSound);
เสียง var = document.createElement ('เสียง');
sound.setAttribute ('src', การตั้งค่า MYMODULE.pathToSound);
เสียง.เล่น();
});
},
};
})(jQuery, Drupal, drupalSettings, ครั้งเดียว);
ฉันพยายามแยกโค้ดที่ไม่เกี่ยวข้องออกให้ได้มากที่สุด อย่างไรก็ตาม ยังมีแบบฟอร์มที่แก้ไข MYMODULE.settings "pathToSound" เมื่อกำหนดค่าโมดูลในเมนูผู้ดูแลระบบ ในที่สุดก็มีไฟล์ JS ที่เล่นเสียง อย่างที่ฉันพูดไป มันใช้งานได้หลังจากกำหนดค่าในเมนูผู้ดูแลระบบ แต่ไม่ใช่ก่อนหน้านี้ ฉันสงสัยว่าก่อนที่จะกำหนดค่า pathToSound จะคืนค่า null แม้ว่าจะถูกตั้งค่าใน MYMODULE.settings ความคิดใด ๆ ที่จะได้รับการชื่นชมอย่างมาก ขอบคุณ!
แก้ไข: แก้ไขโค้ดตามคำแนะนำ ยังไม่ทำงาน เพิ่ม JS ที่กำลังเรียกใช้บันทึกคอนโซลซึ่งส่งคืนค่าว่างด้วย