我们需要在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参数。
先谢谢。
答案 0 :(得分:0)
添加动态库定义。
/**
* 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();
}
}
}