微信小程序获取图文混排文章(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/
赞赏
微信赞赏
支付宝赞赏
发表评论