Am un modul la care lucrez, care leagă la un fișier de sunet și îl redă când se întâmplă ceva. O am astfel încât să existe un buton în configurația admin pentru a seta calea fișierului la o cale implicită, care este un fișier care vine cu modulul. În plus, cineva poate încărca propriul fișier și va trece la redarea acelui fișier atunci când se întâmplă lucrul. Problema este că modulul de la o instalare nouă nu face nimic, atunci când vreau să aibă acel sunet implicit configurat pentru a fi redat imediat după instalare. Am încercat să fac asta cu un fișier settings.yml, dar încercând să accesez acele date returnează null până când intru în configurația admin și fie o setez la implicit, fie încărc propriul fișier.
Iată o privire asupra fișierelor:
MYMODULE.settings.yml
pathToSound: „/assets/sound.mp3”
MYMODULE.schema.yml
MYMODULE.settings:
tip: config_object
etichetă: „MYMODULE Settings”
cartografiere:
pathToSound:
tip: sfoară
etichetă: „Path to Sound”
MYMODULE.modul
<?php
utilizați Drupal\Core\Form\FormStateInterface;
funcția MYMODULE_page_attachments(array &$attachments) {
$attachments['#attached']['library'][] = 'MYMODULE/MYMODULE';
$attachments['#attached']['drupalSettings']['MYMODULE'] = [
'pathToSound' => \Drupal::config('MYMODULE.settings')->get('pathToSound'),
];
}
MYMODULE.js
/**
* @fișier
*/
(funcție ($, Drupal) {
„utilizați strict”;
Drupal.behaviors.MYMODULE = {
/**
* Comportamentul de ataşare Drupal.
*/
atașați: funcție (context, setări) {
// Se declanșează când memoria cache este golită pentru a reda un sunet.
$('body', context).once('MYMODULE').each(function () {
console.log(settings.MYMODULE.pathToSound);
var sound = document.createElement('audio');
sound.setAttribute('src', settings.MYMODULE.pathToSound);
sunet.play();
});
},
};
})(jQuery, Drupal, drupalSettings, o dată);
Am încercat să exclud cât mai mult cod irelevant posibil. Oricum, există și un formular care editează MYMODULE.settings „pathToSound” atunci când modulul este configurat în meniul admin. În cele din urmă, există fișierul JS care redă sunetul. După cum am spus, funcționează după ce este configurat în meniul de administrare, dar nu înainte. Mă întreb înainte de a fi configurat, pathToSound returnează null, chiar dacă este setat în MYMODULE.settings. Orice idee ar fi foarte apreciată, mulțumesc!
EDIT: Cod ajustat conform sugestiilor, încă nu funcționează. De asemenea, a adăugat JS care rulează jurnalul consolei care returnează null.