微信小程序获取wordpress文章列表(上拉加载更多+token验证)纯源码
最近对微信小程序有点兴趣,就在网上找了一些教程练手,本文主要实现微信小程序获取wordpress数据库中的已发布文章按时间倒序排序;关于token的身份验证,如果不涉及到非公开的内容可以不必验证登录,后面的示例中使用了header头携带token以及 url参数中携带token,另外小程序本身貌似就支持session_id会携带cookie。小程序上获取到的wordpress文章列表最终效果如下图(下拉刷新+上拉加载更多):

进入页面openapp页面时自动加载列表。下面直接上微信小程序端源码
如果要启用下拉刷新的话app.json需要增加一个配置 "enablePullDownRefresh": true
"window": {
"navigationBarTitleText": "染卷",
"navigationBarTextStyle": "black",
"enablePullDownRefresh": true
},
openapps.js
// pages/openapp/openapp.js
Page({
/**
* 页面的初始数据
*/
data: {
hidden: true, //隐藏表单控件
page: 1, //当前请求数据是第几页
pageSize: 10, //每页数据条数
hasMoreData: true, //上拉时是否继续请求数据,即是否还有更多数据
contentlist: [], //获取的数据列表,以追加的形式添加进去
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
// 页面初始化 options为页面跳转所带来的参数
wx.setStorageSync('token', '请确保之前已经存放了token')
//发起网络请求
var that = this//不要漏了这句,很重要
that.getInfo('加载中……')
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
this.data.page = 1
this.getInfo('刷新中……')
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
if (this.data.hasMoreData) {
this.getInfo('加载更多数据')
} else {
wx.showToast({
title: '没有更多数据',
})
}
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
},
// 获取分页列表
getInfo: function (message) {
var that = this;
wx.showNavigationBarLoading() //在当前页面显示导航条加载动画
wx.showLoading({ //显示 loading 提示框
title: message,
})
wx.request({
url: 'https://ranjuan.cn/getdata.php', //本地设置不校验合法域名
data: { page: that.data.page, count: that.data.pageSize,token: wx.getStorageSync('token') },
method: 'get',
header: { 'content-type': 'application/x-www-form-urlencoded','Access_Token':wx.getStorageSync('token') },
success: function (res) {
// var contentlistTem = that.data.contentlist;
var getdata = that.data.contentlist;
if (res.data.data.length > 0) {
wx.hideNavigationBarLoading() //在当前页面隐藏导航条加载动画
wx.hideLoading() //隐藏 loading 提示框
if (that.data.page == 1) {
getdata = []
}
var contentlist = res.data.data;
if (contentlist.length < that.data.pageSize) {
that.setData({
contentlist: getdata.concat(contentlist),
hasMoreData: false
})
} else {
that.setData({
contentlist: getdata.concat(contentlist),
hasMoreData: true,
page: that.data.page + 1
})
}
}
},
fail: function (res) {
wx.hideNavigationBarLoading()
wx.hideLoading()
fail()
},
complete: function (res) {
},
})
},
})
openapp.wxml
/* pages/openapp/openapp.wxml */
<view class="container">
<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_content" bindtap="onDetail" data-id='{{item.ID}}'> {{item.post_content}}</view>-->
<view class="post_date"> {{item.post_date}}</view>
</view>
</view>
</block>
</view>
openapp.wxss
/* pages/openapp/openapp.wxss */
.container{
width: 100%;
padding:10rpx;
/* display: flex;
flex-wrap: wrap;*/
}
.main{
margin:10rpx;
width:100%;
border-radius: 8rpx;
background:#FFFFFF;
/* border: 3rpx solid #42A5F5; */
display: flex;
flex-wrap: wrap;
}
.post_left{
width:25%;
}
.post_right{
width:75%;
}
.post_title{
width:100%;
margin-left: 10rpx;
height: 40px;
font-size:14px;
color:#000;
}
.post_date{
width:100%;
font-size:10px;
margin-left: 10rpx;
}
.post_content{
margin-left: 10rpx;
font-size:12px;
color: lightsteelblue;
width:100%;
height:40px;
overflow: hidden;
}
远程接口getdata.php文件,如果无条件的可以使用后面给出的模拟数据。
<?php
file_put_contents("2.txt","\n\r".$t." | ".json_encode($_REQUEST),FILE_APPEND);
include('../conn.php');//链接wordpress数据库
if(isset($_REQUEST['token']) && $_REQUEST['token'] !=''){//这里仅演示以get方式获取客户端token
session_id($_REQUEST['token']);
session_start();
if(empty($_SESSION)){
echo '尚未登录';
}else{
//echo 'openid='.$_SESSION['openid'];
/* for($i=0;$i<12;$i++){
$r['data'][$i]['id']=$i;
$r['data'][$i]['msg']=$i+$i*$i.'信息详情';
++$i;
}*/
$page=$_REQUEST['page'];//页面
$count=$_REQUEST['count'];//每页个数
$db = new Db('select ID,post_date,post_content,post_title from wp_posts where post_status="publish" and post_type = "post" order by post_date desc limit '.($page-1)*$count.','.$count);
//var_dump($db->get_res());
$r['data']=$db->get_res();
//因为这里将查询结果赋予了数组$r['data'],
//所以小程序客户端取的时候多了一级contentlist = res.data.data;
//如果这里是$r=$db->get_res();那么小程序取值可以写成contentlist = res.data;
echo json_encode($r);
}
}
采用模拟数据的getdata.php
<?php
$page=$_REQUEST['page'];//页面
$count=$_REQUEST['count'];//每页个数
for($i=0;$i<$count;$i++){
$r['data'][$i]['ID'] = ($page-1)*$count;
$r['data'][$i]['post_date'] = '2020-01-02';
$r['data'][$i]['post_content'] = 'wenben文本wenben文本wenben文本wenben文本wenben文本wenben文本wenben';
$r['data'][$i]['post_title'] = '染卷第'.(($page-1)*$count+$i).'篇文章标题';
}
echo json_encode($r);
die;
基于互联网精神,在注明出处的前提下本站文章可自由转载!
本文链接:https://ranjuan.cn/weixin-get-article-list/
赞赏
微信赞赏
支付宝赞赏
发表评论