Tôi đang làm việc với một mô-đun liên kết đến một tệp âm thanh và phát nó khi có điều gì đó xảy ra. Tôi có nó để có một nút trong cấu hình quản trị viên để đặt đường dẫn của tệp thành đường dẫn mặc định là tệp đi kèm với mô-đun. Hơn nữa, một người có thể tải lên tệp của riêng họ và nó sẽ chuyển sang phát tệp đó khi điều đó xảy ra. Vấn đề là, mô-đun trên bản cài đặt mới không làm gì cả, khi tôi muốn nó có âm thanh mặc định được thiết lập để phát ngay sau khi cài đặt. Tôi đã thử làm điều đó với tệp settings.yml, tuy nhiên, cố gắng truy cập dữ liệu đó sẽ trả về giá trị rỗng cho đến khi tôi vào cấu hình quản trị viên và đặt nó thành mặc định hoặc tải lên tệp của riêng tôi.
Dưới đây là một cái nhìn tại các tập tin:
MYMODULE.settings.yml
pathToSound: '/assets/sound.mp3'
MYMODULE.schema.yml
MYMODULE.settings:
gõ: config_object
nhãn: 'Cài đặt MYMODULE'
lập bản đồ:
con đườngToSound:
loại: chuỗi
nhãn: 'Đường dẫn đến âm thanh'
MYMODULE.module
<?php
sử dụng Drupal\Core\Form\FormStateInterface;
hàm MYMODULE_page_attachments(mảng &$attachments) {
$attachments['#attached']['library'][] = 'MYMODULE/MYMODULE';
$attachments['#attached']['drupalSettings']['MYMODULE'] = [
'pathToSound' => \Drupal::config('MYMODULE.settings')->get('pathToSound'),
];
}
MYMODULE.js
/**
* @tập tin
*/
(hàm ($, Drupal) {
'Sử dụng nghiêm ngặt';
Drupal.behaviors.MYMODULE = {
/**
* Hành vi đính kèm Drupal.
*/
đính kèm: chức năng (bối cảnh, cài đặt) {
// Kích hoạt khi xóa bộ đệm để phát âm thanh.
$('body', context).once('MYMODULE').each(function () {
console.log(settings.MYMODULE.pathToSound);
var sound = document.createElement('audio');
sound.setAttribute('src', settings.MYMODULE.pathToSound);
sound.play();
});
},
};
})(jQuery, Drupal, drupalSettings, một lần);
Tôi đã cố gắng loại trừ càng nhiều mã không liên quan càng tốt. Dù sao, cũng có một biểu mẫu chỉnh sửa "pathToSound" MYMODULE.settings khi mô-đun được định cấu hình trong menu quản trị. Cuối cùng, có tệp JS phát âm thanh. Như tôi đã nói, nó hoạt động sau khi được định cấu hình trong menu quản trị, nhưng không hoạt động trước đó. Tôi đang tự hỏi trước khi nó được định cấu hình, pathToSound trả về null mặc dù nó được đặt trong MYMODULE.settings. Bất kỳ ý tưởng sẽ được đánh giá rất cao, cảm ơn!
CHỈNH SỬA: Đã điều chỉnh mã theo đề xuất, vẫn không hoạt động. Cũng đã thêm JS đang chạy nhật ký bảng điều khiển đang trả về giá trị rỗng.