Propos
Dans le cadre de la gestion des End_point de mon application et des paths des médias, j'aimerais storé dans les settings Javascript de drupal l'url du site et également l'url du module qui héberge mon application.
Cela permettra de dynamiser les appelles API et médias.
drupalSettings
Je vais stocker mes nouvelles variables dans l'objet drupalSettings de Drupal et ces nouvelles variables seront envoyer a chaque fois qu'une page sera vue via la function hook_preprocess_page(). Par la même logique nous pourront envoyer des customs variable a nos templates twig, mais nous verrons cela dans un autre article, bientôt ;)
Créons notre fonction dans le fichier .module de notre module.
hook_preprocess_HOOK
/nom_du_module.module
/**
* Implements hook_preprocess_page() for html templates.
*/
function nom_du_module_preprocess_page(&$variables) {
// ...
}
L'url du site
Drupal::request()->getHost() est une méthode qui permet de récupérer le nom du domaine.
$host = \Drupal::request()->getHost();
Drupal::request()->getSchemeAndHttpHost() est une méthode qui permet de récupérer le nom du domaine préfixé du protocole (http/https).
$host = \Drupal::request()->getSchemeAndHttpHost();
L'url du module
Nous allons appeler le service containers des modules.Encore une function Static founie par l'Api Drupal.
$module_handler = \Drupal::service('module_handler');
Avant d'opérer notre altération, nous allons vérifier que le module existe.
if ($module_handler->moduleExists('player_kids')) {
}
Enfin, nous pouvons stocker notre variable.
En résumé
/**
* Implements hook_preprocess_page() for html templates.
*/
function nom_du_module_preprocess_page(&$variables) {
$host = \Drupal::request()->getHost();
$hostBase = \Drupal::request()->getSchemeAndHttpHost();
if ($host) {
// Store $variable host
$variables['#attached']['drupalSettings']['App']['desktop']['host'] = $host;
$variables['#attached']['drupalSettings']['App']['desktop']['hostBase'] = $hostBase;
}
// Get module Path
$module_handler = \Drupal::service('module_handler');
// check if module exist
if ($module_handler->moduleExists('player_kids')) {
// get the sting path of the module
$mod_player_path = $module_handler->getModule('player_kids')->getPath();
// Store $variable path module
$variables['#attached']['drupalSettings']['App']['desktop']['modPath'] = $mod_player_path;
}
}
Les configurations sont récupérables dans ReactJs par l'intermédiaire de l'objet window.
console.log(window);
Enjoy!