Skip to research

BasePath et PathModule envoyés aux DrupalSettings Javascript de Drupal 8 pour une récupération dans ReactJs

Temps de lecture
Environ 1 minutes

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!