У меня есть модуль, над которым я работаю, который ссылается на звуковой файл и воспроизводит его, когда что-то происходит. У меня это так, что в конфигурации администратора есть кнопка, чтобы установить путь к файлу по умолчанию, который является файлом, который поставляется с модулем. Кроме того, можно загрузить свой собственный файл, и он переключится на воспроизведение этого файла, когда это произойдет. Проблема в том, что модуль при новой установке ничего не делает, когда я хочу, чтобы этот звук по умолчанию звучал сразу после установки. Я попытался сделать это с файлом settings.yml, однако попытка получить доступ к этим данным возвращает значение null, пока я не войду в конфигурацию администратора и либо не установлю его по умолчанию, либо не загружу свой собственный файл.
Вот посмотрите на файлы:
МОЙ МОДУЛЬ.settings.yml
pathToSound: '/assets/sound.mp3'
МОЙМОДУЛЬ.schema.yml
МОЙ МОДУЛЬ.Настройки:
тип: config_object
label: 'Настройки MYMODULE'
сопоставление:
путь к звуку:
тип: строка
лейбл: 'Путь к звуку'
МОЙ МОДУЛЬ.модуль
<?php
используйте Drupal\Core\Form\FormStateInterface;
функция MYMODULE_page_attachments (массив и $ вложения) {
$attachments['#attached']['library'][] = 'МОЙ МОДУЛЬ/МОЙ МОДУЛЬ';
$attachments['#attached']['drupalSettings']['MYMODULE'] = [
'pathToSound' => \Drupal::config('MYMODULE.settings')->get('pathToSound'),
];
}
МОЙМОДУЛЬ.js
/**
* @файл
*/
(функция ($, Друпал) {
'использовать строгий';
Drupal.behaviors.MYMODULE = {
/**
* Поведение присоединения Drupal.
*/
прикрепить: функция (контекст, настройки) {
// Запускается, когда кеш очищается для воспроизведения звука.
$('тело', контекст).once('МОЙ МОДУЛЬ').каждый(функция () {
console.log(settings.MYMODULE.pathToSound);
var sound = document.createElement('аудио');
sound.setAttribute('src', settings.MYMODULE.pathToSound);
звук.играть();
});
},
};
})(jQuery, Drupal, drupalSettings, один раз);
Я пытался исключить как можно больше нерелевантного кода. Во всяком случае, есть также форма, которая редактирует MYMODULE.settings «pathToSound», когда модуль настроен в меню администратора. Наконец, есть файл JS, который воспроизводит звук. Как я уже сказал, это работает после настройки в меню администратора, но не раньше. Мне интересно, прежде чем он будет настроен, pathToSound возвращает null, даже если он установлен в MYMODULE.settings. Буду признателен за любые идеи, спасибо!
РЕДАКТИРОВАТЬ: Скорректированный код в соответствии с предложениями, все еще не работает. Также добавлен JS, который запускает журнал консоли, который возвращает значение null.