Drupal9踩坑:使用AddToAny实现微信自定义分享

需求:微信,微博分享功能
方案:使用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:

  1. 使用 endroid_qr_code 实现二维码的生成。
  2. 在share block 中存放二维码。跟随分享按钮place到指定页面,由前端默认隐藏。
  3. 在addtoany的配置中阻止微信分享按钮点击后的默认窗口打开,改为弹出并显示第一步place的二维码block。
  4. 二维码的样式可以在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实现微信自定义分享终于完美结束啦!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值