微信小程序获取图文混排文章(wordpress图文)
之前用微信小程序做了个获取wordpress文章列表的实验品,在做到点击小程序的文章列表时打开文章详情,遇到的问题是小程序不能直接解析富文本html里面的图片,显示出来的全是文字。 网上说小程序端用wxParse插件就能解析了图文( 我没有试过 )。另外同一个主体的认证订阅号或服务号好像可以直接内嵌H5页面,详情见: https://developers.weixin.qq.com/miniprogram/dev/component/web-view.html 。用的是网友提供的另一种思路,就是服务端返回文章详情的时候,以文字及图片数组方式返回,然后小程序端进行判断,遇到图片的就使用image标签进行解析。
服务器查询wordpress数据库的文章并返回前端小程序,getdetail.php
<?php include('../conn.php'); $id=$_REQUEST['id'];//wordoress中文章的id $db = new Db('select ID,post_date,post_content,post_title from wp_posts where post_status="publish" and post_type = "post" and ID='.$id); //var_dump($db->get_res()); $r0=$db->get_res(); $r['post_content']=_setcontenttoarray($r0[0]['post_content']); $r['post_title']=$r0[0]['post_title']; echo json_encode($r);//返回结果 function _filtercontent($content){//提取图片数组 $content = preg_replace('/<\/?(html|head|meta|link|base|body|title|style|script|form|iframe|frame|frameset|p)[^><]*>/i','',$content); $pattern ='<img.*?src="(.*?)">'; preg_match_all($pattern,$content,$matches); return $matches[1]; } function _setcontenttoarray($content){//提取文字数组 $content = preg_replace('/<\/?(img)[^><]*>/i','#+#',$content); $res = preg_replace('/<\/?(html|head|meta|link|base|body|title|style|script|form|iframe|frame|frameset|p|span|strong|sup|figure|article)[^><]*>/i','',$content); // $res = str_replace(' ', "\r\t ", $res); // $res = str_replace('<br/><br/>', "\r\n", $res); // $res = str_replace('<br/>', "\r\n", $res); // $res = str_replace('<br>', "\r\n", $res); $res=strip_tags($res);//过滤网页标签 $res=str_replace("\n\n\n","\n",$res); $res=str_replace("\n\n","\n",$res); $res=str_replace("<","<",$res); $arr = explode('#+#', $res); foreach( $arr as $k=>$v){ if( !$v ) unset( $arr[$k] ); } return $arr; }
微信小程序的文章详情页面的js、wxml文件:
// pages/post-detail/post-detail.js Page({ /** * 页面的初始数据 */ data: { }, /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { var that=this wx.request({ url: 'https://ranjuan.cn/test/getdetail.php', data: { id:options.id }, success: function (res) { //将获取到的json数据,存在名字叫zhihu的这个数组中 that.setData({ getdetail: res.data, //res代表success函数的事件对,data是固定的,stories是是上面json数据中stories }) console.log(res) } })//发起网络请求 } })
<!--pages/post-detail/post-detail.wxml--> <!-- <text>{{getdetail[0].post_title}}</text> <view> <text> {{getdetail[0].post_content}} </text> </view> --> <view class="main"> <text>{{getdetail.post_title}}</text> <view class="content"> <block wx:for="{{getdetail.post_content}}"> <text>{{item}}</text> <view wx:if="{{getdetail['post_img'][index]}}"> <image src="{{getdetail['post_img'][index]}}" mode="widthFix"></image> </view> </block> </view> </view>
以下为文章标题列表页面部分源码,点击文章标题后出触发onDetial操作js,从该页面携带文章id参数传递到post-detail页面并完成后端请求获取文章详情并显示。
/* 传递id参数打开文章详情页面js */ onDetail: function (event) { var postId = event.currentTarget.dataset.id; console.log("on post id is" + postId); wx.navigateTo({ url: "../post-detail/post-detail?id="+postId }) /* wx.redirectTo({ url: '../post-detail/post-detail', }) */ },
<!--index.wxml--> <view class="container"> <view style="algin:center;font-size:20px">文章列表</view> <block wx:for="{{contentlist}}"> <!-- <text>{{item.images}}</text> --> <view class="main" bindtap="onDetail" data-id='{{item.ID}}'> <view class="post_left"> <image style="width:100%;height:100%" src="../../images/topp.jpg" ></image> </view> <view class="post_right"> <view class="post_title">{{item.post_title}}</view> <view class="post_date"> {{item.post_date}}</view> </view> </view> </block> </view>
备忘:event.currentTarget.dataset.id 获取到的是当前触发操作时wxml文件中 data-id标签属性内容
微信小程序获取wordpress文章列表(上拉加载更多+token验证)纯源码
基于互联网精神,在注明出处的前提下本站文章可自由转载!
本文链接:https://ranjuan.cn/weixin-get-pictures-text/
赞赏
微信赞赏支付宝赞赏
发表评论