如何在Drupal 8

时间:2017-04-24 13:55:30

标签: drupal

我们需要在modulename.libraries.yml文件中的外部JS(Google MAP API URL)中传递动态参数(API Key)。因为,API密钥由管理员以Drupal配置形式存储。

modulename.libraries.yml: google.mapaddr: js: https://maps.googleapis.com/maps/api/js?key=[API-KEY]&libraries=places: { type: external }

请指导我们在Drupal 8标准中将Config变量传递给External JS参数。

先谢谢。

3 个答案:

答案 0 :(得分:0)

添加动态库定义。

使用hook_library_info_build()功能

/**
 * Implements hook_library_info_build().
 */

function my_module_library_info_build() {

  $config = \Drupal::config('my_module.settings');
  $api_key = $config->get('my_module.api_key');

  $libraries = [];

  $libraries['my_module_js'] = [
    'version' => '1.x',
    'header' => true,
    'js' => [
      'https://my.external.com/' => [
        'type' => 'external',
        'minified' => true,
        'attributes' => [
          'key' => "$api_key",
          'async' => "async",
        ],
      ],
    ],
  ];

  return $libraries;
}

我希望它对你有用。

答案 1 :(得分:0)

根据上述建议,更新后的代码(如下)并且工作正常。

/**
 * Implements hook_library_info_build()
 */
function my_module_library_info_build() {
  $config = \Drupal::config('my_module.settings');
  $api_key = $config->get('api_key');
  $libraries = [];
  $libraries['my_module.libraryid'] = [
    'version' => '1.x',
    'js' => [
        'https://maps.googleapis.com/maps/api/js?key='.$api_key.'&libraries=places' => [
            'type' => 'external',
        ],
    ],
  ];
  return $libraries;
}

此外,我们可以将此动态库包含为"依赖关系" modulename.libraries.yml文件中的另一个库,如下格式。

custom-js:
  version: VERSION
    js:
    js/custom.js: {}
      dependencies:
        - core/jquery
        - my_module/my_module.libraryid

答案 2 :(得分:0)

以上建议对我有用,但是对于我的用例,我仍然需要根据您当前在网站上使用的语言动态添加的language参数,因此如果使用了上面注释中添加的钩子,并且还添加了以下钩子:

function hook_js_alter(&$javascript) {
  foreach($javascript as &$js_file) {
    if (strpos($js_file['data'], 'maps.googleapis.com') !== FALSE) {
      $js_file['data'] .= '&language=' . \Drupal::languageManager()->getCurrentLanguage()->getId();
    }
  }
}