需求:微信,微博分享功能
方案:使用AddToAny module
实现:安装AddToAny后,在后台配置好微信、微博,页面可实现分享功能:微信默认是新标签页中显示二维码,用户扫码打开。
改进:希望微信分享按钮点击后,当前页面弹出二维码并且可以自定义样式。
1、最开始希望在addtoany的后台可以实现改进,在 /admin/config/services/addtoany 中的 Additional options 中通过js代码实现。
a2a_config.callbacks.push({
share: function(share_data) {
if (share_data.service == "WeChat") {
window.open(share_data.node.href,'_blank','width=850,height=650,top=300,left=600')
}
},
});
上述代码可以实现将新标签页打开的窗口改为独立新窗口打开,也可以控制窗口大小及位置。
问题:窗口的位置是相对于屏幕的,而不是浏览器;而且无法使用百分比。新窗口的样式也无法自定义
实现方案2:
- 使用 endroid_qr_code 实现二维码的生成。
- 在share block 中存放二维码。跟随分享按钮place到指定页面,由前端默认隐藏。
- 在addtoany的配置中阻止微信分享按钮点击后的默认窗口打开,改为弹出并显示第一步place的二维码block。
- 二维码的样式可以在block中添加class调整
1、安装 endroid_qr_code 模块,
报错如下:
原因是endroid_qr_code 与qrcode版本不匹配。因为我是手动安装的endroid_qr_code;这里应该使用composer安装,composer会同时安装匹配的依赖文件。
composer require 'drupal/endroid_qr_code:^3.0'
2、这里采用的方法是将二维码放到block中的:
<div class="qr-code"><img alt="" height="80" src="/image-qr-generate-with-url?path=[current-page:url:absolute]" typeof="foaf:Image" width="80" />
<p class="text">微信扫码分享</p>
</div>
注意:
这里用到了 [current-page:url:absolute] ;这是令牌模式获取站点数据,会自动匹配当前页面地址。
使用改令牌需要安装Token、Token Filter模块,然后在 /admin/config/content/formats =》Full HTML(自己选择)中进行配置:
下面的Replaces选项必须勾选,否则 [current-page:url:absolute] 会作为纯文本显示,而不是解析为url。
方案实现更新:
在上述方案中,有一个关键点就是需要阻止addtoany默认的微信分享窗口,一开始我打算让前端来做,但是结果是这里addtoany使用的是异步加载的方式,后台的Additional options 这里只是回调处理,所以在这里已经来不及阻止它的异步加载了。
仔细想了想,他的文档应该有这种功能,于是仔细的找了找,终于找到了:
在自定义共享 这里的 Share Event Handling & Modifying(共享事件处理和修改);
源文档是英文的,我用浏览器翻译了下:
源文档:
文档说通过stop属性可以取消共享事件,只要在回调中加入stop属性就可以了。
主义最下方的红框内容,他给的实例中修改了url,必须使用return的方式才会更新到后续的操作中,所以这里应该是:
return {stop:true};
其他修改分享title啊,url什么的文档说的很清楚了,这里不多说了。
到这里,使用addtoany实现微信自定义分享终于完美结束啦!