跳转到主要内容
jahng 提交于 7 May 2017

原文:http://jahng.cn/node/61

Drupal 8 模块 里面添加js或者css的时候,一般是通过在模块里面定义library,然后附加到各种页面元素上来添加到页面上,参考http://jahng.cn/node/60

但是之前开发百度地图模块的时候遇到一个问题,就是我要添加到页面的js是带有参数的,这个参数其实是百度AK,如果这个模块是我自己项目使用的话,那很好办,我直接在library定义文件里面hard code就行了,比如像下面这种方式:

 

baidumap:   version: 1.x   js:       http://api.map.baidu.com/api?v=2.0&ak=xxxxxx: { type: external, minified: true }   header: true

 

 

这里的ak=xxxxxx的xxxxxx表示从百度地图官网申请到的ak。

问题在于,这个模块开发是贡献到官网,给所有需要这个modolue的人使用的,所以这里的ak自然也不能hard code,而是让使用的用户可以自己通过后台配置。

所以,我自己暂时没想到什么方法,在google上也没找到方法通过libraries.yml 文件定义library,同时可以在yml文件里面引用到php变量生成动态js外部链接。

所以我想到的办法就是不在libraries.yml文件里面定义,而是通过drupal8 的hook_library_info_build定义library,就像相面这种方式:

function mymodule_library_info_build(){   $config = \Drupal::config('mymodule.settings');   $ak = ($config->get('baidumap_ak'));   $libraries = [];   if (Drupal::moduleHandler()->moduleExists('mymodule')) {

    $libraries['baidumap.api']['header'] = true;

    $js_uri = 'http://api.map.baidu.com/api?v=2.0&ak=' . $ak;     $libraries['baidumap.api']['js'][$js_uri] = [       'type' => 'external',       ''     ];   }   return $libraries; }

标签
Drupal 版本