退出

  • 文章收藏

  • 消息

  • 修改资料

  • 我发现我这人有个毛病:遇到一件没有完成的任务就会一直做一直做,连觉都不睡,这样很累。其实有很多事都不是一两天能做完的,项目的开发更是如此。本来阳寿就已经不多了,为了限制自己的行为,珍爱生命,我决定采取以下措施:

    严格的限定任务,每天解决一个小问题,并记录下关键要点。内容一定要少,留下足够的时间去休息。

    文章页中a标签的处理

    这里的a标签是通过wxParse转换而来的。有关前文请参考:WordPress微信小程序开发:从入门到入土

    微信小程序不是网页,里面的链接不会自动解析,也不会自动跳转。而微信小程序是不支持外链的,也就是说,除了你在小程序配置中填写的资源地址,其他的资源都不允许加载进来。这就要求我们对内链和外链做一个区分,并且优雅的处理它。

    我采用的办法是:解析链接地址,点击内链链接到小程序文章页,点击外链复制链接到剪贴板并提示:嗯,并没有什么独特。

    内链的链接一般分为两种:文章(posts)和页面(pages)。而页面,除了普通页面以外,还有一些经过特殊定制的页面,如友链等。当然,一般来说我们并不会把这种链接加到文章和页面里;分类和搜索链接一般也不会有人放到文章里。所以我们处理的内容就分为3类:文章,页面,以及可能出现的一两个特殊页面。

    如果你的文章内确实有很多其他特殊内链,建议采用和外链一样的做法,复制到剪贴板,保持小程序的封闭性,毕竟链来链去,到最后谁都控制不了。

    我们获得的是文章的链接(link),而查询WordPress REST API发现,获取文章/页面详情只有id这一个方式,因此问题的关键就是如何获得文章的id。

    如果你使用的固定链接是带有post_id的,那么恭喜你,你可以直接解析链接字符串获得pid,用不着发送请求了。

    但大多数用户使用都是使用包含slug(文章名字)的链接。例如我,我的结构比较简单:your-site.com/slug/

    获取slug后,我们可以通过slug的方式查询获得文章对象:

    your-site.com/wp-json/wp/v2/posts?slug=xxx

    如何区分页面和文章呢?如果我们在上述接口里输入页面的slug,会返回一个空的列表,判断返回对象长度,如果是0,则通过下面的请求查询:

    your-site.com/wp-json/wp/v2/pages?slug=xxx

    wxParse在转换a标签的时候,会自动为每个a标签添加 bindtap="wxParseTagATap"。这个在wxml调试器里并不会出现,导致我之前以为没有这个事件…

    最终的代码如下,大家可以根据自己的实际情况进行修改。

    首先是点击复制到剪贴板,可以采用官方的wx.setClipboardData实现,这个没什么好说的。

    解析链接地址获取slug的函数:

    function get_slug_from_link(link){
      let len = link.length-20
      let slug = link.substr(19, len)
      return slug
    }

    加载文章的函数:

    function get_single_by_slug(slug){
      wx.request({
        url: "your-site/wp-json/wp/v2/posts?slug="+slug,
        success: function(res){
          if (res.data.length !== 0){
            let pid = res.data[0].id
            wx.navigateTo({
              url: '../single/single?pid='+pid.toString(),
              fail: function (res) {
                no_request()
              }
            })
          }
          else {
            wx.request({
              url: "your-site/wp-json/wp/v2/pages?slug=" + slug,
              success: function (res) {
                let pid = res.data[0].id
                wx.navigateTo({
                  url: '../page/page?pid=' + pid.toString(),
                  fail: function () {
                    no_request()
                  }
                })
              },
              fail: function (res) {
                no_request()
              }
            })
          }
        },
        fail: function () {
          no_request()
        }
      })
    }

    点击事件函数:

    wxParseTagATap: function(e){
        let link = e.currentTarget.dataset.src
        if (link.indexOf('your-site.com')===-1){
          api.copy_to_clipboard(link)
        }
        else {
          let slug = api.get_slug_from_link(link)
          rest.get_single_by_slug(slug)
        }
      }

    另外今天勉强保证了0点左右睡觉。可喜可贺,可喜可贺。

    支付宝 微信 BTC
    支付宝扫一扫,向我打赏
    来源:原创

    声明:本站原创文章采用 BY-NC-SA 创作共用协议,转载时请以链接形式标明本文地址;非原创(转载)文章版权归原作者所有。 ©查看版权声明

  • 白銀の魔法師
  • 所有的信徒都别无二致,所有的信仰都一文不值
  • 发表评论

    你目前的身份是游客,请输入昵称和邮箱! 输入资料 关闭